在计算机网络的五层协议体系结构中,数据链路层承上启下,是连接物理层与网络层的关键环节。它解决了 "如何在不可靠的物理链路上可靠地传输数据" 这一核心问题。本文将基于湖科大教书匠的计算机网络微课堂内容,系统讲解数据链路层的基础知识,包括其基本概念、封装成帧机制和差错检测原理,帮助零基础读者快速掌握这一重要层次的核心内容。
一、数据链路层概述

1.1 数据链路层在网络体系结构中的地位
-
主机具有五层协议体系结构的所有层次,而路由器仅具有下面三层 (物理层、数据链路层、网络层)
-
主机之间的通信从数据链路层角度看,是由多段不同链路上的通信组成的
-
数据链路层以帧为单位传输和处理数据
1.2 链路与数据链路的区别
-
链路:从一个节点到相邻节点的一段物理线路
-
数据链路:在链路基础上,增加了控制数据传输的通信协议的硬件和软件
1.3 数据链路层的三个基本问题
这是数据链路层最核心、最基础的三个问题:
-
封装成帧:给上层交付的协议数据单元添加首部和尾部,使之成为帧
-
差错检测:检测数据在传输过程中是否产生了比特差错
-
可靠传输:确保发送方发送什么,接收方最终就能收到什么



1.4 点对点信道与广播信道
-
点对点信道:一对一的通信方式,如 PPP 协议使用的信道
-
广播信道:一对多的通信方式,如传统以太网和无线局域网使用的信道
1.5 广播信道的特殊问题
-
编址问题:需要在帧中添加目的地址和源地址,使接收方能判断帧是否发给自己
-
碰撞问题:多台主机同时发送数据时会产生信号碰撞
-
以太网采用CSMA/CD(载波监听多点接入碰撞检测) 协议解决碰撞问题
-
无线局域网采用CSMA/CA(载波监听多点接入碰撞避免) 协议
-
交换式局域网已基本取代共享式局域网,使用点对点链路和链路层交换机

二、封装成帧

2.1 封装成帧的定义与目的
-
定义:数据链路层给上层交付的协议数据单元添加首部和尾部,使之成为帧的过程
-
目的:在链路上以帧为单元传送数据,实现数据链路层的功能
-
典型帧格式:以太网 V2 MAC 帧、PPP 帧
2.2 帧定界的实现方法
帧定界是指接收方如何从物理层交付的比特流中提取出一个个完整的帧:
-
PPP 协议 :使用首部和尾部的标志字段(0x7E) 进行帧定界
-
以太网 V2:
-
物理层在 MAC 帧前添加 8 字节前导码,其中前 7 字节为前同步码 (使接收方时钟同步)
-
第 8 字节为帧开始定界符,表明后面紧跟着 MAC 帧
-
通过96 比特时间的帧间间隔来标识帧的结束,无需帧结束定界符
-
2.3 透明传输问题及解决方案
-
透明传输:数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样
-
问题:如果数据部分恰好包含了帧定界符,接收方会误认为帧提前结束
-
解决方案:
-
字节填充法(面向字节的链路):
-
每出现一个帧定界符或转义字符,就在其前面插入一个转义字符 (十进制值 27,即 0x1B)
-
接收方收到转义字符后,将其剔除,并将后面的字节作为数据处理
-
-
零比特填充法(面向比特的链路):
-
发送方对数据部分扫描,每 5 个连续的比特 1 后面插入一个比特 0
-
接收方将数据部分中每 5 个连续比特 1 后面的那个比特 0 剔除
-
-
2.4 最大传送单元 MTU 与传输效率
-
最大传送单元 (MTU):数据链路层协议规定的帧的数据部分的长度上限
-
传输效率:为了提高传输效率,应使帧的数据部分长度远大于首部和尾部的长度
-
首部和尾部是为了实现数据链路层功能而额外添加的开销


三、差错检测
3.1 比特差错与误码率
-
比特差错:比特在传输过程中,0 变成 1 或 1 变成 0 的现象
-
误码率 (BER):在一段时间内,传输错误的比特占所传输比特总数的比率
-
实际通信链路都不是理想的,比特差错不可避免

3.2 奇偶校验
-
原理:在待发送的数据后面添加一位奇偶校验位,使整个数据 (包括校验位) 中 1 的个数为奇数 (奇校验) 或偶数 (偶校验)
-
优点:实现简单
-
缺点:漏检率高,只能检测出奇数个位的误码,无法检测出偶数个位的误码
-
计算机网络的数据链路层一般不采用这种方法

