0%

计网数据链路层L2

可靠传输

★3.4 可靠传输

★3.4.1 可靠传输的基本概念

  • 在接收方通过循环冗余检验法检测到接收的帧有误码时,就要采取相应的措施,根据数据链路层向上提供的服务类型来看:

    • 如果仅仅是丢弃有误码的帧,其他什么也不做,那就是不可靠传输服务
    • 如果想要实现发送端发送什么,接收端就收到什么,那就是可靠传输服务
  • 一般情况下,对有线链路,由于其误码率比较低,所以并不要求数据链路层向上提供可靠传输服务

    而对于无线链路,其容易受到干扰,误码率比较高,所以要求数据链路层必须向上提供可靠传输服务

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-18.jpg)

    注意:可靠传输服务并不仅仅局限于数据链路层(从整个计算机网络体系结构来看,传输差错还包括分组丢失分组失序分组重复),其他各层均可选择实现可靠传输。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-19.jpg)

3.4.2 可靠传输的实现机制 — 停止-等待协议

确认与否认
  • 如下图所示,发送方和接收方基于互联网进行通信,而不是局限在一条点对点的数据链路。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-20.jpg)

    发送方给接收方发送数据分组,接收方收到后对其进行差错检测,若没有误码,则接受该数据分组,并给发送方发送确认分组 ACK(Acknowledgement Packet),发送方收到对所发送的数据分组的确认分组后,才能发送下一个数据分组;

    若接收方收到数据分组后对其进行差错检测,发现数据分组有误码,则丢弃该分组,并给发送方发送一个否认分组 NAK(Negative Acknowledgement),发送方收到对所发送的数据分组的否认分组后,就立刻重传该数据分组,等待接收确认分组或否认分组。

    因此,发送方发送该数据分组后,并不能立刻将该数据分组从缓存中删除,只有在收到了针对该数据分组的确认分组后,才能将其从缓存中删除

超时重传
  • 考虑另外一种情况,发送方给接收方发送数据分组,但是该数据分组却在发送过程中丢失了,此时接收方收不到数据分组,就不会发送 ACK 或 NAK,如果不采取其他措施,发送方就会一直处于等待接收接收方发送的 ACK 或 NAK 的状态。为了解决这种问题,应该要给发送方设定一个时间 — 重传时间,如下图所示:

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-21.jpg)

确认丢失
  • 除了发送方向接收方发送的数据分组可能会存在分组丢失的情况外,接收方在向发送方发送 ACK 或 NAK 时,也存在分组丢失的问题,如果接收方接收到了数据分组,并向发送方发送 ACK,但是该 ACK 丢失,于是发送方一直等待接收 ACK 直到超时,根据超时重传,发送方又向接收方发送了该数据分组,造成分组重复问题,为了解决这个问题,就要给每个分组带上序号,且如下图所示的解释,用一个比特来编号即可,当接收方又收到了相同编号的数据分组 DATA 0 后,就丢弃该数据分组,然后再发一次 ACK 给发送方,如此下去,发送方最终一定能接收到 ACK。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-22.jpg)

    在发送方收到 ACK 后,就可以继续发送下一个数据分组 DATA 1 了,同理,在发送方接收到针对该数据分组 DATA 1 的 ACK 后,就继续发送下一个数据分组 DATA 0注意:这里的数据分组 DATA 0 和前面的数据分组 DATA 0 不是同一个数据分组,只是因为仅用一个比特来编号的原因,所以它们编号相同)。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-23.jpg)

确认迟到
  • 发送方发送的数据分组可能丢失,接收方发送的 ACK 或 NAK 也有可能丢失,因此,针对发送方发送的不同编号的数据分组,其对应的 ACK 或 NAK 也应该有相应的编号

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-24.jpg)

  • 注意:对于数据链路层的点对点信道,往返时间比较固定,不会出现确认迟到的情况,因此,如果只在数据链路层实现停止 - 等待协议,可以不用给确认分组 ACK 进行编号。

★注意事项

![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-25.jpg)

