2012-04-10 137 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。