一、可靠传输概述

  • 使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)。

可靠传输.PNG

  • 数据链路层向上提供的服务类型:
  1. 不可靠传输:仅仅丢弃有误码的帧,其他什么也不做。
  2. 可靠传输:想办法实现发送端发送什么,接收端就收到什么。
  • 一般情况下,有线链路的误码率较低,为了减少开销,并不要求数据链路层提供可靠传输服务,即使出现了误码,可靠传输的问题由其上层处理。
  • 无线链路易受干扰,误码率较高,因此要求数据链路层必须向上层提供可靠传输服务。

有线链路.PNG

  • 传输差错:比特差错、分组丢失、分组失序、分组重复(这三个差错类型一般不会出现在数据链路层,而会出现在其上层)。
  • 可靠的传输服务并不仅限于数据链路层,其他各层均可选择实现可靠传输。

哈哈哈哈.PNG 分组丢失:主机1向主机2发送的分组到达了路由器R1,由于此时R1的输入队列已经满了,此时R1根据自己的分组丢弃策略将该分组丢弃,这是分组丢弃的情况。 分组失序:主机1向主机2发送了三个分组,但他们并未按照发送顺序到达主机2,最先发送的分组并未最先到达。 分组重复:主机1向主机2发送的分组由于某些原因在网络中滞留了,没有及时到达主机2,这可能导致主机1对该分组的超时重发,重发的发组到达了主机2,一段时间后,在网络中滞留的分组到达了主机2,造成了分组重复。

二、可靠传输实现机制

1.停止等待协议(SW)

收发双方基于互联网进行通信,而不是局限在一条点对点的数据链路。

  1. 纵坐标为时间,发送方给接收方发送数据分组,接收方收到后进行差错检测,若没有误码,则接收该分组,并给发送方发送确认分组,简称为ACK。
  2. 发送方收到对所发送数据的确认分组后,才能发送下一个数据分组。
  3. 假设这个数据分组在传输过程中出现了误码,接收方收到后进行差错检测,发现了误码,则丢弃了该分组,并且给发送方发送否认分组,简称为NCK。
  4. 发送方收到对所发送数据的否认分组后,就知道了之前自己所发送的数据分组出现了差错而被接收方拒绝,于是立刻重传该数据分组,因此发送方每发送完一个分组后,并不能立刻将这个数据分组从缓存中删除,只有在收到针对该数据分组的确认分组后,才能将其从缓存中删除。
  5. 发送方每发送完一个数据分组之后,就停止发送下一个数据分组,等待来自接收方的确认分组或否认分组 (停止等待协议SW)
  6. 若收到确认分组,则继续发送下一个分组
  7. 若收到否认分组,则重发之前发送的那个否认分组。
  8. 上述做法实现了发送方收到什么,接收方就收到什么,也就是所谓的可靠传输。

问题1:如果在数据传输过程中出现了数据丢失,该怎么办? 答:由于出现了数据丢失,接收方收不到数据分组,就不会发送ACK或NCK,如果不采取任何措施,发送方会处于等待ACK或NCK的状态,这时可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间,而仍然收不到ACK或NCK,则重传原来的数据分组,这叫超时重传超时重传.PNG 一般可将重传时间选为大于“从发送方到接收方的平均往返时间”

问题2:如果在发送方在等待确认分组(ACK)或否认分组(NCK)中出现了分组丢失,该怎么办? 答:使用超时重传和给确认分组和否认分组进行编号。

问题3:如果因为确认分组丢失,如何解决数据分组重复问题? 确认分组.PNG

捕获.PNG 注意:

  1. 接收端检测到数据分组有误时,将其丢弃并等待发送方超时重传,但对于误码率较高的点对点链路,为使发送方尽早重传,也可以给发送方发送NAK分组。
  2. 为了让接收方能够判断所接收到的数据分组是否是重复的,需要给数据分组编号,由于·等待协议的停等特性,只需要1个·比特信号就够了。
  3. 为了让接收方能够判断所接收到的ACK分组是否是重复de,需要给ACK分组编号,所用比特数量与分组编号所用的比特数量一样。但在数据据链路层一般不会出现确认分组ACK迟到的情况,所以对数据链路层实现停止-等待协议可以不用给ACK分组编号。
  4. 超时计数器设置的重传时间应该仔细选择,一般可将重传时间选为大于“从发送方到接收方的平均往返时间”

