İnternet üzerinde veri
alişverişinde temel olan bir kaç kural
vardır, bunlardan ilki sunucu
(server) ile istemci
(client)
ilişkisidir.
Veri alışverişinin
başlayabilmesi için sunucu ile istemci arasında
bir bağlantı kurulması ilk şarttır.
Bağlantının
kurulmasını ve sonraki aşamalarını daha
rahat anlamanız için; istemciyi bir kargo kuryesine,
sunucuyu ise kuryenin elindeki paketi bırakacağı
binadaki bir alıcıya benzetelim (burada bina, verinin
gönderileceği bilgisayar ve alıcı da o
bilgisayardaki bir program olarak
düşünülmelidir).
Bağlantı kurulurken, kesinlikle istemci sunucuya bağlanır.
Yani
kurye binaya alıcının yanına gider,
alıcı veya bina kuryeye gitmez.
Bağlantı kurulduktan
sonra sunucu, genelde veriyi gönderen, istemci
de veriyi alan
taraftır; ancak bunun tersi de
mümkündür. Yani kurye binaya girdikten sonra
alıcıya paketini bırakabileceği gibi,
alıcıdan da çeşitli paketler alabilir
(mesela alıcının paketi aldığına
dair bir imza gibi).
Ancak işler maalesef ne gerçek hayatta ne de
internet üzerinde bu kadar basit değil. Öncelikle
kuryenin binaya ve alıcıya ulaşabilmesi
için elinde bir adres bulunması şart. Burada bir
parantez açarak IP adresi
nedir,
onu anlatalım.
IP, Internet Protokolünün
kısaltmasıdır.
İnternet üzerindeki her türlü veri
alışverişi bu iletişim kuralları
(protokol) ile yürütülür. IP
kurallarına göre, internete bağlı her aletin
bir IP adresi bulunması gereklidir. IP adresi
dediğimiz ise, şu an kullanılan 4. nesil IP
kurallarına (IPv4) göre XXX.XXX.XXX.XXX
şeklinde bir yapıya sahip
yalnızca rakam ve noktalardan oluşan bir dizidir.
Rakamlardan oluşan bu sayılar, yalnızca
0 ila 255 arasında olabilir. Yani
örnek olarak 127.0.0.1
bir IP
adresidir,
ancak 127.0.0.256
bir IP adresi değildir. Daha
detaylı
bilgi için, lütfen buraya bakınız.
IP adresinin ne olduğunu artık
öğrendiğimize göre devam edebiliriz.
Kuryemizin elinde doğru bir IP adresinin olduğunu
varsayalım, bu durumda doğru binaya kadar
gidebilecektir. Ancak binanın içine girmesi
gerektiğinde şöyle bir durumla
karşılaşacaktır; karşısındaki
binanın yalnızca bir adet kapısı yoktur.
Hangisine gireceğini de bilmesi gerekmektedir. Kapıya
benzettiğimiz kavramın aslında port
olarak
adlandırıldığını belirtelim ve
portun ne olduğuna dair ufak
bir
bilgi verelim. (Buradaki bilgilerin bazıları Mustafa ATAKAN'ın
buradaki anlatımlarından
derlenmiştir)
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 portlar üzerinden
bağlanmış herhangi bir makinaya veri
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 bu dokümanın 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. Bir
bilgisayar, dış dünya ile bağlantı
kurduğunda programların dışarıdan gelen
istekleri kabul edebilmeleri için
bir çok soyut bağlantı
noktası tanımlar ve herbirine, bunları
tanıyabilmek için pozitif bir sayı verilir (port numarası). Genelde 65.536 adedi TCP
tipinde, 65.536 adedi de UDP tipinde
olmak üzere, toplamda 131.072
adet
port tanımlanır. Bu portların bir
çoğu önceden bazı uygulamalar için
ayrılmıştır, mesela 80 nolu TCP portu web
uygulamaları için, 23 nolu TCP portu ise
telnet uygulamaları
için
ayrılmıştır.
Dolayısıyla, internet ü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: 127.0.0.1 adresine sahip makinada
çalışan telnet
sunucu
programına (23. port dan hizmet veren) bağlanmak
için 127.0.0.1:23
gibi bir adres
kullanırız.
Portun ne anlam ifade ettiğini öğrendiğimize
göre kurye örneğimize geri dönecek olursak,
kuryemizin paketi iletebilmesi için elinde doğru bir
IP adresi ve bir de port numarası
bulunmalıdır.
Örneğimizi biraz daha genişletelim. Binanın
bu kapıları (bilgisayarın portları)
kilitlenmemiş olsa da, binamızın
kapılarının açılmak için
dıştan bir kolu olmadığı için
içeriden birisi açmadığı sürece
binaya giremez. Bu nedenle, belirtilen
portun
izleniyor/dinleniyor olması gerekmektedir, yani
alıcımızın (programımızın)
bina yönetimine (işletim sistemine) "Bana
bazı paketler gelebilir ve ben şu
kapıdan getirmelerini istedim, şimdi o kapıyı
izlemeye ve birisi gelirse kapıyı içeriden
açıp girmesini sağlamaya gidiyorum"
demesi ve alıcının o kapıyı gelebilecek
paketlere karşı izlemesi gerekmektedir.
Alıcımızın bina yönetimini
uyardığını, bina yönetiminin
alıcımızı engellemediğini, kuryemizin
elinde adresin ve gerekli kapı numarasının
bulunduğunu varsayalım. Bu durumda veri
alışverişinin gerçekleşmemesi
için normalde hiçbir neden yoktur.
Ancak yukarıdaki durumda bir gariplik olduğunu
söylememiz gerekiyor. Bina yönetimi alıcıya
karşı bu kadar teslimiyetçi olursa,
alıcımız kötü niyetli ise binaya zarar
verecek paketleri de içeriye gönül
rahatlığı ile sokabilir; öyle değil
mi?
İşte bu durumu önlemek için,
günümüzde birçok bilgisayarda
alıcı ile kapı arasında güvenlik
görevlileri (güvenlik
duvarı,
firewall) bulunuyor. Alıcı böyle
birşey söylediği zaman bina yönetimi
alıcının kapıyı dinlemesine izin vermek
yerine, "Sizin
yerinize bizim güvenlik
görevlimiz o kapıyı dinleyecek, siz burada oturun
keyfinize bakın, güvenlik
görevlimiz eğer gelen paketin güvenli olduğunu
düşünürse size teslim edecektir"
der
ve ancak
bina sahibi (yani
siz)
genelde dışarıdan gelecek hiç bir pakete
güvenmemesi konusunda tembihlenmiş olan güvenlik
birimine (güvenlik duvarı,
firewall)"Bu kapıdan gelecek paketlerin şu
alıcı tarafından alınmasına izin
veriyorum" dediği sürece (yani
belirtilen port numarasından veri alış
verişine izin verecek bir kural oluşturduğunuz
sürece) o kapıyı
dinleyen güvenlik
görevlisi gelen
paketin güvenli olduğunu düşünür ve
alıcıya ulaştırır. Gerçekte de bu
işlemler böyle gerçekleşir, güvenlik
duvarınız normalde siz özel izin vermediğiniz
sürece dışarıdan gelen hiçbir
isteğe cevap
vermez,çeşitli
programların
dış dünya ile haberleşebilmesi için
sizin özel izin kuralları belirlemeniz gerekir.
Artık veri alış verişimiz güvenli ve
mümkün halde, değil mi? Binaya gelebilmiş
kuryelerin izin verilen paketleri bırakabileceğini
biliyoruz şu an. Peki ya kuryelerimizin ellerinde
doğru adres ve kapı numarası bulunduğu halde
binaya girmesi engellenirse?