数据链路层概述
数据链路层在干什么
数据链路层是计算机网络的底层之一,它位于网络层下面、物理层上面。
它的核心任务是让相邻两台设备之间的通信变得可靠。
换句话说:
物理层只负责发电信号,但可能出错
数据链路层在物理层之上,加上一套封装、检测、重发的机制,让每一跳传得正确
局域网是很多主机共享一条广播信道的网络
互联网则是很多局域网通过路由器连起来
讨论数据链路层时,只关心同一个网络内的数据传输,不研究跨网络传输(网络层负责)
两种信道类型
数据链路层使用的信道有两种:
(1) 点对点信道(PPP)
就像两台电脑之间拉了一根专线
一对一通信
典型协议:PPP(Point-to-Point Protocol)
应用:拨号上网、两台路由器之间的串口线等
(2) 广播信道
一个信道上连了很多主机,任何人发都能被大家听见
比如早期以太网(用集线器Hub时)
为了防止大家同时说话导致冲突,要用CSMA/CD 协议来协调(Carrier Sense Multiple Access with Collision Detection,载波侦听多路访问/冲突检测)
数据链路层的几个共同问题
数据链路和帧
链路(link)的含义
链路是指从一个节点到相邻节点之间的一段物理线路,可以是有线的(铜线、光纤等),也可以是无线的。
它只表示物理连接,中间没有任何交换节点。
在计算机网络的整体通信路径中,数据从源主机到目的主机往往要经过多段链路连接在一起,因此链路只是整个路径的组成部分。
数据链路(data link)的含义
数据链路是一个更高层次的概念。
在一条物理链路上,要想可靠地传送数据,除了这条物理线路本身外,还必须配合必要的通信协议来控制数据的传输,这就形成了数据链路。
换句话说,数据链路 = 物理链路 + 必要的通信控制协议(由硬件或软件实现)
这些控制协议通常由网络适配器来实现。
适配器既包括硬件,也包括软件,它同时完成物理层和数据链路层的功能。
逻辑链路的提法
有的教材中将链路分为:
物理链路:即真实的物理传输通道
逻辑链路:在物理链路基础上加上必要的通信协议
因此逻辑链路实际上就是数据链路
在早期通信术语中,数据链路层的通信协议又称为通信规程
所以规程和协议在这一层中是同义词
数据链路层的协议数据单元
数据链路层传输的基本单位称为帧(Frame)
它的作用是:
-
将网络层传下来的数据(在互联网中一般是 IP 数据报)加上首部和尾部封装成帧
-
通过物理链路发送
-
在接收端从帧中提取出原始的数据报交给网络层
在网络层的术语中,数据单元叫IP 数据报或分组
在数据链路层,数据单元就叫帧
点对点信道下的三层模型
为了便于说明点对点信道的数据链路层通信,可以采用如图 3-3(a) 所示的三层模型:
上层:网络层
中层:数据链路层
下层:物理层
在这种模型中,无论是一段链路内的通信(主机---路由器之间),还是两个节点之间的通信(A 与 B),都遵循相同的三层结构

图 3-3(b) 水平通信是一个逻辑上的抽象模型
点对点信道下数据链路层的主要任务
在这种模式下,节点 A 与节点 B 的数据链路层通信需完成以下工作:
- 封装成帧
节点 A 的数据链路层将网络层传下来的 IP 数据报添加首部和尾部,形成帧。
- 传输与接收
节点 A 把封装好的帧发送给节点 B 的数据链路层。
- 差错检测与交付
节点 B 的数据链路层检查接收到的帧是否正确:
若无差错,则从帧中取出 IP 数据报并交付其网络层
若检测到错误,则丢弃该帧
数据链路层与物理层的关系
数据链路层不关心信号在物理介质上如何传输,只需确保帧能正确到达
因此我们可以把数据链路层看成在物理层之上、控制帧在相邻节点之间传递的逻辑层
从整体上看,数据的传输好像是沿着水平的数据链路层通道从节点 A 到节点 B
三个基本问题
三个基本问题概述
虽然数据链路层的协议种类繁多,但它们都必须解决三个共同的基本问题:
-
封装成帧
-
透明传输
-
差错检测
封装成帧
封装成帧是指在一段要传输的数据前后分别添加首部(Header)和尾部(Trailer),这样构成的整体就叫帧(Frame)
发送端负责在数据前后加上首、尾标记
接收端根据这些标记区分帧的起始和结束位置,从而能从比特流中识别出一帧的范围
换句话说,帧是数据链路层的数据传输单位,它由帧首部 + 数据部分 + 帧尾部三部分构成
帧的构成与意义
如图 3-4 所示,所有互联网中的数据传输都是以分组为单位进行的(即网络层的 IP 数据报)。
当 IP 数据报被交给数据链路层时,链路层会把它作为数据部分,并在前后加上首部和尾部,从而构成一个帧

