为什么选择重传策略窗口长度最多是序列号范围一半?

刚上的计算机网络课,讲了pipeline模式的可靠传输的一种差错恢复策略——选择重传。临下课的时候老师告诉我们窗口长度N最多是序列编号范围的一半,他说道理很简单的,自己想一下。我思考了一下,然而……
为什么选择重传策略窗口长度最多是序列号范围一半?_第1张图片

所以具体问题是什么?

为什么选择重传策略窗口长度最多是序列号范围一半?_第2张图片
可以看到左边发方一直没有收到ACK,最后超时重传了第0个分组,而右边的收方却以为是最新的分组而接受,这就很尴尬了。正是这种困境引出了我们标题所说的约束。

为什么一半?

我们要找到能避免这种尴尬的极端情况。
根据书上的描述,收发方窗口长度是一样的。收发方各自有一段分组序列,序列号从0到K循环地编给每个分组,就像上图的01230123…,我们把(0,k)作为一段考虑。

发方要等别人ACK才能移动窗口,一等就要耽搁了,这使得发方窗口总是落后于收方。并且他的窗口内第一个分组,一定是还没被ACK的,如果发生了重传,那一定是最先发这个。
收方的接收策略是,但凡编号落在窗口内,那就接受并发送ACK。因此极端情况我们要保证的是,准备接受的分组不可以来自上一段(更不可能是下一段)。

我们让收方窗口尽可能领先,最多领先至起点与发方窗口末端相邻,因为发方窗口外的分组还没发出去,收方不可能ACK到,不可能出现在自己窗口之前。尽可能领先就尽可能让窗口接触到下一段的分组,这是极端。
假如发方窗口就停在段的起始位置(0, N),如果要保证安全,就不能让收方窗口接触到下一段的0。两个窗口紧挨,总长恰好一段,所以说窗口长度为序列号范围一半。

这里写图片描述
——(0, k)作为一段的范围特殊了点,不过任意的{m…k 0…m-1}(0<=m<=k)都是一样的。

我还不知道两个窗口有什么必要等长,因此更一般的是,二者长度之和小于等于序列号范围即可。有错的话,欢迎批评指正:)
为什么选择重传策略窗口长度最多是序列号范围一半?_第3张图片

你可能感兴趣的:(杂七杂八)