2021-12-07

2021-12-07

  • 运输层
    • 可靠数据传输原理
      • 流水线可靠数据传输
        • 回退N步
        • 选择重传

运输层

可靠数据传输原理

可靠数据传输(rdt)有各种不同版本的协议

经完全可靠信道传输:rdt1.0
发送端仅发送,接收端仅接收

经有差错信道传输:rdt2.0
接收端会使用检验和查错,并反馈给发送端
2021-12-07_第1张图片
圆圈表示状态,横线上方表示发生的事件,横线下方表示作出的响应

注意发送端在进入等待ACK或NAK状态的时候,只有接收到来自接收端的ACK(全对)反馈后,才会进入等待调用状态,处在等待ACK或NAK状态的时候,发送方不会从上层获得更多数据了,所以rdt2.0被称为停等协议

rdt2.0没考虑到接收端在给发送端进行反馈的时候,也会遇到干扰的问题,于是就有了rdt2.1和rdt2.2

rdt2.1属于等停协议,就是说要按顺序传送分组,上一个分组确认传达后才会开始下一个分组。
假设接收端收到了正确的分组并向发送端发出了确认信息,
但是当发送端接收到错误的接收端的确认信息(即不是ACK也不是NAK)时候,
发送端不知道接收端是否得到正确的分组,发送端会在当前状态(1或0)下重新发送分组,
而此时接收端已经进入下一个状态(0或1),发送端与接收端当前处于不同的状态,
当前接受端的状态是期望得到下一个分组,而发送端发送的是上一个分组,
这时候接收端就会通过两端不同的状态明白发送端发送的是上一个分组,跟着会丢弃这个分组,并且发送ACK给发送端, 让发送端进入下一个状态。

rdt2.2与2.1的区别就在于去掉了NAK,而在ACK分组中显式指出分组编号:
发送方获得来自上层的数据后,封包(编号为0)发送至接收方,接收方接收到分组后:
1、如果没有损坏,回送ACK0分组,并等待编号为1的分组
2、如果损坏,回送ACK1分组,并继续等待编号为0的分组
发送方接收到回送分组后:
1、如果没有损坏,且为ACK0分组,无任何动作,等待上层协议调用1
2、如果没有损坏,且为ACK1分组,重发编号为0的分组
3、如果损坏,无论是ACK1还是ACK0,重发编号为0的分组
接收方收到分组后(接收方不知道自己的ACK分组在传输过程中是否损坏):
1、如果没有损坏,且为编号1的分组,回送ACK1分组,且等待编号为0分组(循环)
2、如果没有损坏,且为编号0的分组,回送ACK0分组,且等待编号为1分组
3、如果损坏,回送ACK0分组,等待编号为1分组
2021-12-07_第2张图片
2021-12-07_第3张图片

经有差错的丢包信道传输:rdt3.0
在有可能丢包的情况下,如果发送的分组0或者接收方的ACK0反馈丢包,发送方都不会获得反馈,这个问题最简单的解决办法就是设定一个定时器,发送完分组后如果定时器时间到了还没获得反馈,就重发

流水线可靠数据传输

虽然rdt3.0是一个正确的传输协议,但由于它是一个停等协议,在有较大物理延迟的时候使用它效率很低

解决的方法也很简单:不以停等的方式运行,而是允许发送发一次发送多个分组
2021-12-07_第4张图片
而流水线方式的差错恢复有两种基本方法:回退N步、选择重传

回退N步

2021-12-07_第5张图片
回退N步的规则很简单,发送方连续发送不超过N的分组,并且在按序接收到分组的ACK后,继续发送下一个分组,如果接收方接收到了失序的分组,则直接抛弃全部的失序分组,并发送上一个ACK,等待发送方重传,发送方接收到失序的ACK或计时器超时后,重传所有已发送但未确认的分组
下面是一个N为4的例子
2021-12-07_第6张图片

选择重传

顾名思义,该协议运行发送方选择重传有问题的分组,接收方在接收到失序分组的时候也不进行抛弃,而是缓存下来

在最后发送发无分组可发时,就进入等待,等分组2的ACK到达后直接移动到6 7 8 9分组

你可能感兴趣的:(计算机网阅读笔记,网络,网络协议,http)