数据链路层
# 数据链路层 ## 【考纲内容】 (一)数据链路层的功能 (二)组帧 (三)差错控制 检错编码;纠错编码 (四)流量控制与可靠传输机制 流量控制、可靠传输与滑动窗口机制;停止-等待协议; 后退 $N$ 帧协议(GBN);选择重传协议(SR) (五)介质访问控制 1. 信道划分:频分复用、时分复用、波分复用、码分复用 2. 随机访问:ALOHA 协议;CSMA 协议;CSMA/CD 协议;CSMA/CA 协议 3. 轮询访问:令牌传递协议 (六)局域网 局域网的基本概念与体系结构;以太网与 IEEE 802.3; IEEE 802.11 无线局域网;VLAN 的基本概念与基本原理 (七)广域网 广域网的基本概念;点对点协议(PPP) (八)数据链路层设备 以太网交换机及其工作原理 ## 【复习提示】 本章是历年考试中考查的重点。要求在了解数据链路层基本概念和功能的基础上,重点掌握滑动窗口机制、三种可靠传输协议、各种 MAC 协议,特别是 CSMA/CD 协议、CSMA/CA 协议和以太网帧格式,以及局域网的争用期和最小帧长的概念、二进制指数退避算法。此外,中继器、网卡、集线器、网桥和局域网交换机的原理及区别也要重点掌握。 ## 3.1 数据链路层的功能 数据链路层的主要任务是让帧在一段链路或一个网络中传输。尽管数据链路层协议种类繁多,但它们都需解决三个基本问题:封装成帧、透明传输和差错检测。 数据链路层使用的信道主要有两种: 1)点对点信道:一对一通信,通常通过一条专用物理链路连接两个节点。
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
视频讲解 <!-- page: 63 --> 第3章 数据链路层 2)广播信道:一对多通信,单个节点发送的数据可被连接在同信道上的所有节点接收。 ## 3.1.1 数据链路层所处的地位 以两台主机通过互联网通信为例(见图3.1):局域网1中的主机H1经路由器R1、广域网及路由器R2,连接到局域网2中的主机H2。 主机H1和H2均具备完整的五层协议栈;路由器在转发分组时仅使用协议栈的下三层。当H1向H2发送数据时,数据在各节点的协议栈中多次上下流动(见图3.2);进入路由器后,先从物理层上至网络层,在转发表中确定下一跳地址,再下至物理层转发出去。
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
图3.1 主机H1向H2发送数据
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
图3.2 从协议的层次上看数据的流动 然而,在学习数据链路层时,我们通常聚焦于水平方向的数据链路层交互。此时可将通信过程简化为:H1的链路层 $\rightarrow$ R1的链路层 $\rightarrow$ R2的链路层 $\rightarrow$ H2的链路层(见图3.3)。这三段链路可能采用不同的数据链路层协议,但每一段都独立完成帧的传输任务。
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
图3.3 只考虑数据在数据链路层的流动 下面介绍点对点信道的基本概念,其中部分也适用于广播信道。 1)链路。指从一个节点到相邻节点的一段物理线路,是通信路径的组成部分。 2)数据链路。在物理链路上添加实现通信协议的软硬件后所形成的逻辑通信通道。 3)帧。数据链路层对等实体间通信的协议数据单元。发送方将网络层交下的数据封装为帧发送;接收方从帧中提取数据并上交网络层。 ## 3.1.2 链路管理 链路管理是指数据链路层连接的建立、维持和释放过程,主要用于面向连接的服务。 通信双方必须首先确认对方处于就绪状态,并交换必要信息(如初始化帧序号),才能建立 <!-- page: 64 --> 2027年计算机网络考研复习指导 连接;传输过程中需维持连接状态;通信结束后则释放连接。 ## 3.1.3 封装成帧与透明传输 封装成帧是指在数据前后分别添加首部和尾部,构成一个完整的帧。帧长等于帧的数据部分长度加上首部和尾部的长度。首部和尾部包含控制信息,其核心作用是帧文界——帮助接收方从比特流中准确识别帧的起始与结束。例如,在HDLC协议中,使用标识字段F(01111110)标识帧的开始和结束。接收方将第一个F视为帧的开始,下一个F标志该帧的结束,如图3.4所示。为提高传输效率,应使数据部分尽可能长,但帧过长会增加差错概率和重传开销。因此,各类链路层协议均规定了最大传送单元(MTU),即帧数据部分的长度上限。 | 标志 | 地址 | 控制 | 数据 | 帧检验序列 | 标志 | | --- | --- | --- | --- | --- | --- | | F 01111110 | A 8位 | C 8位 | I N位(可变) | FCS 16位 | F 01111110 | 图3.4 HDLC帧格式 透明是计算机领域的一个重要概念,意指某事物虽存在,但对上层不可见。 透明传输是数据链路层的重要特性。“透明”在此意为:即使数据中恰好出现与帧定界符相同的比特组合,也不会被误判为帧边界。若不处理此问题,接收方可能提前结束帧解析,导致后续数据丢失。实现透明传输后,接收方能将帧完整恢复为原始SDU(服务数据单元),使网络层“感知不到”底层的帧封装过程——即数据链路层对上层是透明的。 ## 3.1.4 流量控制 由于链路两端节点的处理速率或缓存能力存在差异,若发送方速率过高,接收方可能因来不及处理而导致帧丢失。因此,流量控制旨在限制发送方的发送速率,使其不超过接收方的接收能力。该过程通常依赖反馈机制:发送方根据接收方的确认或窗口信息,决定是否继续发送。 在OSI模型中,流量控制由数据链路层实现,用于调节相邻节点间的流量;而在TCP/IP模型中,该功能主要由传输层(如TCP)承担,负责端到端的流量控制。 ## 3.1.5 差错检测与可靠传输 由于信道噪声等因素,帧在传输过程中可能出现两类错误。 1)位错:帧中某些比特发生翻转,通常通过循环冗余检验检测。 2)核错:包括帧丢失、重复或失序等,属于更高层的传输差错。 早期OSI模型认为,数据链路层必须向上提供可靠传输服务。因此,在CRC检错基础上,引入了帧编号、确认与重传机制:接收方收到正确帧后需发送确认;发送方若在规定时间内未收到确认,则判定为出错并重传,直至收到确认为止。 如今,是否采用可靠传输机制取决于信道质量:在通信质量较差的无线链路中,数据链路层仍使用确认与重传机制,以提供可靠服务;而在高质量的有线链路中,数据链路层仅进行CRC检错,将出错帧直接丢弃,不再负责重传。此时,重传任务由高层协议(如传输层TCP)完成。核心原则是,数据链路层确保上交的帧无差错,但不保证所有帧都被成功交付。 ## 3.1.6 本节习题精选 ### 单项选择题 01. 下列选项中,不属于数据链路层功能的是()。 <!-- page: 65 --> 第3章 数据链路层 A. 预定界 B. 电路管理 C. 差错控制 D. 流量控制 02. 下列选项中,不属于数据链路层功能的是( )。 A. 透明传输 B. 差错检测 C. 可靠传输 D. 拥塞控制 03. 下列选项中,不属于数据链路层协议功能的是( )。 A. 定义数据格式 B. 提供节点之间的可靠传输 C. 控制对物理传输介质的访问 D. 为终端节点隐蔽物理传输的细节 04. 为了避免传输过程中帧的丢失,数据链路层采用的方法是( )。 A. 帧编号机制 B. 循环冗余检验码 C. 海明码 D. 计时器超时重发 05. 对于信道比较可靠且对实时性要求高的网络,数据链路层采用( )比较合适。 A. 无确认的无连接服务 B. 有确认的无连接服务 C. 无确认的面向连接服务 D. 有确认的面向连接服务 06. 流量控制实际上是对( )的控制。 A. 发送方的数据流量 B. 接收方的数据流量 C. 发送、接收方的数据流量 D. 链路上任意两节点间的数据流量 ## 3.1.7 答案与解析 ### 单项选择题 01. B 数据链路层的主要功能包括:如何将二进制比特流组织成数据链路层的帧;如何控制帧在物理信道上的传输,包括如何处理传输差错;在两个网络实体之间提供数据链路的建立、维护和释放;控制链路上帧的传输速率,以使接收方有足够的缓存来接收每个帧。这些功能对应为帧定界、差错检测、链路管理和流量控制。电路管理功能由物理层提供。 02. D 拥塞控制是网络层或传输层的功能,用于防止过多的分组注入网络而导致网络性能下降。 03. D 数据链路层的主要功能包括组帧,组帧即定义数据格式,选项A正确。数据链路层在物理层提供的不可靠的物理连接上实现节点到节点的可靠性传输,选项B正确。控制对物理传输介质的访问由数据链路层的介质访问控制(MAC)子层完成,选项C正确。为终端节点隐蔽物理传输的细节是物理层的功能,数据链路层不必考虑如何实现无差别的比特传输,选项D错误。 04. D 为防止在传输过程中丢失帧,在可靠的数据链路层协议中,发送方为发送的每个数据帧设计一个计时器,当计时器到期而该帧的确认帧仍未到达时,发送方将重发该帧。为保证接收方不会接收到重复帧,需要对每个发送的帧进行编号;海明码和循环冗余检验码都用于差错控制。 05. A 无确认的无连接服务是指源主机发送帧时不需要先建立逻辑连接,目的主机收到帧时不需要发回确认。若因线路上有噪声而造成某一帧丢失,则数据链路层并不检测这样的丢帧现象,也不回复。当错误率很低时,这类服务非常合适,此时恢复任务可由上面的高层来负责。这类服务对实时通信也非常合适,因为实时通信中数据迟到比数据损坏更不好。 06. A 流量控制是通过限制发送方的数据流量而使发送方的发送速率不超过接收方接收速率的一 <!-- page: 66 --> 2027年计算机网络考研复习指导 种技术。流量控制功能并不是数据链路层独有的,其他层上也有相应的控制策略,只是各层的流量控制对象是在相应层的实体之间进行的。 ## 3.2 组帧 发送方依据特定规则,将网络层递交的分组封装成帧(也称组帧)。数据链路层以帧为单位传输数据,主要目的是:一旦出错,只需重发出错的帧,而不必重传全部数据,从而提高传输效率。组帧需解决帧定界、帧同步和透明传输等问题。常见的组帧方法主要有以下四种。 ### 注意 组帧时通常既要添加首部,也要添加尾部。原因在于,网络中信息以帧为最小传输单位,接收方必须能准确识别一帧在比特流中的起始与结束位置,否则无法正确解析帧内容。 ## 3.2.1 字符计数法 字符计数法在帧首部设置一个计数字段,用于记录该帧包含的总字节数(包括计数字段自身占用的1B),如图3.5所示。接收方读取该计数值后,即可确定后续数据的长度,从而定位帧的结束位置;由于帧是连续传输的,下一帧的起始位置也随之确定。
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
图3.5 字符计数的过程示例
字符计数法的主要缺陷是:当计数字段在传输过程中出错时,接收方将无法正确识别帧的边界,导致收发双方失去同步,可能引发灾难性后果。
## 3.2.2 字节填充法
字节填充法通过特定控制字符实现帧定界。在图3.6中,控制字符SOH表示帧的起始,EOT表示帧的结束。为避免数据中出现的SOH或EOT被误判为帧的定界符,发送方会在这些特殊字符前插入一个ESC字符(注意,ESC是ASCII码中的一个单字节控制字符),以实现透明传输。若数据中原本就包含ESC,则同样在其前再插入一个ESC。接收方收到ESC后,会将其丢弃,并将紧随其后的字符视为普通数据(而非控制字符),从而还原出原始数据。
(a) 网络层发出的数据
(b) 经数据链路层填充后的数据
(c) 接收方传送给网络层的数据
SOH| A EOT| ESC| B | EOT
SOH| A ESC| EOT| ESC| B | EOT
SOH| A EOT| ESC| B | EOT
图3.6 字节填充的过程示例
当帧的数据部分中出现ESC、EOT或SOH时[见图3.6(a)],发送方在每个ESC、EOT或SOH之前插入一个ESC字符[见图3.6(b)],接收方处理后恢复原数据[见图3.6(c)]。
<!-- page: 67 -->
第3章 数据链路层
55
## 3.2.3 零比特填充法
**等式组注** ▶ HDLC 的比特填充规则(2013)
零比特填充法允许数据帧包含任意数量的比特,并用固定比特串 01111110 作为帧的起始和结束标志,如图 3.7 所示。为防止数据字段中出现与标志相同的比特序列,发送方在扫描数据时,每遇到 5 个连续的“1”,就在其后自动插入一个“0”,确保数据字段中不会出现 6 个连续的“1”,避免与帧标志混淆。接收方执行逆操作:每收到 5 个连续的“1”,就自动删除其后的“0”,以恢复原始数据。早期的 HDLC 协议正是采用这种方法来实现透明传输。
(a) 原始数据 01101111111111111110010
(b) 线上数据 01101111101111101111010010
(c) 接收方删除填充位后的数据 01101111111111111110010
图 3.7 比特填充过程示例
零比特填充法易于硬件实现,性能优于字节填充法。
## 3.2.4 违规编码法
违规编码法利用物理层编码的冗余特性实现帧定界。例如,在曼彻斯特编码中:比特“1”编码为“高-低”电平对,比特“0”编码为“低-高”电平对。而“高-高”或“低-低”电平对在数据比特中是违规的(未被采用),因此可借用这些违规编码序列来标识帧的起始或终止。局域网 IEEE 802 标准采用了这种方法(更多介绍见 3.6.2 节)。违规编码法无须任何填充技术即可实现透明传输,但仅适用于采用冗余编码的特殊编码环境。
由于字符计数法对计数字段错误极为敏感,而字节填充法在实现上较为复杂且存在兼容性问题,因此目前更常用的组帧方法是零比特填充法和违规编码法。
## 3.2.5 本节习题精选
### 一、单项选择题
01. 【2013 统考真题】HDLC 协议对 01111100 01111110 组帧后,对应的比特串为( )。
(注:HDLC 协议已从最新大纲中删除。)
A. 01111100 00111110 10
B. 01111100 01111101 01111110
C. 01111100 01111101 0
D. 01111100 01111110 01111101
### 二、综合应用题
01. 在一个数据链路协议中使用下列字符编码:
A 01000111;
B 11100011;
ESC 11100000;
FLAG 01111110
在使用下列组帧方法的情况下,说明为传送 4 个字符 A、B、ESC、FLAG 所组织的帧而实际发送的二进制位序列(使用 FLAG 作为首尾标志,ESC 作为转义字符)。
1)使用字符计数法。
2)使用字节填充法。
3)使用零比特填充法。
## 3.2.6 答案与解析
### 一、单项选择题
01. A
<!-- page: 68 -->
2027年计算机网络考研复习指导
HDLC协议对比特串组帧时,HDLC数据帧以比特模式01111110标识每个帧的起始和结束,因此在帧数据中只要出现5个连续的位“1”,就在输出的位流中填充一个“0”。因此,组帧后的比特串为01111100001111101(下划线部分为新增的0)。
## 二、综合应用题
### 01. 【解答】
1)第一字节为所传输的字符计数5,转换为二进制为00000101,后面依次为A、B、ESC、FLAG的二进制编码:
00000101 01000111 11100011 11100000 01111110
2)首尾标志位FLAG(01111110),在所传输的数据中,若出现控制字符,则在该字符前插入转义字符ESC(11100000):
01111110 01000111 11100011 11100000 11100000 11100000 01111110 01111110
3)首尾标志位FLAG(01111110),在所传输的数据中,若连续出现5个“1”,则在其后插入“0”:
01111110 01000111 110100011 111000000 011111010 01111110
## 3.3 差错控制
实际的通信链路并非理想,比特在传输过程中可能产生差错:1可能变为0,0也可能变成1,这种现象称为比特差错。比特差错是传输差错的一种,本节仅讨论此类差错。
通常采用编码技术进行差错控制,主要分为两类:检错编码和纠错编码。采用检错编码时,接收方若检测到差错,会设法通知发送方重传,直到收到正确的数据为止;采用纠错编码时,接收方不仅能发现差错,还能确定错误位置并加以纠正。在探讨具体的编码技术之前,需先引入码距(也称海明距离)的概念——它是衡量编码检错能力与纠错能力的重要参数。
**考虑范围**:码距的计算与特性(2025)
码距是指两个码字在对应位上取值不同的比特数量。计算码距的一种方法是对两个位串进行异或(xor)运算,结果中1的个数即为码距。例如, $0110 \oplus 0011 = 0101$ ,结果中有两个1,说明这两个码字有2位不同,因此其码距为2。在一个编码集中,任意两个有效码字之间码距的最小值称为该编码集的码距。例如,对于编码集{10011, 01011, 11110, 00001},虽然11110与00001的码距为5,但10011与01011的码距仅为2,取各码距中的最小值,求得该编码集的码距为2。
根据差错控制理论,编码方案的检错能力和纠错能力与码距 $I$ 的关系如下:
$$
I = d + c + 1, \text{且} d \geqslant c
$$
即码距 $I$ 越大,其检错的位数 $d$ 就越大,纠错的位数 $c$ 也越大,且纠错能力恒不超过检错能力(能纠错必然能检错)。例如,当码距 $l = 3$ 时,该编码最多可检测2位错误,或纠正1位错误。此外,进一步考虑 $c = 0$ 或 $d = c$ 的两种边界情况,还可得出以下两个重要结论:
1)为检测 $d$ 位错误,编码方案的码距至少应为 $d + 1$ 。任何发生 $d$ 位错误的有效码字不可能变成另一个有效码字,以确保差错可被发现。例如,码距为1的编码无法检测任何错误。
2)为纠正 $c$ 位错误,编码方案的码距至少应为 $2c + 1$ 。即使一个有效码字发生 $c$ 位错误,其仍然离原始码字最近,接收方可据此唯一确定原始码字,实现纠错。
<!-- page: 69 -->
第3章 数据链路层
57
## 3.3.1 检错编码
检错编码均采用冗余编码技术,其核心思想是:在有效数据(信息位)发送前,按照特定规则附加若干冗余位(检验位),构成一个符合预设编码规则的码字后再发送。当信息位发生变化时,冗余位也会相应调整,以确保整个码字始终满足该编码规则。接收方通过校验收到的码字是否仍符合这一规则,来判断是否发生了差错。若某些比特在传输中出错,则可能违反原有的编码规则,进而使差错被有效检测出来。常见的检错编码包括奇偶检验码和循环冗余码。
## 1. 奇偶检验码
奇偶检验码是奇检验码和偶检验码的统称,是最基本的检错码。它由 $n$ 位数据和1位检验位组成,检验位的取值(0或1)使得整个码字中“1”的个数为奇数(奇校验)或偶数(偶校验)。
1)奇检验码:附加检验位后,码字中“1”的总数为奇数。
2)偶检验码:附加检验位后,码字中“1”的总数为偶数。
例如,7位数据1001101中有4个“1”(偶数),因此:对应的奇检验码为10011011(加1使“1”的总数为奇数),对应的偶检验码为10011010(加0使“1”的总数保持为偶数)。
奇偶检验码只能检测奇数位错误,无法发现偶数位错误,也无法定位错误位置。由于任意两个合法码字之间至少有2位不同,其码距为2。根据码距理论,此类编码最多可检测1位错误。而实际上,只要发生奇数位错误,“1”的总数奇偶性必然改变,因此能检测所有奇数位错误。
## 2. 循环冗余码
循环冗余码(Cyclic Redundancy Code,CRC)是数据链路层广泛采用的一种高效检错技术,具有检错能力强、实现简单、硬件支持成熟等显著优势,其基本原理如下。
CRC的核心思想:将待发送的数据视为一个二进制多项式,通过与一个预定义的生成多项式 $G(x)$ 进行特定运算,生成一段冗余校验信息(称为棱检验序列,FCS),并将其附加在原始数据之后。接收方则使用相同的 $G(x)$ 对整个接收到的帧进行验证,从而判断传输过程中是否出现差错。
CRC校验过程的具体描述如下。
- 约定生成多项式 $G(x)$
收发双方事先约定一个 $r + 1$ 阶的生成多项式 $G(x)$,其对应的二进制系数串长度为 $r + 1$ 位,且最高位和最低位必须为1。例如,位串1101对应多项式 $x^{3} + x^{2} + 1$,其阶数 $r = 3$。
- 发送方生成FCS
假设待发送数据为 $m$ 位,记作位串 $M$;在 $M$ 后面添加 $r$ 个0,得到长度为 $m + r$ 的扩展串(相当于将 $M$ 左移 $r$ 位,即乘以 $2^r$);用 $G(x)$ 对应的位串对该扩展串进行模2除法(不进位的二进制除法,其减法操作由异或实现);所得余数(共 $r$ 位,不足时补前导0)即为FCS;将原扩展串末尾的 $r$ 个0替换为FCS,形成最终发送帧($2^r M + \mathrm{FCS}$),总长度为 $m + r$ 位。
- 接收方校验
接收方收到整个帧(可能出错)后,用相同的 $G(x)$ 对其进行模2除法:若余数为0,则认为传输无差错,接受该帧;若余数非0,则认为存在差错,丢弃该帧。
**奇校验表** CRC校验码的计算规则(2023)
以数据 $M = 101001$($m = 6$)生成多项式 $G(x) = 1101$(对应 $r = 3$)为例。
CRC校验码的计算步骤如下:
1)左移补零:在 $M$ 后加3个0,即101001000。
2)模 2 除法:用 1101 去除 101001000,如图 3.8 所示。模 2 除法规则:减法不借位,等价
<!-- page: 70 -->
2027年计算机网络考研复习指导
于按位异或;从最高位开始,每次对齐除数进行异或,直到处理完所有位。
3)取余数:最终余数为001(必须保留为3位)。
4)构造发送帧:将余数作为FCS附加到原始数据后,即101001001(共9位)。
原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。
图3.8 循环冗余码的运算过程 CRC的生成与校验通常由专用硬件电路实现,速度极快,几乎不会引入额外的延迟。若传输过程中无差错,则CRC检验所得余数必定为0;若出现误码,余数仍为0的概率极低。因此,在工程实践中通常认为“凡是被数据链路层接受的帧,几乎可以确定在传输过程中未发生差错”。而那些被丢弃的帧,尽管物理上曾被收到,却因CRC校验失败而未被上层接受。