刚上的计算机网络课,讲了pipeline模式的可靠传输的一种差错恢复策略——选择重传。临下课的时候老师告诉我们窗口长度N最多是序列编号范围的一半,他说道理很简单的,自己想一下。我思考了一下,然而……
所以具体问题是什么?
可以看到左边发方一直没有收到ACK,最后超时重传了第0个分组,而右边的收方却以为是最新的分组而接受,这就很尴尬了。正是这种困境引出了我们标题所说的约束。
为什么一半?
我们要找到能避免这种尴尬的极端情况。
根据书上的描述,收发方窗口长度是一样的。收发方各自有一段分组序列,序列号从0到K循环地编给每个分组,就像上图的01230123…,我们把(0,k)作为一段考虑。
发方要等别人ACK才能移动窗口,一等就要耽搁了,这使得发方窗口总是落后于收方。并且他的窗口内第一个分组,一定是还没被ACK的,如果发生了重传,那一定是最先发这个。
收方的接收策略是,但凡编号落在窗口内,那就接受并发送ACK。因此极端情况我们要保证的是,准备接受的分组不可以来自上一段(更不可能是下一段)。
我们让收方窗口尽可能领先,最多领先至