第三章、数据链路层
3.1、数据链路层概述
数据链路层在网络体系结构中所处的地位
链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换
节点。
数据链路(Data Link)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链
路。
数据链路层以帧为单位传输和处理数据
数据链路层的三个重要问题
封装成帧
差错检测
可靠传输
3.2、封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧头和帧尾中包含有重要的控制信息。
帧头和帧尾的作用之一是帧定界。
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
面向字节的物理链路使用字节填充(或字符填充)的方法实现透明传输。
面向比特的物理链路使用比特填充的方法实现透明传输。
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。
考虑到差错控制等多种因素,每种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU。
3.3、差错检测
实际上的通信链路都不是理想的,比特在传输的过程中可能会产生差错:1可能会变成0,而0也可能变成1,这称为比特差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER。
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
3.3.1、奇偶检测
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)。
如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码。
如果有偶数个位发生误码,则奇偶性不发生改变,不能检查出误码(漏检)。
3.3.2、循环冗余校验CRC
收发双方约定好一个生成多项式G(x);
发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;
接收方通过生成多项式来计算收到的数据是否产生了误码。
检错码只能检测出帧在传输过程中出现了差错,但并不能定位,因此无法纠正错误。
想要纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
在计算机网络中通常采用检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供是可靠传输服务还是不可靠传输服务。