后退N窗口大小
答
为什么S>N
有一个简单的原因。考虑下图中描述的可能的情况,其中窗口大小与序号空格相同,即S=N
。 2^m
,其中m
是以比特报头的序列号字段的大小:
在此,在上述的图像,序列号空间被表示。
现在,考虑当Sf
为0并且Sn
为1时的第一种情况。定时器在第一帧发送后立即开始。当第一帧收到时,Receiver发送ACK。但假设由于某些原因而丢失。
但是,由于窗口大小为4,发送方将继续发送下一帧,直到达到最大窗口大小。 (在这种情况下为4
)。
由于帧中没有丢失,帧将成功到达接收器,每当帧到达时,Rn
将增加1
。
假设所有的ACK。丢失了。并在一段时间后超时。所以发送者会假设帧丢失或ACK丢失。所以它会从头开始憎恨数据。但在接收端,帧成功到达,它将等待下一帧(本例中为0
)。
并且发送方也将发送帧0
。这是前一帧。但它会被接收器错误地接受。
所以最好有窗口大小(N)必须小于序列号空间(S)。
考虑以下图:
在上述图中的S=N+1
或窗口大小是2^m-1
。在这种情况下,假设与前面案例中假设的相同。但区别在于,最后接收方将等待帧3
,发送方将发送帧0
。所以它会被丢弃。因此发送者将再次发送整组帧。
因此在第二种情况下成功沟通的可能性更大。
希望这可以帮助你。
我建议从描述Go-Back-N算法的相关规范中添加一个引用。我只是看着RFC,无法快速找到该部分。 – user3386109 2015-02-10 23:54:05