计算机网络之数据链路层概述
数据链路层概述
3.1 数据链路层概述
3.1.1 基本概念
链路:从一个节点到相邻节点的一段物理线路,而中间没有任何其他的交换节点。
数据链路:把通信协议的硬件和软件加到链路上,就构成了数据链路。
数据链路层以帧为单位传输和处理数据。
3.1.2 数据链路层需要处理的三个重要问题
- 封装成帧
- 差错检测
- 可靠传输
3.1.3 使用广播信道的数据链路层
- 共享式以太网的媒体接入控制协议 CSMA/CD
- 802.11 局域网的媒体接入控制协议 CSMA/CA
3.1.4 数据链路层的互连设备
- 网桥和交换机的工作原理
- 集线器(物理层互连设备)与交换机的区别
3.2 封装成帧
3.2.1 概念
概念:封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
在帧头和帧尾中包含有重要的控制信息。

帧头和帧尾的作用之一就是帧定界。

需要说明的是并不是每一种数据链路层协议的帧都包含有帧定界标志,例如“以太网 V2 的 MAC 帧”。那怎么区别各个帧呢?解决办法就是物理层会在每个帧前面加上前导码,另外,以太网还规定了帧间间隔时间。

3.2.2 透明传输
透明传输就是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。什么叫做“有限制”呢?举个例子,在上层交付的传输数据中如果有信息跟帧定界标志相同,那么这时候就可能不能正确的区分各个帧,所以我们说这种情况为“有限制”,不能称为透明传输。怎么解决这个问题?有一种办法是在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符。
- 面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。
- 面向比特的物理链路使用比特填充的方法实现透明传输。(例如每出现连续 5 个比特 1 就在后面插入一个比特 0)
3.2.3 最大传送单元
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,也就是最大传送单元 MTU(Maximum Transfer Unit)。

3.3 差错检测
3.3.1 概念
比特差错:实际的通信线路都不是理想的,比特在传输过程中可能会产生差错:1 可能会变成 0,而 0 也可能会变成 1,这就称为比特差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER(Bit Error Rate)。
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

上面两个协议的 FCS 都是用来差错检测的,让接收方的数据链路层检查在传输过程中是否产生了误码。
3.3.2 差错检测方式
奇偶校验
在待发送的数据后面添加 1 位奇偶校验位,使整个数据(包括所添加的校验位在内)中**”1”的个数**为奇数(奇校验)或者偶数(偶校验)。
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检);
- 由以上两点可以看出,奇偶校验的漏检率较高,所以一般不使用。
循环冗余校验 CRC(Cyclic Redundancy Check)
收发双方约定好一个生成多项式 G(x),发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;接收方通过生成多项式来计算收到的数据是否产生了误码;

- 检错码只能检测出帧在传输过程中出现了差错,但是不能定位差错,因此无法纠正错误。
- 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但是纠错码的开销比较大,因此在计算机网络中较少使用。
- 循环冗余校验 CRC 有很好的的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
- 在计算机网络中通常采用后面将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。