TCP, veri stream'lerini birbirinden ayırt etmek için port tanımlayıcı kullanır. Her TCP birbirinden
bağımsız port tanımlayıcı sunar. Bu nedenle port tanımlayıcılar tek olmayabilir. Bu nedenle soket
oluşturulurken internet adresi de kullanılır.
Bir bağlantı tamamen uçlardaki soketler arasında oluşur. Yerel bir soket pek çok dış soket ile
bağlantı yapabilir. Bağlantı iki yönlü veri taşımada (full duplex) kullanılabilir.
TCP segmentleri internet datagramları olarak gönderilir. Çünkü altında IP protokolü vardır. TCP
segmentleri, IP tarafından paketlenip gönderilir. TCP başlığı aşağıdaki gibidir:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
User Datagram Protocol (UDP): RFC 768'de tanımlanmıştır. Bu protokol uygulamalar için en az
protokol yükü ile haberleşme olanağı sağlar. Protokol işlemi gerçekleştirmeye yöneliktir. Dağıtım
ve güvenliği temin etmez. Checksum değeri tutar ancak paket bozulmuşsa yeniden paketi dağıtmaz.
Başlık yapısı şu şekildedir:
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| Source | Destination |
| Port | Port |
+--------+--------+--------+--------+
| | |
| Length | Checksum |
+--------+--------+--------+--------+
|
| data octets ...
+---------------- ...
DNS ve tftp bu protokolü kullanan en popüler uygulamalardır.
Bu iki türün özellikleri ve aralarındaki temel farkları şöyle sıralayabiliriz:
1. Stream soketler verileri sıralı gönderir, datagram soketleri sıralı göndermeyebilir. (TCP
protokolu, paketleri sıralı göndermeyi garanti eder. UDP garanti etmez. TCP paketlerin başlık
bilgisinde sıra numarası vardır, UDP'de yoktur. TCP, her zaman sıradaki paketi ister. Örneğin 4
numaralı paket yerine 5 numaralı paket eline ulaşırsa karşı tarafa bunu bildirir ve 4'ü ister. 4'ü alınca
da 5'ten önceye koyar.)
2. Stream soketler güvenlidir, Datagram soketler güvensizdir. (TCP protokolu güvenliği garanti
eder, UDP garanti etmez. Çünkü TCP acknowledgement ile denetim yapar. Yani bir paketi
gönderdiği zaman, karşı taraf paketi aldığını haber vermeden o paketi göndermiş saymaz kendini ve
tekrar gönderir. ayrıca paketin doğru gidip gitmediğini anlamak için başlık bilgisinde checksum
-kontrol bilgisi- tutar. UDP'de checksum tutar ancak checksum yanlışsa aynı paketi tekrar istemez.)
3. Stream soketler, işlem bitene kadar kesintisiz bir bağlantı kurar. Datagram soketler ise bağlantı
kurmaz. Sadece veri göndereceği zaman bağlantı kurar ve işi bitince bağlantıyı koparır.
Bu iki arasındaki farkı anlatmak için postacı ve telefon benzetmesini vereceğim. Mektup insanlar
arasında haberleşmeyi sağlayan bir yöntemdir. Postacı mektupları posta kutusuna bırakıp gider. Kişi
ise mektupları müsait olduğu herhangi bir an (belki 1 saat sonra, belki 1 gün, belki 1 hafta) alır ve
okur. Cevabını yine posta kutusuna atar ve postacı bir süre sonra mektupları alıp karşıya taşır.
Telefon örneğinde ise, bir taraf diğer tarafa telefon açar. Aradaki bağlantı kurulduktan sonra
insanlar bağlantı kopmadan karşılıklı konuşurlar. Posta örneğinde bağlantının sürekliliği gibi bir şey
söz konusu değildi. Telefon görüşmesinde sözlerin sıralı gitmesi söz konusu. Yani sözler birbirine
karışmaz. Ancak postada ise durum farklı. Mektuplar karşı tarafta sıralı okunmayabilir. Örneğin
posta kutusunda 5 mektup birikince mektuplarını okur. Telefonda ise karşılıklı sürekli konuşulur ve
söylenen karşıya iletilir.
UDP'nin bu kadar tez avantajına rağmen neden daha çok kullanıldığı bu şemalardan açıkça
görülmektedir. TCP bir veri karşıya 6x32+Veri boyu kadar bir paket olarak gitmektedir. Yani her
paket fazladan 192 bit başlık (header) bilgisi taşımaktadır. Oysa UDP paketleri 64 bitlik başlık
(header) bilgisine sahiptir.
UDP kullanmanın en önemli nedeni az protokol yüküdür. Video sunucu gibi realtime veri akışı
gerektiren bir uygulama için TCP fazla yük getirir ve görüntü realtime oynamaz. Bu nedenle
multicast uygulamalarında Datagram soketler kullanılır. Ayrıca video ve ses görüntülerinde genelde
az bir veri kaybı sesi veya görüntüyü bozmaz. Bu nedenle sıkı paket kontrolune gerek yoktur. Eğer
iyi bir fiziksel bağlantınız varsa hata oranı düşük olacaktır ve bu nedenle TCP'nin yaptığı hatalı
paket kontrol işlemleri fazladan yük olacaktir.
UDP her ne kadar kendisi paket güvenliğini denetlemese de bunu yazılımcı yapabilir. Örneğin TCP
bir paketi gönderdiğinde karşı tarafın onu aldığını anlamak için acknowledgement bekler. UDP
bunu yapmaz. Fakat bunu soket yazılımcısı yapabilir. Yazılımcı, gönderilen her pakete bir cevap
bekleyerek bunu sağlar.
2.4. Uygulama Katmanı
TCP/IP protokolünün en üstünde yer alır. Taşıma katmanının sağladığı UDP ve TCP protokollerini
kullanarak veri aktarımı yapabilirler. Telnet, FTP, SMTP, HTTP uygulama katmanı protokolleridir.
3. Uygulamadaki Temel Prensipler
Soketler her zaman iki uca sahiptir: Alıcı ve gönderici. Bütün mesajlar ve protokol gereği olan
başlıklar nihayetinde fiziksel katmandan, mantıksal 1 ve 0'a karşılık gelen elektriksel sinyaller
olarak gönderilir.
Soket program ya istemci, yada sunucudur. Programları daha karışık olmakla beraber bazı soket
programlar her iki görevi de yapmaktadır. Sunucu program ile istemci program arasında çalışma
olarak bazı farklar vardır. Aşağıdaki tablo her iki tarafta olayların nasıl gittiğini göstermektedir: