Ana sayfa » TCP Protokolüne Giriş ve Güvenilir Veri Transferi Prensipleri
Protokoller

TCP Protokolüne Giriş ve Güvenilir Veri Transferi Prensipleri

TCP Nedir?

TCP uzun yazılışıyla Transmission Control Protocol, taşıma katmanında işletilen bağlantı tabanlı bir protokoldür. Günümüz network uygulamalarının büyük bir bölümü veri iletimi yaparken bünyesinde barındırdığı güçlü özellikler sayesinde TCP protokolünü kullanır. Transport layer’da ihtiyaca göre kullanılabilecek birden fazla protokol vardır. Fakat içlerinde genelde en çok TCP ve UDP protokolleri kullanılır. Mesela internet uygulamarından biri olan Web, taşıma katmanı protokolü olarak TCP kullanır. Aşağıdaki tabloda popüler internet uygulamaları ve bunların kullanmakta olduğu protokoller gözükmektedir. Dikkat edilirse TCP protokolünün kullanımı bir hayli yaygındır.

TCP protokolü kullanım alanları

TCP Protokolünün Sağladığı Özellikler

TCP protokolünün bu kadar çok kullanılmasının nedeni, kuşkuşuz sağlamış olduğu hizmetlerdir. Bu hizmetler içerisinden en temel olanları maddeler halinde aşağıda bildirilmiştir.

  • Güvenilir Veri Transferi (Reliable Data Transfer)
  • Akış Kontrolü(Flow Control)
  • Tıkanıklık Kontrolü(Congestion Control)

Bu 3 maddenin her biri ayrı bir makale konusudur. Bu yazıda sadece güvenilir veri transferi özelliğine değineceğim. Daha sonra diğer konular içinde ayrı içerikler hazırlanacaktır.

Güvenilir Veri Transferi (Reliable Data Transfer)

İletimde güvenilirlik demek, bir client tarafından gönderilmiş olan verinin karşı tarafa yani sunucuya eksiksiz ve sıralı bir şekilde gittiğinden emin olmak demektir. TCP protokolünün Reliable Data Transfer özelliği bu prensibe dayanmaktadır. Verinin eksiksiz ve sıralı bir şekilde hedef cihaza gittiğinden ise bünyesindeki çeşitli algoritmalar vasıtası ile emin olur. Tabi bu algoritmaların gelişmesi hemen bir anda olmuş bir olay değildir. Her bir ihtiyaç yeni bir çözümü doğurmuş ve günümüze kadar bu gelişerek en son halini almıştır. İsterseniz iletimde güvenilirliğin günümüze kadar nasıl geliştiğine bir bakalım.

Güvenilir Veri Transferinin Tarihsel Gelişimi

TCP protokolü en sonki halini alana kadar birçok aşamadan geçmiştir. Aslında bu gelişimi sadece TCP protokolü için sınırlamak doğru değildir. Veri iletiminde güvenilirlik sağlayan her transport layer protokolü için bu tarihsel gelişim geçerlidir. Bu tarihsel gelişimde de geliştirilen mekanızmaların isimleri rdt1.0, rdt2.0 ve rdt3.0 şeklinde aşağıda incelemiştir. İsterseniz lafı daha fazla uzatmadan bu gelişimin nasıl olduğuna bir bakalım.

Rdt1.0

Öncelikle bir client ve bir sunucu arasında veri transferi yapılıyor. Bu veri transferinde veri, application layer’dan socketler vasıtası ile alınıyor ve sunucuya gönderiliyor. Sunucuda bu veriyi network layer’dan alıp, transport layerda ayrıştırıp application layera teslim ediyor. Genel olarak bu bahsettiğim işlemleri yürüten algoritmaya ise rdt1.0 adı veriliyor. Zaman içinde bu mekanizma kullanıldıkça verilerin network’te ilerlerken (router, link, switch…) bozulması ve kaybolması sonucu hedef cihaza başarılı bir şekilde iletilmediği ortaya çıkmış. İşte bu sorunu aşmak için rdt2.0 algoritması geliştirilmiş.

rdt1.0
rdt1.0

 

Rdt2.0

