计算机网络 -可靠数据传输原理 -运输层


需要注意的是,在rdt3.0之前的协议都是以分组肯定会到接收方为前提的。

一、可靠数据传输的小知识点

  1. 可靠运输(rdt)在发送端发送出去以及在接收端接收到的都是要经过不可靠运输(udt)。

二、可靠运输协议中的rdt协议

本段图片均来源于作者springtostring的文章

2.1 rdt1.0

这个协议其实就是完全相信信道不会出现丢失以及乱序。简单的发送方发出去以及接收方接收,接收方不会回复发送方是否收到。这种情况下,双方都不需要进行缓存,发送方接到上级请求之后就直接发送。
计算机网络 -可靠数据传输原理 -运输层

2.2 rdt2.0

在这个协议中他假设的是所有的分组都不会乱序的被接收方接收到。但他可以处理比特差错
而且他还有另外一个名字停等协议让人印象深刻。因为发送方发送一个分组之后就会等待接收方发出ACK分组的时候才会继续发下一个分组,如果等到NAK分组的话会重新发送刚才发送失败的分组,需要注意的是,如果一直接收不到ACK/NAK的话他就会一直等待。

2.2.1 rdt2.0如何处理比特差错?

引入ACK和NAK的报文对每一次接收方接到的报文进行回复。如果接收到比特没有差错的话,接收方会返回一个肯定确认;如果接收到的分组存在比特差错的话,接收方会返回一个否定确认。那我就要疑问了,**有没有否定不确认呢?**有,就是分组在路上丢失了,但在rdt2.0协议中不会讨论,我们在后面的协议中会进行说明。

ACK/NAK分组需要什么呢?

理论上ACK/NAK分组只需要一个字节就可以完成任务,1表示ACK,0表示NAK。

计算机网络 -可靠数据传输原理 -运输层
计算机网络 -可靠数据传输原理 -运输层

2.3 rdt2.1

我们从上文可以得知rdt2.0并没有将NAK/ACK被翻转这种情况纳入协议中,所以rdt2.1就应运而生了。NAK/ACK会产生翻转的原因是NAK/ACK只有一个字节,非常容易在传输过程中变成相反的字节。

2.3.1 rdt2.1是如何解决接NAK/ACK分组翻转这一情况的?

rdt2.1在发送出去的分组中加入一个序号,这个序号可以让接收方对该分组进行检查,检查这一个分组是不是按序到达的。但NAK和ACK本身不需要携带任何的序号,序号只在发送方发送的分组中出现。

2.3.2 举个栗子

当第一个分组(序号为0)发送成功且接收方返回一个ACK时,ACK在被发送方接收之前发生了翻转成为了NAK.所以发送方再一次发送第一个分组(仍然时序号0).但接收方接收到这一个新的分组的时候发现新分组与上一个分组的序号是一样的,说明发送方并没有正确接收到ACK分组,所以接收方再一次发送一个ACK分组,发送方接收到ACK分组后会将第二个分组(序号为1)发送出去。以此类推。

2.3.3 需要注意的点

  1. 序号在rdt2.1中只有一个字节,也就是序号只有2个,0和1。
  2. rdt2.1 只在发送方发送的分组中才会加入序号,在返回时不需要加入序号。
    计算机网络 -可靠数据传输原理 -运输层
    计算机网络 -可靠数据传输原理 -运输层

2.4 rdt2.2

rdt2.2和rdt2.1的细微差别是rdt2.2在反馈分组上只使用ACK而不使用NAK,如果接收方接收到了正确的0号包,他将返回(ACK,1)使发送方发送序号为1的包过来。如果收到了错误的包就会返回(ACK,0)。
计算机网络 -可靠数据传输原理 -运输层

2.5 rdt3.0

在rdt3.0之前的协议都是以分组肯定会到接收方为前提的。。所以rdt3.0需要考虑分组到不了接收方得怎么办。(其实站在发送方的角度看,接收方接收到分组但是反馈的分组被吃了也等同与接收方接收不到分组)

2.5.1 如何避免分组丢失?

rdt3.0的做法是加入倒计时定时器。每一次发送一个分组的时候都开始一个倒计时,当时间结束的时候仍然未收到分组的反馈信息将会重新发送一次这个分组。
计算机网络 -可靠数据传输原理 -运输层
计算机网络 -可靠数据传输原理 -运输层

2.6 流水线可靠传输协议

虽然在单个分组中rdt3.0已经足够的好了,但是他还是基于停等协议,所以传输的效率非常的低。因此就需要一个流水线式的协议了。(流水线协议就是不等接收方发送反馈分组到发送方就开始下一个分组的传输)
但是流水线协议怎么保证之前的分组已经正确按序的发送到接收方了呢?

  1. 这时候就需要扩大之前定义的序号的长度了
  2. 发送方至少需要缓存还未确认的所有分组。
  3. 所需的序号长度需要根据不同的解决差错恢复的方法而决定。

2.7 流水线解决差错 回退N步(滑动窗口协议)

虽然采用流水线可以不用等待确认,但是会受限于未确认分组的某个最大值。
【0,base-1】是已经发送并且被确认的分组。
【base,nextseqnum-1】是已经发送但是还没有被确认的分组。
【nextseqnum,base+N-1】是还未发送的分组。

计算机网络 -可靠数据传输原理 -运输层

2.7.1 GBN必须要响应三种类型的事件

  1. 当上层需要请求发送分组的时候,GBN首先检查他的窗口是否满了,如果未满则将其添加到当前队列的尾部。
  2. 收到一个ACK将会往前移动到 第一个还未确定的分组之前。
  3. 如果,当前队列第一个未被确认的分组超时了,则需要将从该分组开始重新传送所有后面的分组。

2.7.2 GBN的优缺点

  1. 优点:接收方不需要任何缓存
  2. 缺点:一旦重传,会导致很多已经先到达接收方的分组被重新传送。会导致效率变慢。
    计算机网络 -可靠数据传输原理 -运输层

2.8 流水线解决差错 选择重传

选择重传指的是将他怀疑在接收方出错(即丢失或受损)的分组而避免了不必要的重传。
流水线选择重传的发送方和接收方的窗口长度相等,且必须小于等于序号空间的一半
序号空间指的是2的(分组内部序号所占的字节数)幂。
计算机网络 -可靠数据传输原理 -运输层
计算机网络 -可靠数据传输原理 -运输层

2.8.1发送方与接收方所需要做的工作。

计算机网络 -可靠数据传输原理 -运输层