Ana sayfa » Go-Back N ve Selective Repeat Protokolleri
Protokoller

Go-Back N ve Selective Repeat Protokolleri

network

Go Back N ve Selective Repeat Nedir?

Bu konuya başlamadan önce, temel teşkil etmesi açısından bir önceki yazımız olan Tcp protokolüne giriş ve güvenilir veri transferi prensipleri adlı konuyu okumanızı tavsiye ediyorum. Bu yazının konusu, linkte bahsetmiş olduğum rdt1.0, rdt2.0, rdt2.1, rdt2.2 ve rdt3.0 mekanizmalarının devamı şeklinde düşünülebilir. Go Back N kısaca GBN ve Selective Repeat kısaca SR protokolleri günümüz güvenilir veri iletimi(reliable data transfer) prensiplerinin temelini oluşturmaktadır. Hatta daha sonra da detaylı bir şekilde işleyeceğimiz TCP protokolü, GBN ve SR protokollerinin hibrit bir karışımıdır. Bu konu da bu bahsetmiş olduğum hibrit karışımı anlamak açısından bir hayli önemlidir.

Stop And Wait Terk Ediliyor

Bir önceki yazıda bahsetmiş olduğum stop and wait prensibinin bünyesinde barındırdığı dezavantajlar GBN ve SR protokollerinin ortaya çıkmasına vesile olmuştur. Bu dezavantajlardan en önemlisi zaman sorunudur. Hatırlarsanız en son rdt3.0 mekanizmasında bir paket gönderileceği zaman o paket için bir süre belirleniyor ve o süre zarfında hedef cihazdan ACK mesajı gelmesi bekleniyordu. Eğer belirlenen süre zarfında ACK mesajı gelmezse, gönderici o paketi tekrardan gönderiyordu.

Düşünsenize bir paket için bu işlemin 10’larca kez yapıldığını. İşte bu durumda ortaya fazla zaman aralığında az paket gönderimi yapılması gibi olumsuz bir sorun çıkmaktadır. Bu sorunu aşmak için ilk olarak mühendisler, tek paket gönderip almak yerine birden fazla paketi arka arkaya yollayarak bu sorunu aşma fikrini ortaya atmışlardır. İşte bu fikrin protokol haline gelmesi Go Back N yani GBN protokolünde olmuştur.

Go-Back N Protokolü

Yukarıdaki görselde de görüldüğü üzere birden çok paket yollanıyor ve buna karşılık olarak birden çok ACK paketi alınıyor. İşte bu karmaşayı belirli bir düzene Go Back N protokolü ile sokacağız. İsterseniz bu protokolün nasıl çalıştığına bir göz atalım.

Öncelikle gönderici tarafından paketin parçalara ayrılması(dividing) ve bu paketlerin kaçarlı gruplar halinde(window size) gönderileceği gibi işlemler yapılır. Mesela elimizde 14600 bytelık bir application layer datası var, bunun 1460 bytelık 10 adet paket haline dönüştürülmesi(dividing) işlemi olduğundan ve bu 1460 bytelık 10 paketin 2’şerli veya 5’erli paketler şeklinde(window size) gönderilmesi olayından bahsediyorum. Aşağıdaki görseli inceleyelim.

go back n sender

Gerekli işlemler yapıldıktan sonra, gönderilecek olan ilk pakete sequence number olarak 0 verilir. Daha sonraki paketlerin sequence number değeri bir önceki pakette gönderilen datanın boyutuna göre değişir. Fakat protokolümüzün nasıl çalıştığını anlayabilmek için, sequence numberların 0,1,2,3,4… şeklinde gittiğini varsayıcaz. Yani 0. paket, 1. paket, 2. paket şeklinde aklınızda canlandırabilirsiniz. Tüm bu önbilgilerden sonra, Go Back N protokolünün aksiyonunu hiç bir hata olmadığını varsayarak maddeler halinde inceleyelim.

  • Öncelikle window size kadar paket bir anda(sıra gözeterek) gönderilir. Mesela bu örnekte window size 5 olsun ve paketler 0,1,2,3,4 paket numarası olacak şekilde sırası ile gönderilsin.
  • En baştaki yani 0. paket için bir timer başlatılır ve ACK0 paketi karşı taraftan beklenir. ACK0 paketi başarılı bir şekilde geldikten sonra window size bir yana kaydırılarak([0,4] aralığından [1,5] aralağına) en baştaki yani yeni durumda 1. paket için bir timer başlatılır ve karşı taraftan ACK1 paketi beklenir.
  • Her başarılı bir iletimde sender tarafındaki window boyutu yana kaydırılır.
  • Sender tarafındaki data bitene kadar bu yana kaydırma ve ACK bekleme işlemi istikrarlı bir şekilde devam eder.
  • Gönderilecek data bittiği vakit iletim bitmiş olur.