帧的组成:
首部:位于帧的开头,包含控制信息,如地址、帧类型、同步位等
数据部分:封装自上层(网络层)的数据报
尾部:位于帧的末尾,通常包含帧结束标志以及差错检测信息(如 CRC 校验码)
因此,一个完整帧的总长度 = 首部长度 + 数据部分长度 + 尾部长度
帧的确定与帧定界
为了让接收端能准确知道一帧的起止位置,必须进行帧定界
首部和尾部中的特殊标记作用就是确定帧的界限,也称为帧界定符
此外,首部和尾部中还可能包含多种控制信息,用于帧编号、确认、错误控制等
在数据发送时,信号是从帧首开始发送的
每种数据链路层协议对帧首部和尾部的格式都有明确定义
帧的长度与 MTU
为了提高传输效率,应尽量让数据部分的长度较大,以减少首部和尾部的相对开销
但每种链路层协议都会对帧的最大长度做出限制
数据链路层中,数据部分的最大长度称为:
最大传送单元(MTU, Maximum Transfer Unit)
不同的链路类型有不同的 MTU 值。例如:
以太网常见 MTU 为 1500 字节
PPP 链路可由双方协商确定
如图 3-4 所示,帧的首尾标识、数据部分以及与 MTU 的关系都清晰地展示了封装成帧的结构

帧定界的实现方法
在一些早期通信协议中,帧定界可通过插入特定的控制字符实现
如图 3-5 所示:
在帧的最前面加入一个特殊的开始符 SOH(Start of Header)
在帧的最后加入一个特殊的结束符 EOT(End of Transmission)
这样,接收端只要在比特流中检测到 SOH 和 EOT,就能知道帧的起止位置
控制字符说明:
ASCII 编码是 7 位编码,共有 128 个字符(其中 95 个可打印,33 个为控制字符)
SOH 和 EOT 就是控制字符中的两个
SOH 的十六进制代码为 01(即二进制 00000001)
EOT 的十六进制代码为 04(即二进制 00000100)
这些控制字符不代表具体字母"S""O""H"或"E""O""T",而仅仅作为标志位存在
这些符号帮助接收端识别帧的边界,从而能正确地"分帧"

帧定界符的作用举例
当数据在传输中出现差错时,帧定界符的重要性更加突出
例如:
如果发送端在发送一个帧的过程中突然出故障中断,然后恢复后重新开始发送
接收端在收到数据时会发现:
前半段数据中只有 SOH 而没有 EOT,说明帧尚未结束,这是一个不完整的帧,必须丢弃
后半段数据中出现完整的 SOH 和 EOT,则说明这是一个正确完整的帧,应该接收
因此,帧定界符的存在使得接收端即使遇到传输异常,也能区分哪些数据是完整的帧、哪些是错误片段
透明传输
透明传输产生的原因
在前面讲的封装成帧中,我们知道:
为了区分帧的起止位置,系统采用了专门的帧定界符号,例如:
SOH(Start Of Header)表示帧首开始
EOT(End Of Transmission)表示帧尾结束
这些符号是专用的控制字符,具有特殊意义
因此,在传输的数据中不允许出现与帧定界控制字符相同的比特组合
如果出现,就会引起错误的帧界定,造成接收方误判帧边界
为什么要透明
在大多数情况下,如果帧中传输的是普通的文本数据(例如键盘输入的 ASCII 字符),
这些文本的内容不会包含像 SOH、EOT 这样的控制字符,因此不会出问题。
这种情况下,不管用户输入什么字符,都能被正确传输,我们称这种传输是透明的。
透明传输的含义是 任何数据都能在链路上传输,而不会被链路层错误地解释为控制信息
透明传输问题出现的情形
如果传输的数据并不是普通的文本,而是二进制文件(例如可执行程序、图像文件等),情况就不同了。
这时,数据的某些字节可能恰好与控制字符的编码相同(例如 SOH 或 EOT),
那么接收端的数据链路层就会误认为遇到了帧的边界,错误地结束一帧。

透明的真正含义
透明这个词本身非常形象:
它表示一个实际存在的事物,看起来却好像不存在。
比如你看穿一块完全透明的玻璃,就好像它不存在一样。
在数据链路层中,透明传输表示链路层对要传送的数据不加干扰、不做解释,不论数据中出现什么比特组合,都能正确传过去。
换句话说,数据链路层不关心数据的内容,它只负责把数据完整地、原样地送到对方。
解决透明传输问题的方法(字节填充法)
为了保证透明传输,必须设法让数据中的控制字符不被误判为帧定界符
(1) 基本思想
当发送端在数据部分发现出现了与帧定界符相同的控制字符(SOH 或 EOT)时,就在它前面插入一个转义字符(ESC, Escape)
ESC 的十六进制编码是 1B(二进制 00011011)
这表示后面这个字符虽然和控制符一样,但它不是控制含义,只是普通数据
接收端在收到帧时:
-
识别出 ESC
-
删除 ESC
-
把后面的那个字符恢复为正常数据内容
这样,数据部分即使出现 SOH、EOT,也不会被误当作帧定界符
这种做法称为:字节填充法或字符填充法
(2) ESC 自身出现在数据中怎么办?
如果数据中本身也出现了 ESC,为了避免接收端误删,发送端要在原来的 ESC 前再加一个 ESC(即发送 "ESC ESC")
接收端收到连续两个 ESC 时,删除前一个,保留后一个。

