Bilgisayar ve telekomünikasyon dünyasında, 'port' denildiği zaman akla ilk
gelen genellikle fiziksel bağlantıda kullanılan ara birimlerdir. Bu tür 'port'
lar üzerinden bağlanmış herhangi bir makinaya 'data' gönderilebilir ve bu
makinanın işleyişi kontrol edilebilir. Örneğin, tipik bir bilgisayarda bir veya
birden fazla 'seri port' bir tane de 'paralel port' bulunur. Adından da
anlaşılacağı gibi 'seri port' dan bilgiler seri (her defasında bir bit) olarak
gönderilir ve bu tür 'port' lara genellikle tarayıcı (scanner) gibi cihazlar
takılır. Her defasında birden çok bit göndermek içinse 'paralel port'
kullanılır. Bu tip 'port' lara da yazıcı (printer) veya 'paralel port'
bağlantısı olan herhangi bir cihaz takılabilir.
Bizi ilgilendiren ve
çoğunlukla İnternet dünyasında kullanılan 'port' kavramı ise yukardaki tanımdan
biraz daha soyut bir kavramdir. Bu anlamda 'port' (ki dokümainin sonuna kadar
'port' bu anlamda kullanılacaktir) herhangi bir fiziksel bağlantı yeri değil,
mantıksal bir bağlanma şeklidir. Şöyle ki:
Günümüz dünyasında birçok işletim
sistemi birden fazla programın aynı anda çalışmasına izin vermektedir. Bu
programlardan bazıları dışarıdan gelen istekleri (istemci-client/request) kabul
etmekte ve uygun gördüklerine cevap (sunucu-server/response) vermektedir. Sunucu
programları çalışan bilgisayarlara birer adres verilir (bknz. IP adresleri) ve
bu adresler kullanılarak istenilen bilgisayarlara ulaşılır. Peki, ulaşılan bir
bilgisayar üzerindeki hangi sunucu programdan hizmet alınmak istendiği nasıl
belirtilir?
Bunun için bilgisayarlar üzerinde birtakım soyut bağlantı
noktaları tanımlanır ve herbirine, adresleyebilmek için positif bir sayı verilir
(port numarası). Bazı sunucu programları, daha önce herkes tarafından bilinen
'port' lardan hizmet verirken (örn: telnet->23. port) bazıları da sunucu
programını çalıştıran kişinin türüne ve isteğine göre değişik 'port' lardan
hizmet verir.
Dolayısıyla, ağ üzerindeki herhangi bir sunucu programa
bağlanmak istenildiğinde, programın çalıştığı bilgisayarın adresinin yanında
istekleri kabul ettiği 'port' numarasını da vermek gerekir. Örnek verecek
olursak:
144.122.156.104 'IP' adresine sahip makinada (orca) çalışan
'telnet' sunucu programına (23. 'port' dan hizmet veren) bağlanmak için
aşağıdaki satır yazılır.
telnet 144.122.156.104 23
Daha önce de
belirttiğimiz gibi bazı sunucu programların belirli 'port' lardan hizmet verdiği
bilindiği için, bu sunuculara bağlanmak istediğimizde, 'port' numarasını vermeye
gerek kalmaz. Bu durumda yukardaki satır
telnet 144.122.156.104
şeklinde
de yazılabilir.
Bilgisayar ilk açıldığında üzerinde çalışan sunucu
programlar otomatik olarak açılış dosyalarından çalıştırılabildiği gibi genel
kullanım biraz daha farklıdır.
Değişik 'port' ları dinleyen birçok
sunucu programın, hiçbir istemciye cevap vermediği durumda bile, birçok sistem
kaynağını gereksiz yere kullandığı düşünülerek, 'inetd' adında istemcilerle
diğer sunucu programlar arasında koordinasyonu sağlayan bir sunucu program
düşünülmüştür. Açılış dosyalarından da başlatılabilen bu sunucu tek başına bütün
'port' ları dinler ve herhangi birisine istek geldiği zaman aşağıdaki prosedürü
takip eder:
1- /etc/services dosyasından ilgili 'port' a hizmet veren
servis ismini bulur.
2- konfigürasyon dosyası olan '/etc/inetd.conf' dan bu
servis için gelen isteğe nasıl cevap vereceğini belirler ve gerekli programı
çalıştırır.
3- bir istek geldiği zaman tekrar 1`e döner.
Bir örnekle
anlatmadan önce tipik bir '/etc/services' ve '/etc/inetd.conf' dosyasının
içeriğine bakalım.
<'/etc/services')>
tcpmux 1/tcp
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
telnet 23/tcp
ktelnet 1023/tcp #Added by AS 5/5/98
smtp 25/tcp mail
time 37/tcp timserver
time 37/udp timserver
name 42/udp nameserver
whois 43/tcp nicname # usually to sri-nic
.
.
<'/etc/inetd.conf'>
# Ftp and telnet are standard Internet services.
#
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
#
# Shell, login, exec, comsat and talk are BSD protocols.
#
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
login stream tcp nowait root /usr/sbin/tcpd in.rlogind
exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
comsat dgram udp wait root /usr/sbin/in.comsat in.comsat
talk dgram udp wait root /usr/sbin/in.talkd in.talkd
.
.
23. 'port' a bir istek geldiğinde, 'inetd'
'/etc/services' dosyasına bakarak bu 'port' numarasına denk gelen servis ismini
('telnet') bulur. Daha sonra '/etc/inetd.conf' dosyasına bakarak bu servise denk
gelen sunucu programı ('/usr/sbin/in.telnetd') çalıştırır.
Herhangi bir
'port' u dinleyen program bir iş yaparken, başka bir deyişle dinlediği 'port' a
gelen bilgileri almaya hazır değilken, eğer bu 'port' 'buffered' ise gelen
bilgiler kaybolmaz. İşletim sistemi içerisine yerleştirilen programlar sayesinde
kapasitesi sınırlı kuyruklara yerleştirilerek ilgili sunucu programın alması
için bekletilirler.
Internet üzerinde herhangi bir IP adresi üzerindeki
'port' dan hizmet veren sunucu programa bağlantı yapmak isteyen istemci program,
sunucu programın cevaplarını (reply) yollamak için bağlantı kuracağı kendi
üzerindeki 'port' numarasını da sunucu programa gönderir.
'Port'
numarası genellikle 2 'byte' olarak tutulur. Bu nedenle 65536 adet 'port'
numaralamak mümkündür. Genellikle 1024`den küçük olan 'port' numaraları özel
hakları olan kullanıcılar (root) tarafından kullanılırken, büyük olanlar
genel kullanıma açıktır.
Mustafa ATAKAN
ODTU Bilgi İşlem Daire
Başkanlığı
Internet Teknolojileri Güvenliği
( security at metu.edu.tr 24/12/2001)
__________________________
Son yorumlar
3 gün 22 saat önce
6 gün 10 saat önce
6 gün 10 saat önce
6 gün 11 saat önce
1 hafta 1 gün önce
1 hafta 4 gün önce
2 hafta 8 saat önce
2 hafta 5 gün önce
3 hafta 1 saat önce
3 hafta 1 saat önce