SEN2008 · 3. hafta · Data Link Layer Concepts (I) : error detection and correction, elementary protocols, sliding window protocols

Elementary ve sliding window protokolleri: stop-and-wait, Go-Back-N, Selective Repeat

Hatalı bir kanalda güvenilir iletim: ACK, timeout, sıra numarası, stop-and-wait'in neden yavaş olduğu, Go-Back-N ve Selective Repeat'in pencere kuralları ve verimlilik formülü.

ARQ (automatic repeat request)stop-and-waitalternating bit protocolACK / NAKtimeoutsequence numbersliding windowGo-Back-NSelective Repeatcumulative ACKpipeliningutilizationwindow sizepiggybacking

Önceki sayfada link katmanının hatayı nasıl fark ettiğini gördün. Fark etmek yetmez: bozuk çerçeve atılır, ve verinin yine de karşıya ulaşması gerekir. Bunun yolu ARQ (automatic repeat request): alıcı onay (ACK) yollar, gönderici onay gelmezse yeniden gönderir. Aynı fikirler 7. haftada TCP’de tekrar karşına çıkacak, o yüzden burada sağlam öğren.

Sınav soruları üç kalıptadır: verimlilik hesabı (utilization), “hangi çerçeveler yeniden gönderilir?” izi ve sıra numarası bit sayısı. Altın kurallar:

  1. U=N⋅(L/R)/(RTT+L/R)U = N \cdot (L/R) / (RTT + L/R), 1’i geçemez. Stop-and-wait’te N=1N = 1.
  2. GBN alıcısı sıra dışını atar, SR alıcısı tamponlar.
  3. GBN’de pencere ≤2k−1\le 2^k - 1, SR’de ≤2k−1\le 2^{k-1}.
  4. RTT iki yönlüdür. Tek yön propagation verildiyse ikiyle çarp.

Elementary protokoller: adım adım

Ders kitapları güvenilir iletimi basitten karmaşığa giden bir protokol dizisiyle kurar. Her biri bir öncekinin varsaydığı bir kolaylığı kaldırır.

ProtokolVarsayımEklenen mekanizma
Utopia (simplex, kusursuz)Kanal hatasız, alıcı sonsuz hızlıHiçbiri, sadece gönder
Stop-and-wait, hatasız kanalAlıcı yavaş olabilirAlıcı “hazırım” der (akış kontrolü)
Stop-and-wait, gürültülü kanal (PAR)Çerçeve kaybolabilir/bozulabilirACK + timeout + yeniden gönderme
+ sıra numarası (alternating bit)ACK de kaybolabilir1 bitlik sıra numarası, tekrarı tanıma

Neden sıra numarası? Senaryo: gönderici 0 numaralı çerçeveyi yollar, alıcı alır ve ACK yollar, ACK kaybolur. Gönderici timeout’ta 0’ı tekrar yollar. Sıra numarası olmasa alıcı bunu yeni veri sanar ve üst katmana iki kez teslim eder. Bir bit yeter: alıcı “şimdi 1 bekliyordum, bu 0 tekrar” der, atar ama yine ACK yollar.

TUZAK · tekrar gelen çerçeveye de ACK yolla. Alıcı tekrar çerçeveyi atar ama ACK’i yine yollamalı. Yollamazsa gönderici sonsuza kadar aynı çerçeveyi yeniden gönderir, çünkü ilk ACK zaten kaybolmuştu.

Stop-and-wait neden yavaş?

Gönderici bir çerçeve yollar, ACK gelene kadar bekler. Çerçevenin ilk biti t=0t = 0‘da çıkar, son biti L/RL/R‘de, ACK RTT+L/RRTT + L/R anında döner. Göndericinin gerçekten bit bastığı oran:

Usender=L/RRTT+L/RU_{sender} = \frac{L/R}{RTT + L/R}

Çözümlü örnek

R=100R = 100 Mbps, L=10,000L = 10{,}000 bit, RTT=20RTT = 20 ms.

L/R = 10,000 / 10^8        = 0.1 ms
U   = 0.1 / (20 + 0.1)     = 0.004975   (yaklaşık %0.5)
throughput = U x R         = 497.5 kbps