Bu anlattığım işlemi interaktif bir şekilde öğrenmek için mutlaka bu linki inceleyin. Bu bahsettiğim linkte ne demek istediğimi anlıyacaksınız.

go back n action
3’lü window size olacak şekilde gönderilen paketler(GBN)

Peki Go Back N protokolümüzde bir hata varsa ne olacak? Şimdi de olası hata durumlarında yapılacak işlemleri maddeler halinde inceleyelim.

  • Elimizde 10 adet paket olduğunu ve bunların 5’erli gruplar halinde gönderildiğini varsayalım. Bunlardan ilk 5’i gönderilsin ve 3. paket karşı tarafa ulaşamadan bozulmuş veya kaybolmuş olsun.
  • Bu durumda receiver(paketleri alan taraf) ilk 2 paketi başarılı bir şekilde alacak ve sırası ile ACK0 ve ACK1 paketleri yollayacaktır.
  • 3. Paketi bekleyen receiver yani alıcı, 3. paket bozulduğu için bir paket almayacaktır. Buna ek olarak 4. ve 5. paketlere bir şey olmadığı için onlar doğal olarak alıcıya ulaşacaktır. Fakat alıcı, 3. paketi beklediği için 4. ve 5. paketleri düşürecek ve karşı tarafa 4 adet ACK1 paketi yollayacaktır.
  • Bunu yapma amacı, göndericiyi en son 1 numaralı paketini başarı ile aldım şeklinde bilgilendirmektir.
  • ACK2 paketini bekleyen gönderici, paket karşı tarafa ulaşmadığı için doğal olarak ACK paketini alamayacak ve timer sona erdiğinde 3. paket(sequence_number=2) ile birlikte 4. 5. 6. ve 7. paketleri de tekrardan yollayacaktır.
  • Yani timer sona erdiğinde en son aldığı doğru paketten, window size numarası kadar paketi bir anda tekrardan gönderecektir.
  • Burada 4. ve 5. paketler tamamda 6. ve 7. paketler ne alaka? diyebilirsiniz. 6. ve 7. paket 1. ve 2. paketin başarılı bir şekilde iletiminden sonra window size’ın 2 kere sağa kaymasından kaynaklanmaktadır.
  • Eğer yine bir hata olursa, işlem yukarıdaki şekilde yürütülecektir.

Biliyorum ilk başta anlaşılması zor gelebilir. İnanın anlatması da anlaması kadar zor bir durum. Fakat yukarıda vermiş olduğum linki incelemeniz bu anlatıklarımı anlamanızda bir hayli faydalı olacaktır. Aşağıdaki görseli inceleyelim ve yukarıdaki maddeleri tekrar okuyalım.

go back n
Go-back-n hata yakalama mekanizması

Peki, hata alıcı tarafından gönderilen ACK paketinde olursa ne olacak? Bu durumu yukarıdaki örnek üzerinden anlatacak olursak; varsayalım ki bu sefer 3. paket başarılı bir şekilde karşı tarafa ulaştı, fakat 3. pakete ait olan ACK2 paketi networkte kayboldu ve göndericiye ulaşmadı. Bu durum kafanızın bir köşesinde dursun. Şimdi alıcıya 4. ve 5. paketlerin başarılı bir şekilde ulaştığı düşünülsün. Bu durumda alıcı göndericiye ACK3 ve ACK4 paketleri yollayacaktır. Gönderen taraf ACK3 paketini başarılı bir şekilde aldığı vakit ACK2 paketini beklemeyi keser. Çünkü karşı taraf 3. paketi almamış olsaydı, asla ama asla 4. pakete karşılık olarak ACK3 paketini yollamazdı. Bir önceki örnekti gibi ACK1 paketini yollardı. İşte bu mantıktan yola çıkarak ACK3 paketini alan gönderici taraf, gönderdiği 4 paketinde başarılı bir şekilde hedefine ulaştığını düşünür ve paketlerini göndermeye devam eder.

