2012-04-10 139 views
1

我正試圖在兩個單獨的客戶端和服務器應用程序上實現Go back N協議。假設我的序列號必須適合3位,所以2^3 = 8個最大數字,2^3 - 1 = 7個窗口大小。返回N協議

我最初發送我的整個窗口。前兩個數據包(0和1)正確接收。數據包2被丟棄。當接收機通過6得到的數據包3中,期待2,所以它必須NACK它得到了說分組就是了2.

Sender  Receiver 
    0   0 
    1   1 
    2 (packet dropped) 
    3   nack2 
    4   nack2 
    5   nack2 
    6   nack2 

當發送方接收第一NACK2,它知道0和1已經(通過捎帶)接收並向前移動它的窗口,但它也必須從序號2開始重新發送它的窗口(所以2-3-4-5-6-和可能的7-0)。發件人收到第二個nack2時,它已經發送了這些數據包。由於該協議,發送方將再次重發他的整個窗口,包括2.現​​在接收方可能會收到2個(和其他),但在第二個nack2批次中,它將重新接收2,這是無序的,將不得不停止其預期的數據包,等等。我在所有這些假設中是否正確?

如果我是這樣,在我看來,返回N發送的數據包比停止和等待更多,特別是增加窗口大小越多。我沒有得到什麼?

回答

0

我發現這個問題的解決方案是簡單地使用更多的位來表示序列號,因此具有更大的MAX。如果MAX是2 *窗口大小,則延遲2不能被誤解爲正確的ACK。