100 Mbps’lik linkten yarım megabit bile geçmiyor. Sorun link değil, protokol.

aa parametresi

Bazı kitaplar a=dprop/dtransa = d_{prop}/d_{trans} tanımlar. ACK boyutu ve işlem süresi ihmal edilirse RTT=2dpropRTT = 2 d_{prop}:

USW=11+2aU_{SW} = \frac{1}{1 + 2a}

Örnekte dprop=10d_{prop} = 10 ms, dtrans=0.1d_{trans} = 0.1 ms, a=100a = 100, U=1/201U = 1/201. Aynı sayı.

Pipelining ve kayan pencere (sliding window)

Çözüm: ACK beklemeden birden fazla çerçeve gönder. Gönderici en fazla NN tane onaylanmamış çerçeveyi “yolda” tutabilir. Bu NN, pencere boyutu (window size). Bir ACK gelince pencere ileri kayar.

U=min⁡(1, N⋅L/RRTT+L/R)U = \min\left(1,\ \frac{N \cdot L/R}{RTT + L/R}\right)

Aynı örnekte N=50N = 50: U=50×0.1/20.1=0.2488U = 50 \times 0.1 / 20.1 = 0.2488. Tam verim için:

N≥RTT+L/RL/R=20.10.1=201N \ge \frac{RTT + L/R}{L/R} = \frac{20.1}{0.1} = 201

Bu, 1. haftadaki bandwidth-delay product fikrinin çerçeve cinsinden halidir: boru dolu olmalı.

Göndericinin sıra numarası uzayı şöyle görünür:

 [ onaylandı ][ gönderildi, ACK bekliyor ][ gönderilebilir ][ henüz kullanılamaz ]
               ^ base                      ^ nextseqnum
               |<-------------- pencere N -------------->|

Pipelining iki farklı şekilde hatadan kurtulur: Go-Back-N ve Selective Repeat.

Go-Back-N (GBN)

  • Alıcı penceresi 1. Alıcı sadece beklediği sıradaki çerçeveyi kabul eder. Sıra dışı gelen her şeyi atar.
  • Kümülatif ACK (cumulative ACK). “ACK n” demek n’e kadar (n dahil) her şey alındı demek. Sıra dışı bir çerçeve gelince alıcı en son sıralı aldığı çerçevenin ACK’ini tekrar yollar.
  • Tek timer, en eski onaylanmamış çerçeve için. Timeout’ta gönderici o çerçeveden başlayarak penceredeki hepsini yeniden gönderir. Adı buradan: N geri git.

İz: pencere 6, çerçeve 2 kayıp

Gönderici: 0  1  2  3  4  5
Kanal    : ok ok X  ok ok ok
Alıcı    : al al -  at at at        (beklenen hep 2)
ACK      : 0  1     1  1  1          (tekrar eden ACK1)
Timeout(2): yeniden gönder 2 3 4 5   -> 4 çerçeve

Artısı: alıcı basit, tampon yok. Eksisi: tek kayıp, arkasındaki doğru gelmiş çerçeveleri de çöpe atar. Hata oranı yüksek, pencere büyük linkte çok israf eder.

Selective Repeat (SR)

  • Alıcı da pencere tutar ve sıra dışı ama pencere içindeki çerçeveleri tamponlar.
  • Her çerçeve ayrı ayrı ACK’lenir (kümülatif değil).
  • Her çerçevenin kendi timer’ı var. Sadece süresi dolan çerçeve yeniden gönderilir.
  • Eksik çerçeve gelince alıcı tampondaki sıralı bloğu üst katmana birlikte verir.

Aynı iz, SR ile

Gönderici: 0  1  2  3  4  5
Kanal    : ok ok X  ok ok ok
Alıcı    : al al -  tampon tampon tampon
ACK      : 0  1     3  4  5
Timeout(2): sadece 2  -> 1 çerçeve
2 gelince: 2,3,4,5 sırayla teslim

Sıra numarası kaç bit olmalı?

Sıra numarası kk bitse değerler 0,1,…,2k−10, 1, \ldots, 2^k - 1 arasında döner.