差错检测
通信中误码的不可避免性
在实际通信链路中,传输信号不可能完全理想
在比特传输过程中,某些比特有可能发生反转(1 变成 0 或 0 变成 1),这就叫做比特差错
比特差错是最基本的一类差错形式。它产生的原因可能是信道噪声、干扰、电磁波衰减等。
为了衡量传输质量,引入了一个指标:
误码率 BER(Bit Error Rate):
表示平均每传输多少个比特会出错一次。
例如 BER = 10⁻⁶,表示平均每传输 10⁶ 个比特中有 1 个出错。
误码率越低,信道质量越好。
然而,无论通信系统设计得多么完善,误码率总不会完全为零。
因此,必须在数据链路层采取差错检测措施,以便识别并尽量减少传输错误。
差错检测的意义与方法
在计算机网络的链路层中,最常用的检测方法是:
循环冗余检验(CRC, Cyclic Redundancy Check)
CRC 通过在每个帧后附加一段检验码,来帮助接收方判断帧在传输过程中是否出现错误。
这段检验码称为:
FCS(Frame Check Sequence,帧检验序列)
CRC 检验的原理(以二进制模 2 运算为基础)
(1) 发送端的处理过程
假设要发送的数据为一串比特:M = 101001
设每组数据长度为 k 位(此例中 k = 6)
我们选择一个生成多项式 P ,它对应的比特序列有 (n+1) 位
在本例中:P=1101
即 P 的位数为 4,则 n = 3
CRC 检验的基本思想是:
-
让数据 M 乘以 2ⁿ(即在末尾加上 n 个 0),得到一个新的比特串
-
用生成多项式 P 对该比特串执行模 2 除法
-
得到的余数 R(长度 n 位)就是FCS 校验序列
最后,发送端将 R 附加到 M 后面,构成一个完整的帧进行发送
发送的数据位总长度为 (k + n)
(2) CRC 运算示例
按照上述规则,我们计算:
M = 101001,P = 1101
即:M×2^3 = 101001000
用 P 除以 M×2³(模 2 运算,即加法和减法都按异或规则),如图 3-8 所示:
模2运算(异或)相同为0,不同为1
步骤 | 被除数(取前 4 位) | 除数(P) | 结果 |
---|---|---|---|
第1步 | 1010 ÷ 1101 → 得1 | 余 111 | ... |
... | 按步骤继续 | ... | 最终余数 R = 001 |