信道利用率
  • 如下图所示,不考虑处理时延,在发送数据分组的整个过程中,在没有上述错误的情况下,发送方从发送一个数据分组开始,到接收到 ACK 结束所需的总时间为 TD + RTT + TA ,其中 TD 是发送方发送数据分组的发送时延,RTT往返所需的传播时延,TA 是接收方发送 ACK 的发送时延,则信道利用率 U = TD / (TD + RTT + TA)

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-26.jpg)

  • 停止 - 等待协议的信道利用率很低,如果出现超时重传,则信道利用率更低,因此,又引出回退 N 帧协议和选择重传协议。

3.4.3 可靠传输的实现机制 — 回退N帧协议

  • 如果发送方每次仅发送一个数据分组,由于分组在信道上的往返时间比较长,信道利用率就比较低,因此,可以采用流水线传输来提高信道利用率,如下图所示:

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-27.jpg)

无差错情况
  • 回退N帧协议是在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数。

    如下图所示,采用三个比特给分组编号(0~7),而发送窗口的尺寸范围 WT 的取值为 1 ~ 2^3-1(WT 取值为 1 时,就是停止 - 等待协议),本例中取值为 5,因此,序号落在发送窗口内的 5 个数据分组可以连续发送,而序号落在发送窗口外的数据分组不允许发送,接收窗口的尺寸 WR 取值为 1。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-28.jpg)

    • 在无差错的情况下,发送方将发送窗口中的 0~4 号数据分组连续发送给接收方,接收方按序接收这些数据分组,并且每接收一个数据分组,接收窗口就向前滑动一个位置,然后相应的,接收方向发送方发送 ACK,发送方在接收到 ACK 后,每接收到一个 ACK,发送窗口就向前滑动一个位置,这样就有新的序号落入了发送窗口等待被发送,这时,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付给上层处理。

      ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-29.jpg)

累积确认
  • 接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后,对按序到达的最后一个数据分组发送确认ACKn 表示序号为 n 及以前的所有数据分组都已经正确接收

    仍采用上面的例子,如下图所示,发送方将发送窗口中的 04 号数据分组连续发送给接收方,接收方按序接收这些数据分组,并且每接收一个数据分组,接收窗口就向前滑动一个位置,然后**接收方在按序接收到数据分组 0 ~ 4 后,发送确认分组 ACK 4 给发送方,表示数据分组 4 及前面的 03 数据分组都已经接收到**,这时,发送方在接收到 ACK 4 后,就知道数据分组 0 ~ 4 都已经被接收到,于是发送窗口向前滑动 5 个位置,将收到确认的数据分组从缓存中删除,并进行下一轮的发送。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-30.jpg)

    由此可以看出,累计确认的优点是可以减少接收方的开销,减少对网络资源的占用(不用对收到的数据分组逐个发送确认了),缺点是发送方不能及时知道哪些数据分组被正确接收。

★有差错情况
  • 以上都是在发送方将发送窗口中的数据分组连续发出,传输过程中数据分组未丢失、无误码,接收方按序接收数据分组的假设下进行描述的,即无差错情况,但事实是差错一定是会出现的,因此,接下来要描述的是有差错情况。

    如下图所示,发送方将发送窗口中的 51 号数据分组连续发送给接收方,假设数据分组在传输的过程中受到干扰,其中 5 号数据分组出现了误码,于是在接收方按序接收这些数据分组时,发现数据分组 5 出现误码,于是将数据分组 5 丢弃,继续接收后面的数据分组 6,但是**接收方发现接收的数据分组 6 和接收窗口当前应该接收的数据分组 5 的序号不相同,于是将数据分组 5 后面的数据分组 61 都丢弃了,并对之前正确按序接收的最后一个数据分组进行确认,即发送 ACK 4,并且每丢弃一个数据分组(从丢弃数据分组 6 开始算起),就发送一个 ACK 4,这四个 ACK 4 都被发送方接收,发送方收到这些之前就接收到的 ACK 4 后,知道之前所发送的数据分组(这里的数据分组 5~1)出现了差错,于是不等超时计时器超时就立刻重传**。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-31.jpg)

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-32.jpg)

    在这个例子中,尽管序号为6,7,0,1的数据分组正确到达接收方,但由于数据分组 5 因为误码不被接受,导致序号不匹配(数据分组 6 和接收窗口当前序号 5 不匹配)问题,所以它们也被丢弃,发送方还要重新发送这几个数据分组(包括数据分组 5),这就是所谓的回退 N 帧(GBN,Go-Back-N)

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-33.jpg)