ProtokolMaksimum pencerek=3k = 3k=5k = 5
Go-Back-N2k−12^k - 1731
Selective Repeat2k−12^{k-1}416

GBN neden 2k2^k değil? Pencere 2k2^k olsaydı, gönderici 0..7’yi yollar, ACK’lerin hepsi kaybolur ya da hepsi gelir; iki durumda da alıcının bir sonraki beklediği 0’dır. Gönderici gelen “ACK 7”nin yeni pencere mi yoksa eski mi olduğunu ayırt edemez.

SR neden yarısı? Alıcının penceresi de ileri kayıyor. Gönderici ve alıcı pencereleri sıra uzayında çakışmamalı.

k = 2 (0..3), W = 3:
alıcı 0,1,2'yi aldı, ACK'ler kayboldu
alıcı penceresi şimdi {3, 0, 1}
gönderici eski 0'ı tekrar yollar -> alıcı YENİ 0 sanar, hatalı teslim

k = 2, W = 2:
alıcı penceresi {2, 3}, eski 0 dışarıda -> doğru şekilde atılır (ve ACK'lenir)

Çözümlü örnek: uydu linki

R=1R = 1 Mbps, L=1000L = 1000 bit, tek yön propagation 270 ms.

L/R = 1 ms,  RTT = 540 ms
SW               : U = 1 / 541         = 0.00185
GBN, k=3 (N=7)   : U = 7 / 541         = 0.0129
Tam verim için   : N = 541
GBN bit sayısı   : 2^10 - 1 = 1023 >= 541  -> k = 10
SR  bit sayısı   : 2^10 = 1024 >= 541      -> k = 11

Hata olasılığıyla stop-and-wait

Her çerçeve bağımsız olarak pp olasılıkla bozuluyorsa bir çerçeve başına beklenen iletim sayısı:

E[iletim]=11−pE[\text{iletim}] = \frac{1}{1-p}

p=0.2p = 0.2 için 1.25. Verim aynı oranda düşer. Gürültülü linkte GBN tek hatada birçok çerçeve tekrar ettiği için SR’nin avantajı büyür.

İPUCU · piggybacking. İki yönlü veri akışında alıcı ayrı bir ACK çerçevesi yollamak yerine ACK’i ters yöndeki kendi veri çerçevesinin başlığına koyar. Bant genişliği tasarrufu sağlar. TCP de böyle çalışır.

Güvenlik notu

Bu protokollerin hiçbiri karşı tarafın kim olduğunu doğrulamaz. Sıra numarası tahmin edilebilir olursa araya giren biri sahte bir çerçeveyi doğru sıra numarasıyla sokabilir. TCP’nin başlangıç sıra numarasını rastgele seçmesinin (7. hafta) bir sebebi budur.

Sık yapılan hatalar

Yanlış düşünceDoğrusu
U=(L/R)/RTTU = (L/R)/RTTPayda RTT+L/RRTT + L/R.
RTT = tek yön propagationRTT=2dpropRTT = 2 d_{prop} (ek gecikme yoksa).
UU pencereyle sınırsız büyürmin⁡(1,…)\min(1, \ldots); boru dolunca artmaz.
GBN alıcısı sıra dışını tamponlarAtar. Tamponlayan SR.
GBN timeout’ta sadece kaybolanı gönderirKaybolandan itibaren penceredeki hepsini.
SR’de kümülatif ACKHer çerçeveye ayrı ACK.
GBN pencere 2k2^k2k−12^k - 1. SR’de 2k−12^{k-1}.
Tekrar gelen çerçeveye ACK gerekmezGerekir, yoksa gönderici kilitlenir.

Kendini test et

Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.

Soru 1kolay

In the stop-and-wait protocol, why does each frame need a sequence number (even a 1-bit one)?

  1. To encrypt the frame
  2. So that the receiver can detect a duplicate frame when an ACK is lost and the sender retransmits
  3. To measure the round-trip time
  4. To allow the sender to send several frames at once
Cevabı göster
B) So that the receiver can detect a duplicate frame when an ACK is lost and the sender retransmits