在数据链路层点对点的往返时间比较确定,重传时间好设定。 然而在运输层,由于端到端往返时间不确定,设置重传时间不容易。

  1. 当往返时间RTT远大于数据帧发送时延时(例如卫星链路),信道利用率极低。
  2. 若出现重传,则对于传送有用数据信息来说,信道利用率还要降低。
  3. 为了克服停止-等待协议信道利用率很低的特点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR。

信道利用率.PNG

停止等待.PNG

回退N帧协议

该协议在流水线传输的基础上,利用发送窗口可连续发送数据分组的个数。 使用停止-等待协议的发送方只能发送一个数据分组,而回退N帧协议的发送方可以发送5个数据分组。接收方的接收窗口Wr=1,与停止等待协议相同。 当序号落在发送窗口中的序号可以被连续发送,而不必等收到接收方相应确认分组后再发送。 无差错情况(没有出现比特错误/分组重复/分组失序/分组丢失): 发送方将落在窗口内的0~4号数据分组,依次连续发送出去,经过互联网的传输,正确到到达了接收方,接收方按序接受他们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组。0~4号确认分组正确到达发送方,发送方每接收一个确认分组,发送窗口就前向前滑动一个位置,新的序号落入了发送窗口,发送方就可以将收到确认的数据分组从缓冲中删除了。 回退.PNG 累计确认情况: 使用N帧回退协议的接收方不需要对收到的数据分组逐个发送确认,而是在收到几个数据分组后,对按序到达的最后一个数据分组发送确认。ACKn表示序号n及以前的所有数据分组都已正确接收了。 举例说明:

  1. 发送方将落在窗口内的0~4号数据分组,依次连续发送出去,经过互联网的传输,正确到达了接收方,接收方按序接收他们,当接收方收到0号和1号数据分组后,给发送法发送了一个累计确认ACK1,当接收完2~4号分组后,又给发送方发送累计确认ACK4。
  2. 假设ACK1在传输过程中丢失了,而ACK4正确到达了发送方,发送方接收ACK4后就知道了,序号为4及之前的数据分组已被接收方所接收,。于是将窗口向前滑动5个位置,新的序号落入发送窗口。发送方就可以将收到确认的数据分组从缓冲中删除了。接收方可以将已接收的数据分组交付给上层处理。
  3. 优点:(1)即使确认分组丢失,发送方也可能不必重传。

    1. 2)可以减小接收方的开销,减少网络资源的占用。
  4. 缺点:(1)不能向发送方及时反应出接收方已经正确接收的数据分组信息。

有差错情况:

  1. 发送方将落在窗口内的5~1号数据分组,依次连续发送出去,经过互联网的传输,正确到达了接收方.
  2. 假设5号的数据分组出现了误码,接收方通过检错码发现了错误。于是丢弃该数据分组,而后序到达的数据分组的序号与接收窗口中的序号不匹配,接收方同样不能接收他们,并对之前按序接收的最后数据分组进行确认,也就是发送ACK4,

有差错.PNG

  1. 每丢弃一个数据分组,就发送一个ACK4,这4个ACK4经过传输到达了发送方,但是发送方之前就接收过ACK4,当收到重复的ACK4时,就知道了之前发送的数据分组出现了差错,于是可以不等超时计数器超时,立刻进行重传,至于收到几个重复确认,由具体实现决定。

捕获.PNG

  1. 假设发送方收到4个重复的确认信息并不会立刻触发发送方立刻重传。一段时间后,超时计数器出现超时。发送方将发送窗口内已发送过的数据全部重传,在本例中,尽管序号为6、7、0、1的数据分组之前已正确的到达接收方,但是因为5号数据分组误码,后面序号的数据分组也不被接受,发送方还要重传这些正确到达的数据分组。
  2. 缺点:在通信线路信号不好时,回退N帧协议的信道利用率并不比停止-等待协议高。

假设.PNG

注意:发送方的窗口取值范围不能超过总序号,要不接受方无法分辨新、旧分组,进而会产生分组重复这种传输差错。 分组重复.PNG

总结

总结.PNG

习题

习题.PNG
1号的确认分组丢失了,但是已经收到了3号确认分组,说明1号已经被接受方接受了,这是根据N帧回退协议的优点:即使确认分组丢失,也可能不必重传对应得数据分组。

选择重传协议

捕获.PNG 总结: 捕获.PNG

习题

习题.PNG