Rdt2.0 mekanizması ile artık güvenilir veri transferinde stop-and-wait prensibine geçmiş bulunuyoruz. Ki zaten rdt2.0 algoritması ve türevleri litaratürde stop-and-wait protocols olarak adlandırılır. Bu mekanizmada client veriyi sunucuya gönderir ve bekleme moduna geçer. Hedef cihaz olan sunucu ise veriyi aldığı vakit tcp headerında bulunan checksum kısmını matematiksel bir işleme sokarak verinin bozulup bozulmadığını kontrol eder. Eğer veri bozuksa cliente verinin bozuk olduğunu bildiren NAK adında bir paket yollar. Eğer bozuk değilse veriyi alır ve application layere teslim eder. Veriyi doğru aldığını da cliente ACK adında bir paket yollayarak bildirir.  Client ise serverdan gelecek olan ACK veya NAK paketlerine göre işlem yapar. ACK geldiğinde bir sonraki paketi yollar, NAK geldiğinde ise göndermiş olduğu paketi tekrar yollar.

rdt2.0
rdt2.0

Rdt2.0 mekanizmasının dezavantajı ise sunucu tarafından gönderilecek olan ACK ve NAK paketlerinin bozulması durumunda ne yapılacağının bilinememesi. İşte bu sorunu çözmek için rdt2.1 ve rdt2.2 mekanizmaları geliştirilmiştir.

Rdt2.1 ve Rdt2.2

Rdt2.0 mekanizmasının eksikleri Rdt2.1 mekanizmasında gönderilen paketlere 0 ve 1 rakamlarından numaralar verilerek(squence numbers) giderilmiştir. Bu mekanizmada client göndereceği ilk veriyi 0 olarak işaretler ve hedef cihaz olan sunucuya yollar. Sunucu ise ilk gelecek paketin 0 olduğunu bildiği için 0 numaralı bir paket bekler. Paket, sunucuya ulaştığı vakit sunucu tarafından değerlendirilir, eğer gelen paket 0 numarasına sahip ve bozulmamış ise cliente bir ACK paketi yollanır. Sunucudan cliente gönderilen bu ACK paketi veya NAK paketi bozulursa, client göndermiş olduğu paketi tekrar yollar. Sunucu ise 2 kere gelen bu paketden en son geleni düşürürerek duplicate-packet sorununu çözmüş olur.

rdt2.1 sender

Rdt2.2 mekanizmasında ise Rdt2.1 mekanizmasından farklı olarak NAK yerine ACK gönderilir ve ACK paketlerine 0 ve 1 şeklinde numaralar verilir. Eğer gönderilen paket bozulursa veya kaybolursa, bu durumda sunucu hatasız bir şekilde en son aldığı paketin numarasından bir ACK paketi yollar. NAK yollamaz. Aşağıda rdt2.2 mekanizmasının nasıl çalıştığı çok güzel bir şekilde görselleştirilmiştir.

güvenilir veri transferi rdt2.2
rdt2.2 çalışma prensibi

 Rdt3.0

Rdt 3.0 mekanizması ise alınıp verilen paketlerin(data veya ACK) kanalda kaybolabilme ihtimaline karşı olarak geliştirilmiş bir mekanizmadır. Bu sorunu ortadan kaldırmak için, gönderilen her bir paket için bir süre belirlenir. Eğer ACK paketi bu belirlenen süre içerisinde gelmemiş ise o paket tekrar gönderilir. Kısaca süreç bu şekilde yürümektedir.

rdt3.0
rdt3.0

Bu tarihsel olarak gelişen rdt1.0, rdt2.0, rdt2.1 ve rdt3.0 mekanizmaları, TCP protokolünün sağlamış olduğu güvenilirlik, akış ve tıkanıklık kontrolü gibi temel ve güçlü özelliklerine temel teşkil etmektedir. Bu mekanizmaların geliştirilmesi ile ortaya TCP protokolü çıkmıştır demek herhalde yanlış olmaz. Rdt protokolleri ile ilgili daha detaylı bilgi almak için bu linki inceleyebilirsiniz. Bir sonraki yazımızda Go back N ve Selective Repeat algoritmalarını işleyeceğiz. Görüşmek üzere.

Yazar Hakkında

Hakan İlbiz

Siber güvenlik, linux, programlama ve network gibi bilgisayar bilimlerini kapsayan alanlarda yaptığı çalışmalardan edindiği tecrübeleri, kurucusu olduğu kodputer.com adlı web sitesinde okurlarına sunan ve bundan büyük bir haz duyan Sakarya Üniversitesi Bilgisayar Mühendisliği öğrencisi.

2 Comments

Yorum Yazmak İçin Tıkla