ACK kaybolursa gönderici timeout sonrası aynı çerçeveyi yeniden yollar. Sıra numarası olmasa alıcı bunun yeni bir çerçeve mi tekrar mı olduğunu bilemez ve veriyi iki kez teslim eder.
Stop-and-wait'te tek bit yeter (0, 1, 0, 1...): alternating bit protocol.

Soru 2orta

A link has rate 1 Mbps, frames are 1000 bits, and the one-way propagation delay is 270 ms (satellite). What is the sender utilization with stop-and-wait (ignore ACK transmission time)?

Cevabı göster
≈ 0.00185

L/R=1000/106=1L/R = 1000/10^6 = 1 ms. RTT =2×270=540= 2 \times 270 = 540 ms.U=L/RRTT+L/R=1541≈0.00185U = \frac{L/R}{RTT + L/R} = \frac{1}{541} \approx 0.00185.
Link zamanın %0.2'sinden azında kullanılıyor.

Soru 3orta

For the same satellite link, the sender uses Go-Back-N with a 3-bit sequence number and the maximum allowed window. What is the utilization?

Cevabı göster
≈ 0.0129

3 bit sıra numarasıyla GBN penceresi en fazla 23−1=72^3 - 1 = 7.U=7×1541≈0.0129U = \frac{7 \times 1}{541} \approx 0.0129.

Soru 4zor

For the satellite link above, what window size is needed for 100% utilization, and how many sequence-number bits does Go-Back-N need for that window?

Cevabı göster
541 frames; 10 bits

Tam verim için pencere, bir RTT + L/R süresinde gönderilebilecek çerçeve sayısı kadar olmalı: N=(540+1)/1=541N = (540 + 1)/1 = 541.
GBN'de N≤2k−1N \le 2^k - 1: 29−1=511<5412^9 - 1 = 511 < 541, 210−1=1023≥5412^{10} - 1 = 1023 \ge 541. Yani k=10k = 10.

Soru 5orta

With a kk-bit sequence number, what are the maximum window sizes for Go-Back-N and Selective Repeat?

  1. GBN: 2k2^k, SR: 2k2^k
  2. GBN: 2k−12^k - 1, SR: 2k−12^{k-1}
  3. GBN: 2k−12^{k-1}, SR: 2k−12^k - 1
  4. GBN: kk, SR: k/2k/2
Cevabı göster
B) GBN: 2k−12^k - 1, SR: 2k−12^{k-1}

GBN alıcısının penceresi 1 olduğu için gönderici 2k−12^k - 1'e kadar gidebilir.
SR'de alıcının da penceresi var; eski ve yeni çerçevelerin karışmaması için iki pencere toplamı sıra uzayını geçmemeli: W≤2k−1W \le 2^{k-1}, yani sıra uzayının yarısı.

Soru 6orta

A Go-Back-N sender with window 6 sends frames 0 to 5. Frame 2 is lost; all others arrive. Using cumulative ACKs where 'ACK n' means all frames up to n were received, which ACKs does the receiver send, and how many frames are retransmitted after the timeout?

Cevabı göster
ACK0, ACK1, ACK1, ACK1, ACK1; 4 frames

GBN alıcısı sadece sıradakini kabul eder. 0 ve 1 gelir: ACK0, ACK1.
2 kayıp. 3, 4, 5 sıra dışı geldiği için atılır, her biri için son doğru sıralı çerçevenin ACK'i (ACK1) tekrar gönderilir.
Timeout'ta gönderici 2'den itibaren hepsini yollar: 2, 3, 4, 5 yani 4 çerçeve.

Soru 7kolay

Same situation (window 6, frames 0 to 5, frame 2 lost) but with Selective Repeat. Which frames are retransmitted?

  1. Frames 2, 3, 4, 5
  2. Only frame 2
  3. All frames 0 to 5
  4. Frames 3, 4, 5
Cevabı göster
B) Only frame 2

SR alıcısı sıra dışı çerçeveleri tamponlar ve her birini ayrı ayrı ACK'ler: ACK0, ACK1, ACK3, ACK4, ACK5.
Her çerçevenin kendi timer'ı var; sadece 2'nin timer'ı dolar, sadece 2 yeniden gönderilir. 2 gelince alıcı 2, 3, 4, 5'i sırayla üst katmana verir.

