Internet Soketlerinin İki türü
Önceki Soket Nedir? Sonraki
Internet Soketlerinin İki türü
Bu da ne? İki tür Internet soketi mi var? Evet. Şey, aslında hayır. Yalan söyledim. Daha çok var ama sizi korkutmak istemedim. Size sadece iki tür soketten bahsedeceğim. Sadece "Ham Soketler"in (Raw Sockets) çok güçlü olduğunu belirttiğim bu cümle dışında yani, bir ara bunlara da göz atarsanız iyi olur.
Pekala, gelelim şu iki tür sokete. Bir tanesi "Veri Akış Soketleri"; diğeri ise "Veri Paketi Soketleri" ve artık biz bunlara sırası ile "SOCK_STREAM" ve "SOCK_DGRAM" diyeceğiz. Veri paketi soketleri bazen "bağlantısız soketler" olarak da isimlendirilir. (Her ne kadar eğer isterseniz bunlara connect() işlevi ile bağlanabilecek olsanız da. Detaylı bilgi için aşağıdaki connect() maddesine bakın.)
Veri akış soketleri güvenilir iki yönlü iletişim kanallarıdır. Eğer bu tür bir sokete sıra ile "1, 2" bilgilerini gönderirseniz, bunlar kanalın diğer ucundan "1, 2" şeklinde çıkar. Aynı zamanda bu iletişim olası hatalara karşı da korumalıdır. Karşılaşacağınız her türlü hatanın kaynağı sizin karman çorman aklınız olacaktır ve burada bunları tartışmaya niyetim yok.
Stream soketleri gerçek hayatta ne işimize yarar? Hmm, sanırım telnet diye bir program duymuşsunuzdur, değil mi? İşte bu program veri akış soketlerini kullanır. Yazdığınız tüm karakterler sizin yazdığınız sırada iletilmelidir öyle değil mi? Aynı zamanda web tarayıcılar da HTTP protokolü ile iletişim kurarken veri akış soketleri aracılığı ile sayfa bilgilerini çekerler. Gerçekten de eğer bir web sitesine telnet ile 80 numaralı port üzerinden bağlanır ve "GET /" komutunu yollarsanız web sitesi size HTML içeriğini yollayacaktır.
Veri akış soketleri bu kadar sorunsuz bir veri iletişimini nasıl gerçekleştirir? Bunun için "Aktarım Denetim Protokolü" (Transmission Control Protocol) isimli kurallar dizisinden yararlanırlar ki siz bunu "TCP" olarak da duymuş olabilirsiniz (bkz. RFC-793 bu belge TCP ile ilgili çok ayrıntılı bilgi içerir.) TCP yollanan verinin sıralı ve düzgün gitmesini sağlar. "TCP"yi daha önce "TCP/IP" kısaltmasının bir parçası olarak duymuş olabilirsiniz ki "IP" de "Internet Protocol" sözünün kısaltmasıdır (bkz. RFC-791.) IP kurallar dizisi temelde Internet yönlendirme ile ilgilidir, veri bütünlüğünün korunması ile ilgili pek kural içermez.
Harika. Peki veri paketi soketleri? Neden bunlara bağlantısız deniyor? Mesele nedir kısaca? Neden bunların "güvenilmez" olduğu söyleniyor? Bakın, bilmeniz gereken bazı gerçekler var: eğer bir veri paketi yollarsanız bu hedefine ulaşabilir de ulaşmayabilir de. Gönderdiğiniz sırada ulaşması garanti edilemez. Ancak eğer hedefe ulaşırsa paketin içerdiği bilgi hatasız olacaktır.
Veri paketi soketleri de yönlendirme için IP protokolünü kullanırlar ancak TCP'den faydalanmazlar onun yerine "Kullanıcı Veri Paketi Protokokü" (User Datagram Protocol) veya "UDP" isimli protokolü kullanırlar (bkz. RFC-768.)
Neden bağlantısızdırlar? Aslında böyledirler çünkü veri akış soketlerinde olduğu gibi bağlantıyı sürekli açık tutmanız gerekmemektedir. Sadece bir paketi oluşturur, tepesine gideceği adresi söyleyen bir IP başlığı yapıştırır ve onu yollarsınız. Herhangi bir bağlantı açmaya gerek yoktur. Bu tip soketler genellikle paket paket iletilen veri için kullanılır. Bu tip soketleri kullanan örnek uygulamalardan bazıları: tftp, bootp, vs.
"Yeter artık!" diye bağırdığınızı duyar gibiyim. "Eğer veri paketlerinin yolda kaybolma ihtimali varsa nasıl olur da yukarıda saydığın programlar çalışır?!" Bak dünyalı dostum bu saydığım programların hepsi UDP protokolü üzerine kendi protokollerini yerleştirirler. Mesela, tftp protokolüne göre gönderilen her paket için karşı tarafın "aldım!" (bir "ACK" paketi) paketini geri yollaması gerekir. Eğer orjinal paketin göndericisi mesela 5 saniye içinde cevap alamazsa o zaman paketi yeniden yollar, taa ki ACK cevabını alana kadar. İşte bu "aldım" prosedürü SOCK_DGRAM uygulamalarında çok önemlidir.
Önceki Üst Ana Başlık Sonraki
Soket Nedir? Başlangıç Düşük Seviye Duyarsızlığı ve Ağ Teorisi
Bir Linux Kitaplığı Sayfası