WT取值范围
  • 前面已经说过,发送窗口的尺寸范围 WT 的取值为 1 ~ 2^3-1,假设 WT 取值为 8 ,则会出现以下错误:若发送方发送数据分组 0 ~ 7,然后接收方发送 ACK 7,但是 ACK 7 在传输过程中丢失了,于是发送方超时重传数据分组 0 ~ 7,但此时接收方的接收窗口已经向前滑动到新的序号 0 ,接收方就无法分辨新、旧数据分组

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-34.jpg)

总结

![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-35.jpg)

3.4.4 可靠传输的实现机制 — 选择重传协议

选择重传协议
  • 由前面所述,在回退N帧协议中,接收方的接收窗口尺寸 WR 取值为 1,因此,当发送方将发送窗口中的数据分组连续发送给接收方时,若其中一个数据分组在传输过程中出现误码(如前面例子中的数据分组 5 ),则之后的数据分组 6 ~ 1 都要被丢弃,所以数据分组 5 ~ 1 都需要进行超时重传,这无疑是对通信资源的极大浪费。

    因此,需要对回退N帧协议进行改进,为了进一步提升性能,可设法只重传出现误码的数据分组,因此,接收窗口的尺寸 WR 不应再等于 1,而应该大于 1,以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交给上层,这就是选择重传协议

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-36.jpg)

    注意:选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认

★选择重传协议例子
  • 如下图所示,假设发送方的发送窗口尺寸 WT 取值为 4,接收方的接收窗口尺寸 WR 取值也为 4,发送方将发送窗口中的数据分组 0 ~ 3 连续发送给接收方。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-37.jpg)

    假设数据分组 2 在传输的过程中丢失,则接收方只接收到数据分组 0、1、3,在接收到数据分组 0、1 时,接收方发送 ACK 0、1 给发送方,然后接收窗口向前滑动两个位置,此时由于数据分组 2 丢失,所以接收方并没有发送 ACK 2 给发送方,因此接收窗口在滑动到序号 2 后就不再向前滑动,然后接收方继续接收数据分组 3 ,并发送 ACK 3 给发送方,但由于此时接收窗口在序号 2 的位置,因此接收窗口并不能向前滑动,而是记录已经接收到数据分组 3

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-38.jpg)

    发送方在接收到接收方发送的 ACK 0、1 后,发送窗口就向前滑动两个位置,但是由于接收方没有发送 ACK 2,所以发送窗口在滑动到序号 2 后就不再向前滑动,此时发送方又接收到 ACK 3,由于发送窗口在序号 2 的位置,因此发送窗口并没有向前滑动,而是将发送窗口中的序号 3 打了一个标记,表示接收方是成功接收到数据分组 3 的,在重传时并不需要重传数据分组 3

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-39.jpg)

    然后发送方继续将发送窗口中的数据分组 4、5 连续发送给接收方,接收方在接收到数据分组 4、5 后,就将 ACK 4、5 发送给发送方,同样,由于接收窗口在序号 2 的位置,因此接收窗口并不能向前滑动,而是记录已经接收到数据分组 4、5

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-40.jpg)

    同样,发送方在接收到 ACK 4、5 后,发送窗口也不能向前滑动,而是给序号 4、5 打一个标记,表示接收方已经成功接收到数据分组 4、5 了。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-41.jpg)

    此时,由于发送方一直没有接收到 ACK 2,于是发送方超时重传数据分组 2 给接收方,接收方在接收到数据分组 2 后,发送 ACK 2 给发送方,并且由于在接收窗口中,已经记录数据分组 3、4、5 都被成功接收了,于是接收窗口向前滑动 4 个位置到序号 6

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-42.jpg)

    发送方在接收到 ACK 2 后,发现发送窗口中的序号 3、4、5 都已经被打上标记,说明数据分组 3、4、5 都已经被接收方成功接收,于是发送窗口向前滑动 4 个位置,等待下一轮的发送。

    ![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-43.jpg)

WT和WR取值范围

![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-44.jpg)

![](../../../../../Running Noob/计算机/Typora笔记/笔记-git仓库/Computer_Network_micro-classroom/img/计网微课堂/计网微课堂C3-45.jpg)

总结
---------------The End---------------