Soru 8orta

A 2 Mbps link carries 12,000-bit frames with RTT = 45 ms. What is the utilization with a window of 8 frames?

Cevabı göster
≈ 0.941

L/R=12000/(2×106)=6L/R = 12000/(2\times10^6) = 6 ms. RTT+L/R=51RTT + L/R = 51 ms.U=min⁡(1,8×651)=4851≈0.941U = \min\left(1, \frac{8 \times 6}{51}\right) = \frac{48}{51} \approx 0.941.
Pencere 9 ya da daha büyük olursa 9×6=54>519 \times 6 = 54 > 51, U = 1.

Soru 9orta

Each frame on a stop-and-wait link is corrupted independently with probability 0.2 and must then be resent. What is the expected number of transmissions per frame?

Cevabı göster
1.25

Geometrik dağılım: başarı olasılığı 1−p=0.81 - p = 0.8, beklenen deneme 1/(1−p)=1/0.8=1.251/(1-p) = 1/0.8 = 1.25.
Verim de aynı oranda düşer: hatasız durumdaki UU, 1.25'e bölünür.

Soru 10zor

Selective Repeat uses 2-bit sequence numbers (0 to 3) with window size 3. The receiver gets frames 0, 1, 2 and sends ACKs, but all three ACKs are lost. What goes wrong when the sender retransmits frame 0?

  1. Nothing, the receiver discards it correctly
  2. The receiver's window is now {3, 0, 1}, so it accepts the old frame 0 as new data
  3. The sender deadlocks
  4. The receiver sends a NAK and the problem is resolved
Cevabı göster
B) The receiver's window is now {3, 0, 1}, so it accepts the old frame 0 as new data

0, 1, 2 alındıktan sonra alıcı penceresi ileri kayar ve 3, 0, 1 bekler (sıra numaraları döner).
Gönderici ACK alamadığı için eski 0'ı yeniden yollar. Alıcı bunu penceresindeki yeni 0 sanır: yinelenen veri yeni diye teslim edilir.
Pencere 2 olsaydı (2k−1=22^{k-1} = 2) alıcı {2, 3} beklerdi ve eski 0 dışarıda kalırdı.

Soru 11zor

Express stop-and-wait utilization in terms of a=dprop/dtransa = d_{prop}/d_{trans} (ignore processing and ACK size). If a=100a = 100, what is UU?

Cevabı göster
U = 1/(1 + 2a) ≈ 0.004975

U=dtransdtrans+2dprop=11+2aU = \frac{d_{trans}}{d_{trans} + 2 d_{prop}} = \frac{1}{1 + 2a}.a=100a = 100: U=1/201≈0.004975U = 1/201 \approx 0.004975. aa büyük (uzun, hızlı link) olunca stop-and-wait çöker.

Doğrulama: Verimlilik, gereken pencere ve sıra numarası bit sayıları node ile hesaplandı (verify/SEN2008/03b.mjs: U = min(1, N·(L/R)/(RTT + L/R)), 2^k - 1 ve 2^(k-1) sınırları, GBN/SR alıcı ACK simülasyonu, SR pencere belirsizliği gösterimi).

Deftere not kartı

ARQ = hata tespiti + ACK + timeout + yeniden gönder Sıra numarası şart: kayıp ACK sonrası tekrar gelen çerçeveyi tanımak için (SW: 1 bit) U = min(1, N (L/R) / (RTT + L/R)) SW: N = 1 a = dprop/dtrans -> U_SW = 1 / (1 + 2a) Tam verim için N >= (RTT + L/R) / (L/R) = 1 + 2a throughput = U x R GBN: alıcı penceresi 1, sıra dışını AT, cumulative ACK, tek timer, timeout -> o çerçeveden itibaren HEPSİ SR : alıcı tamponlar, her çerçeveye ayrı ACK ve timer, sadece kaybolanı gönder k bit sıra no: GBN W <= 2^k - 1 SR W <= 2^(k-1) hata olasılığı p: beklenen iletim = 1/(1-p) Piggybacking: ACK'i ters yöndeki veri çerçevesine bindir Tuzak: RTT = 2 x tek yön; L byte ise x8