计算机网络之可靠传输

可靠传输

3.4.1 可靠传输的基本概念

数据链路层的可靠传输

在上一文章中提到了使用差错检测技术(例如循环冗余校验 CRC),接收方的数据链路层就可以检测出帧在传输过程中是否产生了误码(比特错误)。那么检测出误码之后,又该如何处理这个问题呢?其实这取决于数据链路层向上层提供的服务类型:

  • 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
  • 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么

一般情况下,有线链路的误码率比较低,为了减小开销,不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。

无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提高可靠传输服务

值得注意的是:

  • 比特差错只是传输差错中的一种;
  • 从整个计算机网络体系结构来看,传输差错还包括分组丢失分组失序以及分组重复。这些传输差错,一般不会出现在数据链路层,而会出现在其上层。

其他层的可靠传输举例

可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输

可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求。

三种可靠传输的实现机制:

  • 停止-等待协议 SW
  • 回退 N 帧协议 GBN
  • 选择重传协议 SR

3.4.2 停止-等待协议 SW (Stop-and-Wait)

注意事项:

  • 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传,但对于误码率较高的点对点线路,为了使发送方尽早重传,也可给发送方发送 NAK 分组。
  • 超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”
    • 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
    • 然而在运输层,由于端到端往返时间非常不稳定,设置合适的传输时间非常不容易;
  • 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需 1 个比特编号就够了,即编号 0 和 1;
  • 为了让发送方能够判断所收到的 ACK 分组是否是重复的,需要给ACK 分组编号,所用比特数量与数据分组编号所用比特数量一样
    • 数据链路层一般不会出现 ACK 分组迟到的情况,因此在 数据链路层实现停止-等待协议可以不用给 ACK 分组编号

停止-等待协议的信道利用率:

3.4.3 回退 N 帧协议 GBN(Go-Back-N)

回退 N 帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送分组的数量,是一种连续 ARQ 协议。在协议的工作过程中发送窗口和接收窗口不断向前移动,因此这类协议又称为滑动窗口协议

由于回退 N 帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高

解释上一句话:回退 N 帧协议的接收窗口尺寸只能等于 1,因此接收方只能按序接收正确到达的数据分组。一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。

3.4.4 选择重传协议 SR(Selective Request)

由上一小节最后的分析,为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸不应再等于 1(而应大于 1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议

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