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/tcpecho 7/tcpecho 7/udpdiscard 9/tcp sink nulldiscard 9/udp sink nullsystat 11/tcp usersdaytime 13/tcpdaytime 13/udpnetstat 15/tcpchargen 19/tcp ttytst sourcechargen 19/udp ttytst sourceftp-data 20/tcpftp 21/tcptelnet 23/tcpktelnet 1023/tcp #Added by AS 5/5/98smtp 25/tcp mailtime 37/tcp timservertime 37/udp timservername 42/udp nameserverwhois 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.ftpdtelnet 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.rshdlogin stream tcp nowait root /usr/sbin/tcpd in.rlogindexec stream tcp nowait root /usr/sbin/tcpd in.rexecdcomsat dgram udp wait root /usr/sbin/in.comsat in.comsattalk 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)