重传策略

1、问题

  • 有一组窗口大小的数据包正进行即时可靠传输
  • 使用累计确认消息
  • 每个包都有计时器
  • 协议如何表现?
    • 回退N步(Go-back-N):一个包丢失会导致整个窗口重传
    • 选择性重传(Selective Repeat):一个包丢失仅仅会重传那一个包

2、回退N步

在这里插入图片描述
假设N = 4,即发送窗口大小为4,发送端一次发送了数据包1,2,3,4,在传输过程中包2丢失。接收端收到包1后,返回ACK 1给发送端。接收端收到ACK 1后,滑动窗口右移,发送数据包5。一段时间后,接收方还没收到ACK 2,计时器到点后,发送端重新发送整个窗口大小的包,此时发送窗口中包含的数据包为2,3,4,5,于是将这些包重新发送给接收端。

3、选择性重传

在这里插入图片描述
和上面一样,N = 4,数据包2丢失,发送端接收到ACK 1后滑动窗口移动,发送数据包5,等待ACK 2的计时器一段时间后计时结束,发送端重发包2。发送端收到返回的ACK 2,ACK 3, ACK 4后窗口移动,往后继续发送包6,7,8,9,等等。

4、为什么需要回退N步

在上面的例子中,明显看出选择性重传需要重新发送的数据包少于回退N步,那为什么仍然需要回退N步呢?
考虑极端一点的情况,发送的包3,4,5也在传输中丢失,选择性重传涉及到多个包的计时器和往返时间,如果网络状况糟糕,出现一连串的包都丢失的情况,那么选择性重传的效率就比较低了,在这种情况下回退N步会表现得更好。

5、例子

在这里插入图片描述
SW = 4,RW = 1,发送端发送数据包1,2,3,4,其中包2丢失。收到ACK 1后,发送端发送包5,由于没有收到包2,所以包5和包3、4都会被丢弃。包2的计时器触发后,重新发送包2。由于RW = 1,无法缓存更多的包,于是包3,4,5也要被重新发送。在这种情景下,应该选择回退N步,因为可以一次性发送包2,3,4,5。

在这里插入图片描述
例子2,SW = RW = 4,包2丢失,收到ACK 1后发送包5。由于RW = 4,所以包3,4,5可以被缓存,收到包2后,接收窗口填满,可以被接收方接收。在这种情景下,选择性重传会更好,因为避免了发送网络中已存在的数据包的副本而使得网络膨胀。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值