2015-02-10 93 views
4

为什么在TCP的后退N算法窗口大小(N)必须小于序列号空间(S):S> N?我试图想出它自己,但不安静得到它后退N窗口大小

+0

我建议从描述Go-Back-N算法的相关规范中添加一个引用。我只是看着RFC,无法快速找到该部分。 – user3386109 2015-02-10 23:54:05

回答

4

为什么S>N有一个简单的原因。考虑下图中描述的可能的情况,其中窗口大小与序号空格相同,即S=N2^m,其中m是以比特报头的序列号字段的大小:

enter image description here

在此,在上述的图像,序列号空间被表示。

现在,考虑当Sf为0并且Sn为1时的第一种情况。定时器在第一帧发送后立即开始。当第一帧收到时,Receiver发送ACK。但假设由于某些原因而丢失。

但是,由于窗口大小为4,发送方将继续发送下一帧,直到达到最大窗口大小。 (在这种情况下为4)。

由于帧中没有丢失,帧将成功到达接收器,每当帧到达时,Rn将增加1

假设所有的ACK。丢失了。并在一段时间后超时。所以发送者会假设帧丢失或ACK丢失。所以它会从头开始憎恨数据。但在接收端,帧成功到达,它将等待下一帧(本例中为0)。

并且发送方也将发送帧0。这是前一帧。但它会被接收器错误地接受。

所以最好有窗口大小(N)必须小于序列号空间(S)。

考虑以下图:

enter image description here

在上述图中的S=N+1或窗口大小是2^m-1。在这种情况下,假设与前面案例中假设的相同。但区别在于,最后接收方将等待帧3,发送方将发送帧0。所以它会被丢弃。因此发送者将再次发送整组帧。

因此在第二种情况下成功沟通的可能性更大。

希望这可以帮助你。