后退N帧协议中发送窗口的尺寸大小

后退N帧协议的接收窗口为1,可以保证按序接收数据帧。
若采用n比特对帧编号,则其发送窗口的尺寸WT应满足1 ≤ WT ≤ 2n-1。
若发送窗口的尺寸大于2n-1,则会造成接收方无法分辨新帧和旧帧。

请说明:用 n 比特进行编号时,若接收窗口的大小为1,则只有在发送窗口的大小 WT ≤ 2n-1时,连续ARQ协议才能正确运行。

举一个具体的例子说明:

例如用3比特可编出8个不同的序号,因而发送窗口的最大值似乎应为8个,但实际上,设置发送窗口为8个,将使协议在某些情况下无法工作。

设发送窗口 WT = 8 个,发送端发送完0~7号 共8个数据帧,因发送窗口已满,发送暂停。假定这8个数据帧均已正确到达接收端,并且对每个数据帧,接收端都发送出确认帧。

下面考虑两种不同的情况:

  • 第一种情况是:所有确认帧都正确到达了发送端,因而发送端接着又发送8个新的数据帧,其编号应该是 0~7 。注意序号是循环使用的。因此,序号虽然相同,但8个帧都是新的帧。

  • 第二种情况是:所有确认帧都丢失了。经过一段由超时计时器控制的时间后,发送端重传这8个旧的数据帧,其编号仍然是 0~7。于是当接收端第二次收到编号为 0 ~ 7的 8 个数据帧时,就无法判定这是8个新的数据帧还是8个旧的重传的数据帧。

因此,将发送窗口设置为8显然是不行的。

讲到这里,可能有人对第二种“所有确认帧都丢失了”的情况仍然很疑惑,
即,为什么接收端无法判断出来重传的这8个数据帧是旧数据帧呢?
大家看了下面的图示就懂了。

在这里插入图片描述

  1. 继续沿用上述例子中的条件,用3比特即可编出8个不同的序号,我们可以看到上图中发送端的帧编号是 0~7 ,因为序号是循环使用的,因此,发送端前8位和紧接着的后8位,序号虽然相同,但后8个帧都是新的帧。

  2. 发送窗口个数是蓝色框选中的序号为0-5的6个帧,发送端可以同时发送多个数据帧,直到收到来自接收端的ACK确认帧,发送窗口才往前移动。
    在这里插入图片描述

  3. 此时发送窗口序号为 0~5的6个帧,依次发向接收窗口,并保留对应序号帧的副本,发送窗口各帧成功收到来自接收窗口的ACK确认后,再将副本丢弃。

  4. 接收窗口大小为1,所以接收窗口只能一个一个的按序接收来自发送窗口的数据帧,成功接收后,便向发送窗口返回一个ACK确认帧。比如接收窗口成功的按序接收到了来自发送端的0、1、2、3、4、5号帧后,便依次向发送端发送ACK0、ACK1、ACK2、ACK3、ACK4、ACK5,或者直接发送一个ACK5确认帧(代表序号为5的帧及之前的帧都已收到)。
    在这里插入图片描述

  5. 如上图此刻,接收窗口向前移动了6个帧,移动到了接收端序号为6的帧处。然而,序号 0~5的ACK确认帧在数据链路上出错,发送窗口苦苦等待ACK确认帧,等不到就无法向前移动。

  6. 经过一段由超时计时器控制的时间后,发送端重传这6个旧的数据帧,其编号仍然是 0~5。因为发送端帧的序号范围是0至7,即重发序号为0至5的帧会被接收窗口认为是旧帧,因为接收窗口还没接收到过6号、7号帧。
    重点来了!!!!!
    若上述情况的发送窗口个数6(序号为0-5号帧)改为2n也就是23=8个(序号为0-7号帧),错误情况仍然是ACK确认帧丢失。

  7. 那么,设置发送窗口为8个,此时发送端需要重发的就是0-7号帧,而序号范围正好也是0-7,接收端将无法区分这0-7号帧是新帧还是旧帧,因为接收端之前已经成功接收了0-7号帧,只是不知道ACK出错了,若发送窗口个数与序号个数相同,将使协议在某些情况下无法工作。

总结,发送窗口W T的个数必须为 1 ≤ W T ≤ 2n-1。

  • 32
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李桥桉

支持一下作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值