magmalinux-tcp-ip

3  TCP/IP

Iptables'ı hakkını vererek kullanabilmek için, IP, TCP, UDP gibi belli başlı protokolleri bilmeniz gerekiyor. Bu bölümde TCP/IP katmanlarını tanıyıp, bu katmanlar üzerinde çalışan IP, TCP… gibi protokolleri inceleyeceğiz.

Hikayemize ilk olarak TCP/IP katmanlarını inceleyelerek başlayalım:
 

1. Uygulama (Application) Katmanı: Başka bir bilgisayara gönderilmek istenen verinin oluşturulduğu (ya da bulunduğu) katmandır. Uygulama (Örneğin Firefox) gönderilecek veriyi oluşturur ve bir alttaki transport katmanına verir.

2. Transport Katmanı: Gönderilecek verinin karşı tarafta kime teslim edileceği bilgisi bu katmanda eklenir. Örneğin  Firefox'un gönderdiği verinin karşı taraftaki HTTP sunucusuna gönderileceği bilgisi (hedef port 80) bu katmanda eklenir.

3. Internet Katmanı: Gönderilecek verinin nereye gönderileceği bilgisi (karşı tarafın IP adresi) bu katmanda eklenir.

4. Link Katmanı


Bilgisayarımızdaki bir uygulama (örneğin Firefox) tarafından gönderilen paket, bu katmanlardan yukarıdan aşağıya doğru geçer. Her katmanda göndermek istediğimiz veriye o katmanda çalışan protokolün başlık (header) bilgisi eklenir. Örneğin uygulama katmanında oluşturduğumuz gerçek verimize, Firefox, HTTP protokolü başlığı; işletim sistemi, Transport katmanında TCP protokolü başlığı, Internet katmanında IP başlığı ekler.

Paket hedefe vardığında bu sefer aşağıdan yukarıya doğru bu katmanlardan geçer. Önce Internet katmanında, paketin IP protokolü başlığı paketten çıkarılır. Transport katmanında TCP protokolü başlığı paketten çıkarılır. En son paket HTTP başlığıyla birlikte Firefox'a (yani uygulama katmanına) ulaşır.

3.1 IP

IP (Internet Protocol) protokolü, Internet katmanında bulunur. IP protokolü başlığı, bir paketin gönderici adresi, alıcı adresi gibi bilgileri taşır.

Gönderici ve alıcı adresi, IP adresi olarak bildiğimiz 32 bitlik bir sayıdır. İnsanların rahat okuyabilmesi açısından, noktalarla ayrılmış, 4 tane, 8 bitlik sayı halinde (127.0.0.1 gibi) gösterilir. Internete bağlı her bilgisayarın bir IP adresi vardır. IP adresini, ev adresiniz gibi düşünebilirsiniz. Diğer bilgisayarlar sizin bilgisayarınızla iletişim kurarken sizin IP adresinizi kullanır.

 

3.2 TCP

TCP (Transmission Control Protocol) protokolü, Transport katmanında bulunur. TCP protokolünde bağlantı durumludur (stateful). Yani belirli bir iletişim kuralı ile bağlantı açılır, belli bir süre devam eder ve iletişim sonlandığında bağlantı kapatılır.

TCP'de paketi gönderen, karşı tarafın paketi alıp almadığını bilir, paketin karşı tarafa ulaşamadığı durumda paketi tekrar gönderir. TCP protokolü, internet katmanından uygulama katmanına taşınan paketlerin doğru uygulamaya, doğru sıralama da taşınmasını kontrol eder.


TCP iletişimi sırasında, Transport katmanında pakete TCP başlığı eklenir. Bir TCP başlığı kabaca,

1. Kaynak Port
2. Hedef Port
3. Sıra numarası (Sequence Number)
4. Kabul numarası (Acknowledgement Number)
3. ve SYN, ACK, URG, RST, FIN gibi bayraklardan

oluşur.

 

TCP protokolünde bağlantı açılırken aşağıdaki adımlar gerçekleşir:

1. Bağlantı açmak isteyen bilgisayar, uzaktaki bilgisayara, TCP başlığındaki SYN bayrağı ayarlanmış bir paket gönderir (Yazının devamında SYN paketi olarak adlandıracağız).

2. Uzaktaki bilgisayar, cevap olarak, TCP başlığındaki SYN ve ACK bayrakları ayarlanmış bir paket (SYN/ACK paketi) gönderir.

3. Bağlantı açan taraf ACK paketi gönderir ve TCP bağlantısı başlamış olur.

Bağlantı kapatılırken:

1. Bağlantıyı kapatmak isteyen bilgisayar (A diyelim), FIN paketi gönderir.
2. Uzaktaki bilgisayar (B diyelim), cevap olarak FIN/ACK paketi gönderir. Bu aşamadan sonra A artık veri gönderemez, fakat B veri göndermeye devam edebilir.
3. B, FIN paketi gönderir.
4. A, FIN/ACK paketi gönderir ve bağlantı tamamen kapatılmış olur.

 

3.3 UDP

UDP (User Datagram Protocol), oldukça basit bir protokoldür. Transport katmanında bulunur. Basit veri transferleri için tasarlanmış olup, TCP gibi paketin karşı tarafa ulaşıp ulaşmadığını kontrol etmez. UDP'de bağlantı durumsuzdur. Bir UDP paketi ile bir diğer UDP paketi arasında, UDP protokolü açısından hiç bir bağ yoktur.

TCP'nin özelliklerinin gerekmediği basit soru – cevap şeklindeki iletişimde kullanışlıdır. Örneğin DNS sorguları, UDP protokolünü kullanır.

Bir UDP başlığı kabaca, kaynak port ve hedef port numarasından oluşur.

 

3.4 ICMP

ICMP (Internet Control Message Protocol) protokolü ağ ile ilgili hataların bildirilmesinde kullanılır. IP protokolünün hataları ele alma durumu olmadığından, bu durum ICMP protokolü ile kapatılır.

ICMP protokolü, Internet katmanında bulunur. ICMP başlığı, IP başlığına sadece bir iki ek kısmı vardır. ICMP başlığında, IP başlığında olan bilgilerin yanında, bir tip ve bir kod bilgisi vardır. Tip bilgisi hatanın ya da cevabın tipini belirtir (Hedef ulaşılamaz (destination unreachable), echo gibi). Kod bilgisi ise bazı tip hatalarla ilgili ekstra bilgi sunar. Örneğin tip bilgisi "hedef ulaşılamaz" ise, kod bilgisi "konak ulaşılamaz", "port ulaşılamaz" gibi hatayla ilgili daha ayrıntılı bilgi verir.

ICMP protokolü, birçok sistemde bulunan ping aracı tarafından da kullanılır. ping aracının gönderdiği paketler ICMP paketleridir.