Go Back N Protokolünün Dezavantajları

  • Hata meydana geldiğinde başarılı bir şekilde iletilmiş olan paketlerin tekrardan gönderilmesi(yukarıdaki örnekte 4. 5. 6. ve 7. paketler bu duruma örnek olarak verilebilir) durumunun networkü yorması.
  • Paketlerin tekrardan yollanılması aynı zamanda zaman kaybı da ortaya çıkarmaktadır.

İşte bu sorunları aşmak için Selective Repeat Protokolü ortaya çıkmıştır.

Selective Repeat Protokolü

Selective Repeat protokolünü, GBN protokolü kadar detaylı anlatmayacağım. Çünkü temelde Selective Repeat protokolünün çoğu özelliği GBN protokolü ile ortaktır, fakat bazı değişimler yaşamıştır. Bu değişimlerden bahsetmenin konunun anlaşılması açısından yeterli olduğunu düşünüyorum.

Öncelikle Selective Repeat protokolünde GBN protokolünden farklı olarak receiver yani alıcı tarafta da bir window size bulunur. Temelde GBN’den farklı olan kısım, hata meydana geldiğinde yapılacak olan işlemlerdir. GBN protokolünün en büyük dezavantajı olan, bir paket hatalı geldikten sonra ondan sonraki başarılı bir şekilde gelen tüm paketleri düşürme işlemi, Selective Repeat protokolünde çözülmüştür. Bunu ise Buffer işlemi yaparak sağlamaktadır. İsterseniz bu özelliği ve Selective Repeat protokolünün nasıl çalıştığını maddeler halinde inceleyelim.

  • Elimizde 10 adet paket olduğunu ve bunların 5’erli gruplar halinde gönderildiğini varsayalım. Bunlardan ilk 5’i gönderilsin ve 3. paket karşı tarafa ulaşamadan bozulmuş veya kaybolmuş olsun.
  • İlk 2 paket başarılı bir şekilde ulaştıktan sonra, sırası ile ACK0 ve ACK1 paketleri gönderilir. Bunlara ek olarak GBN protokolünden ayrı olarak alıcı tarafındaki window kısmıda 2 kere sağa kayar.
  • 3. Paket gelmeyecek fakat 4. ve 5. paketler başarılı bir şekilde alıcı tarafına ulaşacaktır. GBN protokolünden farklı olarak 4. ve 5. paketler düşürülmeyecek, aksine alıcı tarafındaki buffer da 3. paket ulaşana kadar bekletilecektir. İşte Selective Repeat ile GBN protokolü arasındaki en temel fark budur.
  • Ayrıca başarılı bir şekilde ulaşan her bir paket için ACK paketi yollanacaktır. Mesela bu örnekte ACK3 ve ACK4 paketleri 4. ve 5. paketler için göndericiye yollanacaktır.
  • Gönderilecek data bitene kadar yukarıdaki işlemler devam ettirilir.

Eğer paket alıcıya başarılı bir şekilde ulaşır fakat o ulaşan pakete karşılık olarak gönderilen ACK paketi göndericiye ulaşmazsa, bu durumda gönderici tarafında timer zaman aşımına uğrayacak ve paketi tekrar gönderecektir.

selective repeat action

Evet, konumuzu burada bitiriyoruz. Anlaşılması ilk etapta zor bir konu olduğunu biliyorum, fakat go back n ve selective repeat protokollerini yazı içinde vermiş olduğum linkten interaktif bir şekilde inceleyerek ve bu yazıyı tekrar tekrar okuyarak, kolay bir şekilde anlayabilirsiniz. TCP protokolünün reliable data transfer servisini anlayabilmek için GBN vs SR protokollerini özümsemek gerekmektedir. Bu sebepten dolayı bu konu üzerinde durmanız faydalı olacaktır. Bir sonraki yazımızda 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