3.4.1 可靠传输的基本概念
使用差错检测技术,例如循环冗余校验 CRC 接收方的数据链路层就可以检测出帧在传输过程中是否产生了误码,也就是出现比特错误。

如图所示,帧在传输过程中受到干扰,产生了误码。接收方的数据链路层通过帧尾中的帧检验序列 FCS 字段的值,也就是检错码,可以检测出帧中出现了比特差错。
比特差错的处理方式取决于数链路层向上层提供的服务类型
如何处理帧中出现的比特差错取决于数据链路层向上层提供的服务类型
那么接下来该如何处理差错?这取决于数据链路层向其上层提供的服务类型。
如果提供的是不可靠传输服务,则仅仅丢弃有误码的帧,其他什么也不做。
如果提供的是可靠传输服务,那就还要想办法实现发送端发送什么,接收端就收到什么。例如,接收方可以给发送方发送一个通知帧,告诉他之前发送的帧产生了误码,请重发发送方收到通知后,重发之前产生了误码的那个帧即可。
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务,即使出现了误码,可靠传输的问题由其上层处理。
然而对于无线链路,由于其容易受到干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
其他传输差错
比特差错只是传输差错中的一种。
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。
请注意此处我们将帧的称呼改为了分组,这意味着传输差错不仅仅局限于数据链路层的比特差错。
我们来举例说明,主机 H6 给主机 H2 发送的分组到达了路由器R5,由于此时 R5 的输入队列快满了,而我根据自己的分组丢弃策略将该分组丢弃,这是一种分组丢失的情况。

再来看分组失序的例子,主机 H6 依次给主机 H2 发送了三个分组,但他们并未按照发送顺序依次到达H2,也就是说最先发送的分组未必最先到达。

再来看分组重复的例子,主机 H6 给主机 H2 发送的分组由于某些原因在网络中滞留了,没有及时到达H2,这可能造成 H6 对该分组的超时重发。重发的分组到达 H2 一段时间后,滞留在网络中的那个分组又到达了H2,这就会造成分组重复的传输差错。

分组丢失、分组失序以及分组重复这些传输差错一般不会出现在数据链路层,而会出现在其上层。
因此,可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输服务。
其他各层的可靠传输服务(不局限于数据链路层)

例如,这是 TCPIP 的四层体系结构。网络接口层,通常也称为数据链路层。
如果网络接口层使用的是 802. 11 无线局域网,那么其数据链路层要求实现可靠传输。
如果网络接口层使用的是以太网,那么其数据链路层不要求实现可靠传输。
网际层中的 IP 协议向其上层提供的是无连接不可靠的传输服务。
运输层中的 TCP 协议向其上层提供的是面向连接的可靠传输服务,
运输层中的 UDP 协议向其上层提供的是无连接不可靠的传输服务。
最后需要提醒大家注意,可靠传输的实现比较复杂,开销也就比较大,是否使用可靠传输取决于应用需求。
本节小结