这 3 位余数就是 FCS(帧检验序列)
于是发送的完整帧为:
101001+001=101001001101001 + 001 = 101001001101001+001=101001001
接收端的 CRC 检验过程
接收端在收到帧后,按照相同的生成多项式 P 对整个收到的比特串(数据 + FCS)进行模 2 除法
若余数 R = 0,表示该帧在传输过程中无差错
若R ≠ 0,则说明帧中某些比特发生错误
例如在上面的例子中:
接收方收到 101001001,用同样的 P = 1101 进行检验,若运算结果 R = 0,则接收该帧;否则丢弃
CRC 的数学表达形式
CRC 检验可用多项式形式来表示:
设生成多项式为:
P(X)=x^3+x^2+1
对应的比特序列就是 1101
CRC 检测的效果与意义
CRC 检测并不能纠正错误,只能检测错误
但由于 CRC 检测算法设计得极为严密,它漏检的概率极小(一般低于 10⁻¹²)
因此,凡是通过 CRC 检测的帧,我们认为它几乎可以肯定是无差错的
这种机制被称为无差错接收
即凡是被接收端数据链路层接受的帧,我们认为其在传输过程中没有发生比特差错。
若帧中有错误,它会被 CRC 检测出并丢弃。
CRC 检测与可靠传输的关系
需要特别强调的是,CRC 只能保证帧内无比特错误,不能保证帧一定到达,也不负责重传。
换句话说,若帧被检测出错误,会被直接丢弃;若帧被正确接收,就认为这一帧无差错。
但 CRC 并不能保证帧一定成功传达给对方。
可靠传输需要更高层协议通过确认(ACK)和重传机制来实现。
因此,无比特差错 ≠ 无传输差错
传输差错的类型
除了比特级差错,还有更复杂的帧级差错,主要包括三种:
帧丢失(Loss)
某一帧未能到达接收方。
例:发送了 [#1]、[#2]、[#3],只收到 [#1]、[#3],[#2] 丢失。
帧重复(Duplicate)
某一帧被接收方收到多次。
例:[#2] 被重复接收。
帧失序(Out of Order)
多帧传输顺序被打乱。
例:[#1][#3][#2]。
这些属于传输差错,不是比特差错。
点对点协议 PPP
PPP 协议的背景
在早期通信线路质量较差的年代,为了在数据链路层实现可靠传输,曾经广泛使用一种协议叫 HDLC(高级数据链路控制,High-Level Data Link Control)
HDLC 提供可靠的面向比特的数据链路传输功能,但结构相对复杂。
随着技术发展,通信线路质量显著提高,不再需要如此复杂的控制机制。
于是,一个更简单但通用性强的协议即 PPP(点对点协议)被设计出来,用于在两点之间建立直接的链路连接。
如今,PPP 是使用最广泛的数据链路层协议之一,特别是在用户主机与 ISP(互联网服务提供商)之间的连接中,PPP 是最常用的链路协议。
PPP 协议的应用场景
在互联网接入中,普通用户要连接到 ISP 才能访问互联网。
用户计算机与 ISP 之间的链路就使用 PPP 协议,如图 3-9 所示:

PPP 协议由 IETF(Internet Engineering Task Force,互联网工程任务组)在 1992 年制定,
经 1993、1994 年修订,于 1994 年正式成为互联网的标准协议(RFC 1661, STD 51)
PPP 协议应满足的设计需求
IETF 在设计 PPP 协议时提出了若干核心需求【RFC 1547】,如下:
(1) 简洁性
PPP 要求结构简单、操作方便。
因为互联网体系中,复杂部分由 TCP 负责可靠传输,而链路层只需保证帧的正确传递。
PPP 不提供流量控制,也不需要复杂的状态维护,只需检测并丢弃错误帧。
这种简洁是 PPP 设计的首要原则。
(2) 封装成帧
PPP 必须规定帧的格式,以便接收方能够准确地找到帧的起始和结束。
也就是说,PPP 需要定义帧定界符(起始和结束标志),从而把 IP 数据报封装成帧。
(3) 透明性
PPP 必须确保传输过程中的透明性。
即便数据部分恰好出现了与帧定界符相同的比特组合,也不能引起误判。
为此,PPP 采用了字节填充等机制来实现透明传输。
(4) 多种网络层协议
PPP 必须支持在同一条物理链路上传输多种网络层协议的数据。
例如,一条 PPP 链路可以同时传输来自 IP、IPX等不同网络层协议的数据报。
(5) 多种类型链路
PPP 不仅要支持多种网络层协议,还应能在多种物理链路上运行。
例如:
串行异步线路(电话拨号)
同步专线
光纤、电缆、无线电、交换线路等
PPP 的设计必须具有良好的适应性,以便在各种链路上都能工作。
例如,1999 年 ADSL 普及后,PPP 还衍生出 PPPoE(PPP over Ethernet) 协议,即在以太网上运行的 PPP。它是宽带拨号上网(ADSL)的典型实现协议。
(6) 差错检测
PPP 必须对接收的帧进行差错检测(通常使用 CRC 校验)
如果检测到差错,就丢弃该帧而不做重传。
因为 PPP 的主要任务是提供无差错的帧交付,而不是负责可靠传输。
可靠传输由上层 TCP 协议完成。
(7) 检测连接状态
PPP 要能检测链路状态是否正常。
当链路断开或恢复时,PPP 必须能在几秒内检测出变化,以便重新建立或终止连接。
(8) 最大传送单元(MTU, Maximum Transfer Unit)
PPP 必须定义链路层帧中数据部分的最大长度。
这个 MTU 用于保证链路层之间的互操作性。
如果上层数据报超过此长度,PPP 会丢弃该数据并通知上层协议。
注意:这里的 MTU 是指数据部分最大长度,而不是整个帧的总长度。
(9) 网络层地址协商
PPP 必须能够在链路建立时协商网络层地址(例如 IP 地址)
因为当用户拨号接入 ISP 时,用户通常并不知道自己将被分配哪个 IP 地址。
PPP 需要通过地址协商机制(Network Control Protocol, NCP)完成这一配置。
(10) 数据压缩协商
PPP 协议应允许通信双方协商是否启用数据压缩,以提高传输效率。
但压缩算法本身不在 PPP 的标准化范围内。
PPP 协议的组成结构
PPP 协议包含三个主要组成部分:
(1) 封装方法
PPP 提供一种封装 IP 数据报的方法,用于在串行链路上进行传输。
PPP 支持:
异步串行链路(普通电话线)
同步串行链路(高速专线)
封装后的 IP 数据报就是 PPP 帧的信息部分,受最大传输单元 MTU 限制。
(2) 链路控制协议 LCP(Link Control Protocol)
LCP 负责建立、配置、测试和管理数据链路连接。
通信双方通过 LCP 协商一系列参数,例如最大帧长、是否使用压缩、认证方式等
RFC 1661 定义了 11 种类型的 LCP 控制报文(例如建立、配置、终止、检测等)
(3) 网络控制协议 NCP(Network Control Protocol)
NCP 是一组协议的集合,每一种 NCP 对应一种网络层协议。
例如IP 的控制协议(IPCP)、OSI 的网络层控制协议、DECnet、AppleTalk 等协议的 NCP
NCP 负责在链路建立后,为上层网络层配置必要的参数(例如 IP 地址)
PPP 的工作流程
PPP 连接通常经历以下几个阶段:
链路建立阶段:通过 LCP 协商链路参数
认证阶段(可选):验证用户身份
网络层配置阶段:通过 NCP 协商 IP 地址
数据传输阶段:传输封装在 PPP 帧中的 IP 数据
链路终止阶段:释放资源,断开连接
PPP 协议的帧格式
PPP 协议在数据链路层中使用帧(Frame)作为数据传输的基本单位。
每一帧包括首部、信息部分和尾部。
PPP 帧结构如图 3-10 所示

各字段的含义
PPP 帧由首部(4 个字节)和尾部(2 个字节)组成。首部中依次包含:
标志字段 F、地址字段 A、控制字段 C、协议字段。
尾部则包含 FCS(帧检验序列) 和结束标志字段 F。
(1) 标志字段 F(Flag)
作用: 标志帧的开始和结束。
字段值: 规定为 0x7E(十六进制,二进制为 01111110)
说明:
一个标志字段表示帧的起始或结束
当连续两个帧相邻时,中间只需要一个标志字段即可(上一个帧的结束标志,同时作为下一个帧的起始标志)
若出现连续的两个标志字段,则表示中间为空帧,应当被丢弃
(2) 地址字段 A(Address)
字段值: 固定为 0xFF(二进制 11111111)
说明:
该字段在 PPP 中并没有携带有效的地址信息,仅用于保持与早期 HDLC 帧结构的兼容性。
尽管标准中保留了它,但实际上 PPP 的点对点链路通信并不需要物理地址标识。
(3)控制字段 C(Control)
字段值: 固定为 0x03(二进制 00000011)
说明:
与 HDLC 一样,控制字段理论上用于指示帧类型(例如信息帧、监督帧、无编号帧),
但在 PPP 协议中始终固定为 0x03
目前尚未对该字段进行其他用途扩展,因此它只是一个占位符字段。
(4) 协议字段(Protocol)
长度: 2 字节
作用: 指明信息部分封装的上层协议类型
常见取值:
0x0021:表示信息部分为 IP 数据报
0xC021:表示信息部分为 LCP(链路控制协议) 数据
0x8021:表示信息部分为 NCP(网络控制协议) 数据
因此,PPP 协议不仅能传输网络层的 IP 数据报,还能用于链路控制与配置协商。
(5) 信息字段(Information Field)
内容: 承载来自上层的实际数据(例如 IP 数据报)
长度: 可变,但最大不超过 1500 字节。
这个限制即为 PPP 的 MTU(Maximum Transfer Unit,最大传送单元)
说明:
信息字段可以是任何上层协议的数据单元,PPP 会在其前后加上帧头和帧尾。
若使用压缩或加密技术,信息字段的内容会相应变化,但格式结构不变。
(6) 帧检验序列 FCS(Frame Check Sequence)
作用: 用于差错检测。
长度: 2 字节(16 位 CRC 校验)
说明:
FCS 由发送端根据前面所有字段(除了首尾标志字段)计算得到。
接收端收到帧后,重新计算 CRC 值,与 FCS 比较:
若一致 → 无差错
若不一致 → 丢弃该帧
PPP 协议规定使用 CRC-16 算法(多项式为 x¹⁶ + x¹⁵ + x² + 1)
字节填充
产生原因
PPP 在使用异步传输方式时,可能出现透明性问题:
即信息字段中若出现与标志字段(0x7E)相同的比特组合,
接收方会误认为是帧结束,从而截断数据。
为解决这一问题,PPP 使用字节填充法,
通过在数据中添加转义字符来避免混淆。
转义字符被定义为 0x7D(二进制 01111101)
字节填充规则(RFC 1662 规定)
当 PPP 使用异步传输时,采用以下三条规则对信息字段进行填充:
(1) 若出现 0x7E(标志字符)
把 0x7E 改写为两个字节:0x7D 0x5E
(2) 若出现 0x7D(转义字符本身)
把 0x7D 改写为两个字节:0x7D 0x5D
(3) 若出现 ASCII 控制字符(小于 0x20)
例如 0x03,把 0x03 改写为两个字节:0x7D 0x23
PPP的实际规则是异或 0x20
比如发送方发送转义序列 0x7D 0x5E(因为 0x7E XOR 0x20 = 0x5E)
字节填充的特点与处理方式
发送端在发送前进行字节填充,使数据中不再出现任何与标志或转义符相同的比特序列。
接收端在收到数据后执行相反的解填充操作,恢复原始信息。
字节填充会略微增加数据长度,但能有效保证帧边界识别的正确性。
零比特填充
使用场景与基本概念
PPP 协议不仅可以用于异步串行链路(逐字节传输),
也可以应用于高速的 SONET/SDH(同步光纤网络/数字同步网)链路,在这种情况下,链路是同步传输的,即比特流连续发送,而不是一字节一字节地独立传输。
在同步传输中,PPP 协议不能再使用字节填充的方法,因为比特是连续的,没有固定的字节边界。因此,PPP 协议在这种同步场景下采用一种新的透明传输技术即零比特填充
它是一种面向比特的填充方法,用来避免比特序列中误出现 PPP 标志字段 Flag(01111110)
零比特填充的工作原理
(1) 发送端处理过程
发送端在传输前,会对整帧的信息部分进行扫描(通常由硬件自动完成,软件实现也可以但较慢)
基本规则:每当检测到 5 个连续的 1 时,就自动插入一个 0
这样,填充后的比特流中永远不会出现 6 个连续的1,
因此不会与帧定界符(Flag 字段 01111110)相混淆。
也就是说,标志字段 F = 01111110 是 PPP 帧边界的唯一标志,通过零比特填充,可以确保帧内的数据比特流不会伪造出这样的模式。
(2) 接收端处理过程
接收端接收到比特流后,首先根据标志字段 F (01111110) 判断帧的起始和结束位置。
随后再对帧内部的数据部分执行反向处理:
每当检测到 5 个连续的 1 后紧跟一个 0,就将该 0 删除(即去掉插入的填充位),从而恢复出原始的信息比特流。
这个过程完全对称,既能确保透明传输,又不会误将数据中的比特模式识别为帧边界。
透明传输与错误防护
通过这种5 连 1 插 0的机制,PPP 协议在同步链路上传输时能够实现完全透明:
在帧的数据比特流中可以出现任意比特组合
确保不会出现与标志字段 F (01111110) 相同的比特模式
接收端能够正确识别帧边界,不会产生误判。
这种方法的优点是:
硬件效率高(通常由同步收发器自动完成,不增加显著延迟)
适用于高速链路(例如 SONET/SDH、E1/T1、光纤等)
保持比特级同步性,适合连续比特流传输

PPP 协议的工作状态
PPP 协议的主要任务是:
在用户主机与 ISP(网络服务提供商)之间建立、维护并最终释放一条可靠的数据链路。
这条链路在逻辑上属于数据链路层,但其建立与终止过程需要与物理层和网络层密切配合。
PPP 工作总体流程概述
当用户通过拨号或其他方式与 ISP 建立物理连接后,
PPP 协议就会开始运行。PPP 链路的运行过程主要分为以下几个阶段:
-
链路静止:无物理连接,链路未建立
-
链路建立:建立物理连接,并使用 LCP 协商链路参数
-
鉴别:可选阶段,对用户身份进行验证
-
网络层协议:使用 NCP 协商网络层参数(如 IP 地址)
-
链路打开:链路可进行数据传输
-
链路终止:链路关闭并释放资源,回到静止状态
这一过程如图 3-12 所示
PPP 状态图详解

(1) 链路静止状态
表示此时用户主机和 ISP 之间没有物理连接。
在拨号之前、断线之后,PPP 均处于该状态。
(2) 物理连接建立 → 链路建立状态
当用户发起拨号连接,调制解调器检测到载波信号后,物理层连接建立,PPP 进入链路建立状态。
此时,PPP 的 LCP(Link Control Protocol,链路控制协议) 开始工作,用于在链路两端协商链路参数。这称为 LCP 配置协商。
(3) LCP 配置协商
双方会发送一系列 LCP 配置请求帧
每个请求帧都包含了想要设置的链路参数。
对方收到请求后,会发送以下四种响应帧中的一种:
帧类型 | 名称 | 含义 |
---|---|---|
Configure-Ack | 配置确认帧 | 对方接受所有选项 |
Configure-Nak | 配置否认帧 | 理解选项但不同意 |
Configure-Reject | 配置拒绝帧 | 无法识别或拒绝选项 |
Terminate-Request / Terminate-Ack | 终止帧 | 协商失败或中止 |
LCP 协商的内容包括:
最大帧长度(MTU)
是否启用鉴别协议(PAP 或 CHAP)
是否使用压缩
以及链路上所需的控制参数
协商成功后,即建立了 LCP 链路,PPP 进入下一阶段。
(4) 鉴别阶段
如果 ISP 要求用户验证身份,则 PPP 进入鉴别状态。
在这一阶段,PPP 使用 LCP 协商好的鉴别协议子协议来执行身份验证:
PAP(Password Authentication Protocol):密码认证协议
CHAP(Challenge-Handshake Authentication Protocol):握手质询认证协议
PAP 工作方式:
用户端发送用户名和密码
ISP 端进行校验
若失败,系统允许用户重试数次,否则终止连接
CHAP 工作方式:
服务器发出一个随机数挑战
客户端使用密码计算哈希响应
服务器验证结果
验证失败则终止连接,成功则进入下一阶段
如果使用 PAP,认证过程简单但安全性较低
如果使用 CHAP,安全性更强,因为密码不会明文传输
若认证失败,则进入链路终止状态
若认证成功,则进入网络层协议状态
(5) 网络层协议协商阶段
在该阶段,PPP 的两个端点使用 NCP(Network Control Protocol,网络控制协议) 协商网络层的配置参数。NCP 可以支持多种网络层协议,如:
网络层类型 | 对应 NCP 协议 |
---|---|
IP 协议 | IPCP(IP Control Protocol, 协议字段 0x8021) |
OSI 网络层 | OSINCP |
DECnet | DNCP |
AppleTalk | ATCP |
例如,当 PPP 承载 IP 协议时,
就会使用 IPCP 协议 为用户分配一个 IP 地址。
此时,ISP 通常为拨号用户临时分配一个 IP 地址。
这样用户的个人计算机就成为互联网上的一个节点。
(6) 链路打开状态
当网络层配置完成后,PPP 链路进入链路打开状态。
此时双方可以开始正常传输数据包。
PPP 链路两端可以:
互相发送 LCP 回送请求帧
响应 LCP 回送应答帧
用于检测链路质量是否正常
(7) 链路终止状态
当数据传输结束或任意一方请求断开连接时,发送方会发送 LCP 终止请求帧,对方回应 LCP 终止确认帧,随后链路进入链路终止状态。
此时,LCP 释放数据链路层资源,NCP 释放网络层资源,最终断开物理连接,回到链路静止状态。
使用广播信道的数据链路层
局域网(LAN, Local Area Network)是计算机网络体系结构中的重要组成部分。
它使用广播信道实现多点通信,即一条信道可以被多个站点共享。
广播信道意味着:
多个用户设备连接在一条共享传输介质上,任何一个站点发送的信号都能被所有站点接收到。因此,局域网的关键问题之一是如何合理、公平地共享这一公共通信信道。
局域网的数据链路层
局域网的基本特点
局域网最显著的特征是:
网络为单个单位(如学校、企业、实验室)所拥有,地理范围较小,且站点数量有限。
在局域网最早出现的年代(20世纪70年代),它比广域网(WAN)拥有更高的数据速率和更低的误码率。如今随着光纤通信技术的发展,这种差异在物理性能上已缩小,但在管理方式、覆盖范围、应用场景上仍有明显区别。
局域网的主要特点
1. 具有广播功能
任何一个站点都可以向网络中所有站点发送消息;
所有站点都能接收到该广播信号。
2. 便于系统扩展与灵活配置
局域网中的站点数量、位置变化灵活,可随时增加或调整。
3. 系统可靠性高
局域网设备相对简单,距离短、干扰少,因此可靠性、可用性和生存性都较好。
局域网的拓扑结构分类
根据物理连接方式不同,局域网常见拓扑结构包括三种:
拓扑类型 | 结构特点 | 示例说明 |
---|---|---|
星型网 | 各工作站通过集线器或交换机集中连接 | 现代以太网的主流结构(图 3-13(a)) |
环形网 | 各站点形成闭合环,数据沿单方向传输 | 典型如早期的令牌环网(图 3-13(b)) |
总线网 | 所有工作站共用一条总线,通过匹配电阻收发信号 | 传统以太网最早采用的结构(图 3-13(c)) |

广播信道共享的基本问题
在广播型局域网中,所有用户共享同一信道。
因此必须解决一个核心问题:
如何让多个用户合理、高效地共享通信信道资源,而不互相干扰?
这一问题的解决方法统称为多路访问控制,
在物理意义上即介质访问控制(MAC, Medium Access Control)
根据分配方式的不同,分为两大类:
静态信道划分
动态媒体接入控制
(1) 静态信道划分
这种方式将通信信道在时间、频率或码上事先分配给各用户,即每个用户拥有固定的通信资源,不会发生冲突。
常见的划分方式包括:
频分复用
时分复用
波分复用
码分复用
这种方法的优点是简单、无冲突,但缺点也明显:
资源利用率低(若用户暂不通信,其分配信道被浪费)
成本高,不适合用户数多、传输突发的局域网环境
因此,静态划分常用于广域网,不适合局域网。
(2) 动态媒体接入控制
动态控制又称为多点接入,其思想是信道并不固定地分配给用户,而是按需竞争使用。
根据用户发送权限的不同,可分为两种类型:
(1)随机接入
定义:所有用户都可在任意时刻发送数据
问题:若两个或多个用户同时发送,信号会在共享介质上发生碰撞
后果:冲突导致信息失效,必须重发
解决办法:需要专门的冲突检测与避免机制。
这类协议的典型代表就是以太网采用的 CSMA/CD(载波监听多路访问/冲突检测) 协议,
是局域网中最经典的随机接入机制。
(2)受控接入
定义:用户不能随意发送,必须根据一定控制规则获得发送权
控制方式:
集中控制:由中央控制站轮询各终端,称为多点线路探询
分散控制:使用令牌(Token)在节点间传递,节点获得令牌后才能发送数据
典型代表是:
令牌环网
令牌总线网
受控接入方式避免了冲突,但实现较复杂、控制开销大,因此在现代以太网中较少使用。
以太网的两个主要标准
(1) 起源与发展
以太网(Ethernet)由 Xerox 公司 Palo Alto 研究中心(PARC)于 1975 年研制成功。
早期以太网是一种基带总线型局域网,数据速率仅 2.94 Mbit/s,使用无源同轴电缆传输信号。
以太(Ether)一词源自历史上传播电磁波的介质概念。
1976 年,Metcalfe 和 Boggs 发表论文提出完整以太网思想
1980 年 9 月,DEC + Intel + Xerox(DIX) 三家公司联合制定了第一个以太网规范:
DIX Ethernet V1(速率 10 Mbit/s)
1982 年发布改进版:
DIX Ethernet V2(第二版)
它成为世界上第一个局域网产品的工业标准。
(2) IEEE 802.3 标准
1983 年,IEEE 成立 802 委员会,专门制定局域网标准。
其中的 IEEE 802.3 工作组 制定了第一个以太网标准:
IEEE 802.3(速率 10 Mbit/s)
它在帧结构上做了些调整,但基本兼容 DIX Ethernet V2。
因此,以太网可指两者之一:
DIX Ethernet V2(业界版)
IEEE 802.3(标准化版)
二者差异极小,常统称为以太网
(3) IEEE 802 标准体系
IEEE 802 委员会不仅定义以太网标准,还定义多个局域网类型:
标准号 | 类型 |
---|---|
802.3 | 以太网(CSMA/CD) |
802.4 | 令牌总线网 |
802.5 | 令牌环网 |
为适应多种局域网,IEEE 把数据链路层拆分成两个子层:
LLC(Logical Link Control,逻辑链路控制)
MAC(Medium Access Control,媒体接入控制)
(4) LLC 与 MAC 的区别(见图 3-14)
子层 | 功能 | 特点 |
---|---|---|
MAC 子层 | 负责帧封装、寻址、差错检测、介质访问控制 | 与传输介质紧密相关 |
LLC 子层 | 为上层提供统一接口,不依赖具体介质 | 对上层(网络层)是透明的 |
图 3-14 :在局域网通信中,站点1 与 站点2 的 LLC 层直接逻辑通信,而物理传输经过 MAC 层与物理层实现

适配器(网卡)的作用
(1) 基本定义
适配器是计算机连接局域网的接口设备,又称网卡(Network Interface Card, NIC)
早期为主板插卡,现在多集成在主板上。
(2) 主要功能
适配器实现主机内部总线 ↔ 网络信号的转换,完成数据的发送与接收。
主要功能包括:
数据传输与转换
缓冲与暂存
帧组装与拆解
地址管理
每块网卡有唯一的硬件地址(MAC 地址),通常存放在其 ROM 中
对应计算机软件中的 IP 地址存放在主机内存中
(3) 通信过程(见图 3-15)
当计算机要与局域网通信时,流程如下:
-
CPU 生成要发送的数据,交给网卡
-
网卡将数据帧封装并发送到局域网
-
网卡从局域网接收帧
-
检查是否为本机 MAC 地址,若匹配则交给 CPU
-
CPU 进一步处理或转交上层协议(如 IP 层)
图中说明:
硬件地址(MAC):存在网卡的 ROM 中
软件地址(IP) :存在计算机内存中

CSMA/CD 协议(载波监听多点接入/碰撞检测)
背景与基本思想
早期以太网采用总线结构:所有计算机共享同一根同轴电缆。
当任意一台计算机发送数据时,信号在总线上广播,所有计算机都能听见。
各节点通过自己的硬件地址(存储在网卡 ROM 中)判断帧是否发给自己。
这是一种广播通信 + 点对点传输的结合方式。
主机、工作站、站点在以太网中同义,均表示连接在局域网上的计算机。
以太网设计目标
为简化设计、降低成本,以太网采用两条核心原则:
1. 无连接、无确认的传输方式
2. 冲突检测与重传
CSMA/CD 协议含义
CSMA/CD = Carrier Sense Multiple Access with Collision Detection
中文:载波监听多点接入 / 碰撞检测
CS(载波监听):发送前先监听信道,若忙则等待,空闲才发送
MA(多点接入):多个站点共享同一通信信道
CD(碰撞检测):边发送边监听信号电平,若检测到碰撞则立即中止
以太网信号编码方式
所有以太网帧都使用曼彻斯特编码传输

CSMA/CD 协议要点概念
多点接入(Multiple Access)
指局域网采用总线结构:多台计算机以多点方式共享同一传输介质(同轴电缆)
任何一台都可向总线发送数据,所有设备都能听到。
载波监听(Carrier Sense)
意为边发送边监听:
每个站在发送数据前必须检测信道是否空闲;
若检测到其他站正在发送 → 等待;
若空闲 → 立即发送。
碰撞检测(Collision Detection)
当两台或多台主机同时发送时,它们的信号会在总线上叠加,导致电压幅度异常上升。
适配器检测到电压偏离正常范围,立即判断为碰撞。
检测到碰撞后:
-
立刻停止发送
-
发送一段干扰信号通知其他站点
-
等待随机时间后再重发
这样可以防止资源浪费
传播时延与冲突产生机制
时延的影响
信号在总线上传播需要时间(例如 1 km 约 5 μs)
假设两站 A、B 相距 1 km:
当 A 发送时,信号在传播到 B 途中可能仍未到达;
若此时 B 判断信道空闲,也开始发送;
两信号在中途相遇,发生碰撞;
再过传播时延后,A、B 各自检测到碰撞。
关键结论 :
发生碰撞的最坏情况是两个最远站点同时发送,
因此系统必须能在往返传播时延(2τ)内检测到碰撞。
半双工通信
由于同一时间既要发送又要监听,站点不能同时进行全双工收发,
所以以太网的 CSMA/CD 方式属于半双工通信。
图 3-17:传播时延对监听的影响
时刻 | 事件说明 |
---|---|
t = 0 | A 开始发送 |
t = τ − δ | B 仍检测到空闲,也开始发送 |
t = τ | B 检测到碰撞,停止发送 |
t = 2τ − δ | A 检测到碰撞,停止发送 |
结果 | 两帧均作废,等待退避后重发 |

因此,A、B 同时争用总线 → 碰撞 → 都需重发
争用期(Contention Period)与碰撞窗口
含义
每次发送后,在一个不确定的小时间段内,仍可能有其他站开始发送并导致碰撞。
这个时间段就是争用期(碰撞窗口)
特性
争用期长度 = 端到端往返传播时延(2τ)
若在此时间内无碰撞,则可确认帧已安全发送
对 10 Mbit/s 以太网:
2τ = 51.2 μs,即相当于发送 512 bit = 64 字节的时间
二进制指数退避算法
当检测到碰撞后,站点不会立即重发,而是等待随机退避时间。
其规则如下:
基本公式
若第 k 次重传,退避时间为

并且

超过 16 次仍失败,则放弃发送并向上层报告错误
退避过程举例
重传次数 k | 可选随机数范围 r | 等待时间 |
---|---|---|
1 | {0,1} | 0 或 1 个 2τ |
2 | {0,1,2,3} | 0~3 个 2τ |
3 | {0,...,7} | 0~7 个 2τ |
若再次碰撞,则随机区间扩大,平均退避时间变长,系统趋于稳定。
这称为动态退避机制
最小帧长与争用期关系
原因
如果数据帧太短,可能在发送完之前还没检测到碰撞,就误以为成功。
为确保在争用期内能发现冲突,以太网规定:
最小帧长 ≥ 64 字节(512 bit)
因为 10 Mbit/s 以太网中,发送 512 bit 需 51.2 μs,
恰好对应一个争用期长度。
若帧小于 64 字节,发生碰撞时已发送完且无法检测,会造成隐性错误。
实际含义
若在前 64 字节内无碰撞 → 安全
若检测到碰撞 → 必定发生在前 64 字节内
长度 <64 字节的帧 → 均视为异常中断帧而丢弃