SR和GBN:窗口外的ACKs

5
我目前正在学习基础网络知识,目前正在研究可靠传输的主题。我使用Kurrose&Ross的《计算机网络》一书,其中有两个复习问题如下:
关于选择性重传/退回n协议,发送方是否可能收到超出其当前窗口的数据包的ACK?
对于SR版本,我的答案如下:
是的,如果窗口大小太大而射序号空间不足以覆盖窗口大小,则会发生此情况。例如,接收方接收了与序列号空间相同数量的数据包。因此,其接收窗口已移动,以便期望具有与上一个数据包相同序列号的新数据包集。接收方现在为每个数据包发送ACK,但所有ACK都在传输过程中丢失。这最终导致发送方针对以前的每组数据包都超时并重新发送它们。接收方认为这些重复的数据包是其期望的新数据包,并向成功到达发送方的每个数据包发送ACK。现在,发送方经历了类似的困惑,它认为ACK是每个旧数据包已被接收的确认信号,但实际上这些ACK是为新的、尚未发送的数据包所用的。
我相当确定这是正确的(否则,请告诉我!),因为这种情况似乎是为什么当涉及SR协议时,窗口大小应小于或等于序列号空间的一半的经典理由,但GBN呢?
同样的换行问题是否会对它产生影响,从而使答案基本相同?如果不是,是否存在其他导致典型GBN发送方接收到其窗口外的ACK的情况?
关于后者,我能想到的唯一例子是以下内容:
GBN发送方按顺序发送数据包A和B。接收方有序接收两个数据包,然后发送一个累积的ACK,覆盖所有数据包直到A,接着又发送第二个ACK,覆盖所有数据包直到B(包括A)。第一个ACK被严重延迟,以至于第二个ACK先到达发送方,并使其窗口滑动超过A和B。当第一个ACK最终到达时,它会错误地确认已正确接收了A之前的所有数据包,而实际上A已经超出发送方的窗口。
与先前的情况相比,这个例子似乎相对无害且不太可能发生,因此我怀疑其正确性(但如果我错了,请纠正我!)。
1个回答

1
在实际世界中,如果一个延迟足够长以使其超出窗口的重复ACK会怎样?
协议是发送方和接收方之间的,但它无法控制媒体(网络路径)的行为。
根据设计,协议仍然应该是可靠的,但实现应该能够处理这种超出窗口的重复ACK。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接