3.3 循环冗余校验 CRC

-
原理:收发双方约定一个生成多项式,发送方基于待发送数据和生成多项式计算出冗余码,添加到数据后面一起传输;接收方通过相同的生成多项式验证数据是否出错
-
发送方操作步骤:
-
在待发送数据后面添加生成多项式最高次数个 0,构成被除数
-
将生成多项式各项系数构成的比特串作为除数
-
进行模 2 除法 (异或运算),得到的余数就是冗余码
-
冗余码长度与生成多项式最高次数相同,位数不够时前面补 0
-
-
接收方操作步骤:
-
将接收到的数据作为被除数,相同的生成多项式系数作为除数
-
进行模 2 除法,如果余数为 0,说明传输无差错;否则说明有差错
-
-
优点:漏检率极低,易于用硬件实现
-
应用:广泛应用于计算机网络的数据链路层,如以太网和 PPP 协议的 FCS 字段
3.4 检错码与纠错码的选择
-
检错码:只能检测出是否有差错,不能定位和纠正错误,开销较小
-
纠错码:可以纠正传输中的差错,但开销较大,在计算机网络中较少使用
-
数据链路层通常采用检错重传方式纠正差错,或直接丢弃出错的帧 (取决于提供的服务类型)



核心知识点汇总表格
|-------------|-----------|-------------------------------|--------------------------|------|
| 知识点分类 | 具体知识点 | 核心内容 | 关键细节 | 文档来源 |
| 数据链路层概述 | 体系结构地位 | 主机有五层,路由器有三层 | 数据链路层以帧为单位传输数据 | 文档 1 |
| | 链路与数据链路 | 链路是物理线路,数据链路是链路 + 协议软硬件 | 数据链路层解决 "如何在链路上传输数据" 的问题 | 文档 1 |
| | 三个基本问题 | 封装成帧、差错检测、可靠传输 | 这是数据链路层最核心的三个问题 | 文档 1 |
| | 信道类型 | 点对点信道和广播信道 | 广播信道需要解决编址和碰撞问题 | 文档 1 |
| | 碰撞解决协议 | CSMA/CD (以太网)、CSMA/CA (无线局域网) | 交换式局域网已取代共享式局域网 | 文档 1 |
| 封装成帧 | 定义与目的 | 给上层数据添加首部和尾部成为帧 | 首部和尾部包含控制信息 | 文档 2 |
| | 帧定界方法 | PPP 用标志字段,以太网用前导码 + 帧间间隔 | 以太网帧间间隔为 96 比特时间 | 文档 2 |
| | 透明传输 | 数据部分不能包含帧定界符的问题 | 字节填充法和零比特填充法 | 文档 2 |
| | 字节填充 | 插入转义字符 (0x1B) | 转义字符本身也需要转义 | 文档 2 |
| | 零比特填充 | 每 5 个连续 1 后插 0 | 接收方剔除 5 个 1 后面的 0 | 文档 2 |
| | MTU 与传输效率 | MTU 是数据部分长度上限 | 数据部分应尽可能大以提高效率 | 文档 2 |
| 差错检测 | 比特差错与误码率 | 比特传输错误的现象和比率 | 实际链路都存在比特差错 | 文档 3 |
| | 奇偶校验 | 添加一位校验位使 1 的个数为奇 / 偶 | 漏检率高,无法检测偶数位错误 | 文档 3 |
| | CRC 校验 | 基于生成多项式计算冗余码 | 发送方加冗余码,接收方验证余数是否为 0 | 文档 3 |
| | CRC 计算步骤 | 构造被除数、除数,模 2 除法求余数 | 余数长度等于生成多项式最高次数 | 文档 3 |
| | 检错与纠错 | 检错码只能检测错误,纠错码能纠正错误 | 数据链路层主要使用检错重传 | 文档 3 |
总结
数据链路层是计算机网络中非常重要的一层,它通过封装成帧、差错检测和可靠传输等机制,将不可靠的物理链路转换成对网络层来说可靠的数据链路。本文详细讲解了数据链路层的基本概念、封装成帧的实现方法和差错检测的核心原理,特别是零比特填充法和 CRC 校验这两个重点内容。
掌握这些基础知识,将为后续学习以太网、PPP 协议、数据链路层交换机等更高级的内容打下坚实的基础。在实际应用中,数据链路层的这些机制保证了数据在局域网和广域网中的可靠传输,是互联网能够正常运行的重要基石。