数据链路层

考点定位

  • 所属大纲章节:数据链路层(组帧、差错控制、流量控制与可靠传输、介质访问控制);局域网(以太网、IEEE 802.11、VLAN);广域网(PPP 协议);数据链路层设备(网桥、交换机)
  • 常见题型:选择题(组帧方法辨析、CRC 与海明码、滑动窗口约束、介质访问控制协议辨析、冲突域/广播域划分、设备对比);计算题(CRC 余数计算、信道利用率、CSMA/CD 最小帧长与争用期、海明码纠错)
  • 考查频率:高。本考点是 408 计网中计算题最密集的一章:CRC、信道利用率、最小帧长几乎轮流出现在选择题或综合题中;交换机自学习与冲突域/广播域辨析是高频概念题

前置知识:时延(发送时延、传播时延、RTT)与带宽见计算机网络体系结构;信道复用(FDM/TDM/CDM/WDM)的概念在物理层;本章隔离出的"冲突域/广播域"问题将在网络层路由器部分再次出现。

工程师速览:数据链路层就是"把一条裸线路变成一条看起来无差错、有秩序的管道"。你在应用层用的每个可靠特性(ACK、重传、滑动窗口),都先在这条"单跳链路"上以最简形式预演过一遍——因此本章的 GBN/SR 也是后面理解 TCP 滑动窗口的骨架。

一、数据链路层的功能与封装成帧

1. 链路与数据链路

  • 链路(物理链路):相邻两结点间的物理线路(无其他中间结点),是传输介质本身
  • 数据链路(逻辑链路):链路 + 实现通信协议的硬件和软件。适配器(网卡)即实现这些协议的典型硬件

数据链路层的三个基本问题:封装成帧、透明传输、差错控制(部分教材将流量控制并列为基本功能)。

2. 封装成帧

封装成帧(framing):在一段数据的前后分别添加首部和尾部,构成一个帧。帧定界符(尾部)确定了帧的边界。网络层以分组为交换单位,数据链路层以帧为单位传输;帧长等于数据部分长度加上首尾部长度。

透明传输(transparency):无论数据部分出现什么样的比特组合,都能按原样无歧义地透过链路传输——即数据链路层对上层交付的数据是透明的,任何字节序列(包括恰好等于帧定界符的字节)都不会被误当作帧边界。这是组帧方法的核心设计约束。

3. 组帧的四种方法

方法原理透明传输手段典型应用主要缺点
字符计数法帧首部计数字段标明帧的总长度(含计数字段自身)无需转义—计数字段出错则全链路失去边界(灾难性),实际不用
字节填充法用特定字符(如 SOH、EOT)作首尾定界数据中出现定界字符时,前面插入转义字符 ESCPPP只适用于面向字节的链路,转义开销不固定
比特填充法用特定比特模式(如 01111110)作定界发送端每遇连续 5 个 1 立即插入一个 0;接收端每收到连续 5 个 1 就删掉后面的 0HDLC—
违规编码法利用编码方案中不会出现的信号电平组合作定界定界本身即违规序列,数据中不可能出现曼彻斯特编码中"高-高""低-低"电平对依赖于特定的编码方案(冗余编码才有多余信号组合)

逐一举例:

(1)字符计数法。帧 5123456789A(教材示例风格):首字符 5 表示整帧共 5 字节,接收方读 5 字节即切出一帧。若 5 误码为 7,则本帧尾部与下一帧首部全部错位——一错全错,故实际不采用。

(2)字节填充法。设 SOH(0x01)为帧开始、EOT(0x04)为帧结束、ESC(0x1B)为转义字符。若数据部分恰含 EOT,发送方在其前插入 ESC 再发送;接收方收到"ESC + EOT"还原为数据 EOT。若数据中本就含 ESC,同样转义为"ESC + ESC"。注意:填充后帧长变长,但数据字段长度可由转义规则反推,不影响透明性。

(3)比特填充法。定界符 01111110(0x7E)。发送端扫描比特流,每出现 5 个连续的 1 就强行插入一个 0(不管第 6 位是什么);接收端每收到 5 个连续的 1 就把其后的 0 删除。于是数据中永远凑不出 6 个连续的 1,01111110 只可能是帧边界。

(4)违规编码法。物理层讲过曼彻斯特编码:每个比特中间必有一次跳变(低-高或高-低)。"高-高"与"低-低"在合法编码中不存在,可直接用作帧定界而无需任何填充—— IEEE 802.5 令牌环即用此法。前提是底层编码有冗余(曼彻斯特编码码元利用率只有 1 bit / 码元)。

二、差错控制

传输差错由物理层噪声引起,分为单比特错(只错一位)与突发错(连续多位错)。数据链路层用冗余编码对付:在数据后附加冗余位,使接收方能检错(detect,知道错了,丢弃+重传)或纠错(correct,自己还原)。

1. 奇偶校验码

在数据后附加 1 位校验位,使整个码字中 1 的个数为奇数(奇校验)或偶数(偶校验)。

  • 只能检测出奇数个比特错;偶数个比特错检测不出
  • 无纠错能力。开销最小(1 bit),用于低速、可靠性要求低的场合

2. 循环冗余码 CRC(检错码,计算核心)

概念:给定 mm 位数据 MM(被除数)与生成多项式 GG 对应的 n+1n+1 位除数(最高位为 xnx^n 项),发送方在数据后拼接 nn 位帧检验序列 FCS,使拼接后的 n+mn+m 位序列恰好被除数模 2 整除。接收方对收到的序列做同样除法,余数为 0 判定无错。

模 2 运算即按位异或(XOR),不产生进位借位,与大小无关——软件工程师可理解为 GF(2) 上的多项式除法。

完整计算步骤(背下来):

  1. 写出数据 MM 与除数 GG(生成多项式各项系数)。设 GG 的比特数为 n+1n+1,则 FCS 为 nn 位
  2. 在 MM 后面补 nn 个 0,得到被除数
  3. 用 GG 对被除数做模 2 长除:每次商取被除数当前最高位(为 1 商 1,为 0 商 0),商 1 则异或掉 GG,商 0 则异或全 0(即跳过)
  4. 余数不足 n+1n+1 位时结束,余数即 FCS(不足 nn 位时高位补 0)
  5. 发送帧 = MM 拼接 FCS

例题 1(模拟题):数据 M=101001M = 101001(6 位),生成多项式 P(x)=x3+x2+1P(x) = x^3 + x^2 + 1,求 FCS 与发送帧,并验证。

P(x)=x3+x2+1P(x) = x^3 + x^2 + 1 对应除数 11011101(4 位),FCS 为 3 位。补 3 个 0:被除数 101001000101001000。

模 2 长除分步推演(每步异或):

步骤当前余数(高位对齐后)商异或对象
11010010001110100000
211101000111010000
31110001110100
4100011101
5101结束(位数 < 4)—

各步计算:101001000⊕110100000=011101000101001000 \oplus 110100000 = 011101000,最高位变 0 后余 1110100011101000;11101000⊕11010000=0011100011101000 \oplus 11010000 = 00111000,余 111000111000;111000⊕110100=001100111000 \oplus 110100 = 001100,余 11001100;1100⊕1101=00011100 \oplus 1101 = 0001,余 001001。

余数 001001 即 FCS。发送帧 =101001 001= 101001\,001(9 位)。

验证:接收方用 11011101 除 101001001101001001,余数为 00,判定无错。

常见坑(CRC):

  • 生成多项式 x3+x2+1x^3+x^2+1 是 3 次多项式但除数有 4 位(11011101),FCS 位数 = 多项式次数 = 除数位数 − 1。丢掉最高次的系数 1 是高频错误
  • 余数位数不足时左边补 0 凑满 n 位(如余 5 而需 3 位 FCS 则写 005→实际是 101 这类位串前补 0 的情形)
  • CRC 只能用于检错(无比特差错的传输不等于可靠传输,见体系结构中"可靠传输"的判定),数据链路层通常仅检错丢弃,不纠错、不重传(以太网 FCS 即 CRC-32,出错帧直接丢弃,重传交给高层)

3. 海明距离与海明码(纠错码,按大纲了解)

  • 海明距离(Hamming distance):两个等长码字中对应位不同的位数。一种编码方案的海明距离 = 全部合法码字间海明距离的最小值
  • 判定能力(必记):海明距离为 dd 的编码方案,可检测 d−1d-1 位错;要纠正 tt 位错需 d≥2t+1d \geq 2t+1
  • 海明码:能纠正 1 位错的纠错码(d=3d = 3)。设信息位 nn 位、校验位 rr 位,必须满足
2r≥n+r+12^r \geq n + r + 1

例如 n=4n = 4 时 r=3r = 3(23=8≥4+3+1=82^3 = 8 \geq 4+3+1 = 8)。校验位放在 2k2^k 位置(第 1、2、4、8…位),每个校验位负责所有"二进制位号含该权值"的数据位,接收方按同样分组重新计算,得到的错误位置码( syndrome)指出出错位号,取反即纠正。408 以概念与不等式计算为主,完整编解码推导按大纲了解即可。

三、流量控制与可靠传输

流量控制 = 限制发送方的发送速率,使不超过接收方的接收处理能力;可靠传输 = 出错或丢失的帧能被重传补齐。两者在数据链路层由同一套机制(确认 + 重传 + 窗口)实现。

1. 停止-等待协议(Stop-and-Wait)

机制:发送方每发一帧就停下来,等收到 ACK 才发下一帧;启动定时器,超时即重传。用 1 bit 序号(0/1 交替)即可工作。

要处理四种事件:正常确认、数据帧出错(接收方丢弃,靠发送方超时重传)、数据帧丢失(超时重传)、确认帧丢失(发送方超时重传后,接收方收到重复帧——丢弃但再发一次 ACK,这正是需要 1 bit 序号的原因)。

超时时间必须大于一个 RTT 加接收方处理时间,否则会产生不必要的重传。

2. 信道利用率(停止-等待)

设发送时延 TD=LCT_D = \dfrac{L}{C}(帧长 LL,数据率 CC),往返传播时延 RTT,忽略 ACK 的发送时延与处理时延,则每周期 TD+RTTT_D + \mathrm{RTT} 内只有 TDT_D 在传数据:

U停等=TDTD+RTTU_{\text{停等}} = \frac{T_D}{T_D + \mathrm{RTT}}

带宽×传播时延积(链路"比特长度")越大,停等效率越低——这就是需要滑动窗口的动机。

3. 后退 N 帧协议 GBN

发送方维持发送窗口 WTW_T,可连续发出窗口内全部帧而不必逐帧等待;接收窗口大小为 1,只按序接收:收到失序帧一律丢弃(也可回送最近按序收到的确认)。

累积确认:ACK nn 表示"第 nn 号帧及之前全部帧已正确收到",发送窗口向前滑动到 n+1n+1。接收方收到期望帧即交付上层并回 ACK,窗口前移 1。

重传规则:发送方只要超时(重传定时器通常为最早未确认帧设置一个),就从最老的未确认帧起、整窗口重传——这就是"后退 N 帧"。

GBN 事件序列表(待动画化)。设 3 bit 序号(0~7),发送窗口 WT=5W_T = 5,接收方初始期待 0 号帧:

时刻发送方动作信道上接收方动作发送窗口 / 接收窗口
t0连发 0,1,2,3,4 号帧,启动 0 号帧定时器5 帧在途期待 0[0..4] / 期待 0
t1—0,1 正确到达;2 号帧出错收 0 发 ACK0、收 1 发 ACK1、交付上层;2 号丢弃,之后 3、4 到达但因失序全部丢弃(回送 ACK1)[0..4] / 期待 2
t2收 ACK0、ACK1,窗口滑到 [2..6],补发 5、6 号帧ACK 到达—[2..6] / 期待 2
t30 号帧定时器到点改为 2 号帧超时:重传 2、3、4、5、6 全部(后退 N 帧)5 帧重传逐帧按序接收并逐帧确认—
t4累积确认陆续到达,窗口继续前滑———

4. 选择重传协议 SR

接收窗口大于 1:失序但落在接收窗口内的帧先缓存不丢弃,只对每帧单独确认(非累积确认);发送方只重传**真正没有收到确认的帧"。接收窗口内的洞被补齐后,一批帧一起交付上层。

SR 事件序列表(待动画化)。3 bit 序号,WT=WR=4W_T = W_R = 4:

时刻发送方动作接收方动作
t0连发 0,1,2,3期待 0
t1—0 正确 → ACK0;1 出错丢弃;2 落在窗口内 → 缓存并 ACK2;3 缓存并 ACK3
t2收 ACK0、ACK2、ACK3,窗口滑到 [1..4],补发 4收 4 缓存;交付 0,期待 1
t31 号帧超时:只重传 1收 1 → ACK1 → 1、2、3、4 一起按序交付,窗口滑到 [5..8]

对比 t3:GBN 重传 5 帧,SR 只重传 1 帧——代价是接收方要缓存与逐帧确认。

5. 窗口大小约束(完整推导,高频考点)

设序号字段 nn bit,帧序号空间共 2n2^n 个(0 ~ 2n−12^n-1 循环使用)。

GBN:发送窗口 WT≤2n−1W_T \leq 2^n - 1(接收窗口为 1)。

推导(反证):若允许 WT=2nW_T = 2^n。发送方发完 0 号到 2n−12^n-1 号全部帧后窗口已满;假设所有 ACK 全部丢失,接收方全部正确接收并已交付上层,其期待帧又回到 0 号。发送方超时后重发 0 号帧,接收方视为新的 0 号帧(无法与旧的区分)接收并交付——重复交付,协议失败。故 WTW_T 至多 2n−12^n - 1:窗口最多覆盖 2n−12^n - 1 个序号,发送方最多"超前"接收方期待序号 2n−12^n - 1 个位置,重传的旧帧与可能的新帧序号永不重叠,接收方可凭"是否等于期待序号"区分新旧。

SR:WT≤2n−1W_T \leq 2^{n-1},WR≤2n−1W_R \leq 2^{n-1}(标准结论取 WT=WR=2n−1W_T = W_R = 2^{n-1})。

推导(反证,考察收发窗口之和):设 WT+WR>2nW_T + W_R > 2^n。考虑发送方发出窗口内前 WRW_R 个帧:序号 s,s+1,…,s+WR−1s, s+1, \dots, s+W_R-1。全部到达接收方且全部 ACK 丢失。接收窗口滑动 WRW_R 格后,接收窗口覆盖 s+WR,…s+W_R, \dots;但 WT>2n−WRW_T > 2^n - W_R 意味着发送窗口与"新接收窗口"发生序号重叠(存在序号同时落在发送窗口与滑动后的接收窗口内)。发送方重传该序号的旧帧,接收方在新窗口内见到它,无法区分是新帧还是重传的旧帧,可能错收。故必须 WT+WR≤2nW_T + W_R \leq 2^n;对称起见取 WT=WR=2n−1W_T = W_R = 2^{n-1},即各自上限 2n−12^{n-1}。

记法:GBN 发送窗口砍 1(2n−12^n-1);SR 对半劈(2n−12^{n-1})。

6. 信道利用率(滑动窗口一般公式)与例题

连续 ARQ 下,发送方在一个"发完窗口 + 等到第一个确认回来"的周期 TD+RTT+TACKT_D + \mathrm{RTT} + T_{ACK} 内最多能发 WW 帧(忽略 TACKT_{ACK}):

U=min⁡(W⋅TD,  TD+RTT)TD+RTTU = \frac{\min\left(W \cdot T_D,\; T_D + \mathrm{RTT}\right)}{T_D + \mathrm{RTT}}
  • 若 W⋅TD≥TD+RTTW \cdot T_D \geq T_D + \mathrm{RTT}(窗口大到管道被填满),U=100%U = 100\%
  • 否则 U=W⋅TDTD+RTTU = \dfrac{W \cdot T_D}{T_D + \mathrm{RTT}}。停止-等待即 W=1W=1 的特例

例题 2(模拟题):主机通过一条 C=10 Mb/sC = 10\ \text{Mb/s} 的链路向对端发送帧,帧长 L=1250 BL = 1250\ \text{B},单程传播时延 5 ms5\ \text{ms},忽略确认帧长度与处理时延。(1) 求停止-等待协议的信道利用率;(2) 采用 GBN,序号 3 bit 且发送窗口取最大值,求利用率;(3) 若要求利用率达到至少 95%,窗口至少多大?

解:

发送时延 TD=1250×8 bit10×106 b/s=1 msT_D = \dfrac{1250 \times 8\ \text{bit}}{10 \times 10^6\ \text{b/s}} = 1\ \text{ms},RTT=10 ms\mathrm{RTT} = 10\ \text{ms}。

(1) U=11+10≈9.1%U = \dfrac{1}{1 + 10} \approx 9.1\%。

(2) 3 bit 序号 GBN 最大 WT=23−1=7W_T = 2^3 - 1 = 7。W⋅TD=7 ms<11 msW \cdot T_D = 7\ \text{ms} < 11\ \text{ms},管道未填满,U=711≈63.6%U = \dfrac{7}{11} \approx 63.6\%。

(3) 需 W⋅111≥0.95\dfrac{W \cdot 1}{11} \geq 0.95,即 W≥10.45W \geq 10.45,取 W=11W = 11(连续发送 11 ms 恰好覆盖周期 11 ms)。

7. 三种协议对比

协议发送窗口接收窗口确认方式重传范围所需序号位
停止-等待11逐帧当前帧1 bit
GBN≤2n−1\leq 2^n - 11累积确认最老未确认帧起的整窗口nn bit
SR≤2n−1\leq 2^{n-1}≤2n−1\leq 2^{n-1}逐帧单独确认仅未确认帧nn bit

四、介质访问控制

介质访问控制(Medium Access Control, MAC)解决广播信道上多个结点争用信道的问题——点对点链路(PPP)不需要。三类思路:

1. 信道划分介质访问控制(链接物理层)

复用技术详解(频分 FDM、时分 TDM 及统计时分 STDM、波分 WDM、码分 CDM 与正交码计算)见物理层。要点回顾:

  • FDM:所有用户在同一时间占用不同频带;适合模拟传输
  • TDM:所有用户在不同时间占用同一频带(全部带宽),时分复用帧
  • WDM:光的频分复用
  • CDM / CDMA:所有用户在同一时间、同一频带,靠相互正交的码片区分;抗干扰、保密

信道划分将信道资源静态分给用户,无冲突但利用率低(用户空闲时资源浪费)。

2. 随机访问:ALOHA

  • 纯 ALOHA:想发就发,冲突则随机等待后重发。吞吐率 S=Ge−2GS = G e^{-2G}(GG 为帧负荷),在 G=0.5G = 0.5 时最大 Smax⁡=12e≈18.4%S_{\max} = \dfrac{1}{2e} \approx 18.4\%
  • 时隙 ALOHA:时间划分时隙,只能在时隙起点发送,冲突窗口从纯 ALOHA 的 2 个帧长时间缩为 1 个。S=Ge−GS = G e^{-G},G=1G = 1 时 Smax⁡=1e≈36.8%S_{\max} = \dfrac{1}{e} \approx 36.8\%

记法:时隙把冲突窗口砍半,吞吐率恰翻倍(18.4%→36.8%18.4\% \to 36.8\%)。

3. 随机访问:CSMA 三种坚持策略

CSMA(载波侦听多路访问)= 发送前先侦听信道。侦听到忙之后怎么办,分三种策略:

策略信道忙时信道空闲时特点
1-坚持持续侦听立即以概率 1 发送信道利用率高、及时,但多个等待站同时发→冲突概率大;以太网采用
非坚持放弃侦听,等待随机时间后再侦听立即发送冲突少,但信道可能空闲无人用(利用率低、时延大)
p-坚持持续侦听(时隙化信道)以概率 pp 发送,以 1−p1-p 推迟到下一时隙再侦听折中;试图降低空闲时刻的集中冲突

4. CSMA/CD(有线以太网核心,计算核心)

CSMA/CD(载波侦听多路访问/碰撞检测)= CSMA + 边发送边检测冲突。工作流程可概括为:先听后发、边听边发、冲突停发、随机重发。

为什么边发边检:即使发送前侦听空闲,信号传播有时延,别的站可能在你发出的信号到达它之前也开始发送——冲突不可避免,只能尽快发现并止损。

争用期(冲突窗口 / 碰撞窗口)2τ2\tau 的推导(完整推导,必考):

设总线两端 A、B 相距单程传播时延 τ\tau。最坏情形:

  1. A 在 t=0t=0 开始发送
  2. B 的侦听到 t=τ−t=\tau^-(A 的信号即将到达但未到)都显示空闲,于是在 t=τ−εt=\tau-\varepsilon 开始发送,立即冲突
  3. 冲突信号从冲突点返回 A:A 在最迟 t=2τt = 2\tau 时检测到冲突

结论:发送方从开始发送起,经过 2τ2\tau 未检测到冲突,才能确信本次发送不会冲突。2τ2\tau 称争用期,其间发出 2τ⋅C2\tau \cdot C 个比特。

最小帧长的推导(64 字节的由来):

发送方必须在发完之前检测到冲突,即发送一帧所需时间 ≥2τ\geq 2\tau:

Lmin⁡C≥2τ⟹Lmin⁡=2τ⋅C\frac{L_{\min}}{C} \geq 2\tau \quad\Longrightarrow\quad L_{\min} = 2\tau \cdot C

传统 10 Mb/s 以太网规定最大跨距对应 τ=25.6 μs\tau = 25.6\ \mu s,故 2τ=51.2 μs2\tau = 51.2\ \mu s:

Lmin⁡=51.2×10−6 s×10×106 b/s=512 bit=64 BL_{\min} = 51.2 \times 10^{-6}\ \text{s} \times 10 \times 10^6\ \text{b/s} = 512\ \text{bit} = 64\ \text{B}

这就是以太网最短帧 64 字节的物理来源——不是协议拍脑袋定的,而是"发完前必须能检测到最迟冲突"逼出来的。短数据要填充(padding)到 46 字节数据字段凑够 64 B。

反向应用(常考):由最小帧长和速率反推最大网段跨距 τ=Lmin⁡2C\tau = \dfrac{L_{\min}}{2C},再乘传播速度。

冲突停发与退避:检测到冲突立即停止发送,并发送 48 bit 的强化干扰信号(jam)通知所有站;随后采用截断二进制指数退避算法:第 ii 次冲突后,从 {0,1,…,2k−1}\{0, 1, \dots, 2^k - 1\} 中随机取 rr,等待 r⋅2τr \cdot 2\tau 后再侦听重发,其中 k=min⁡(i,10)k = \min(i, 10);重传 16 次仍失败则放弃并报错。

例题 3(模拟题):某 CSMA/CD 网络数据率 C=100 Mb/sC = 100\ \text{Mb/s},两站相距 2 km2\ \text{km},信号传播速率 2×108 m/s2 \times 10^8\ \text{m/s}。求争用期与最小帧长。

解:单程传播时延 τ=2×103 m2×108 m/s=10 μs\tau = \dfrac{2 \times 10^3\ \text{m}}{2 \times 10^8\ \text{m/s}} = 10\ \mu s,争用期 2τ=20 μs2\tau = 20\ \mu s。

Lmin⁡=2τ⋅C=20×10−6×100×106=2000 bit=250 BL_{\min} = 2\tau \cdot C = 20 \times 10^{-6} \times 100 \times 10^6 = 2000\ \text{bit} = 250\ \text{B}

可见速率越高(或距离越远),最小帧长越大——千兆以太网不得不把争用期人为扩展(载波延伸)来保住 64 B 帧格式。

5. CSMA/CA 与 CD 的差异(无线局域网)

无线信道不能用 CD,两个原因:

  1. 无法边发边听:接收信号强度远小于发送信号(衰减快),自己发的信号完全淹没对方信号
  2. 隐蔽站问题:A、C 都在 B 的范围内,但 A、C 互相不在范围内。A 发给 B 时 C 侦听不到,C 也发 → 在 B 处冲突。CSMA 无法解决,CD 更检测不到

CSMA/CA(碰撞避免)的三个手段:

  • 帧间间隔 IFS:每帧发送后强制等待(DIFS 最长、SIFS 最短用于 ACK/CTS),高优先级帧用短 IFS 抢先
  • 确认机制:接收方收到正确帧后等 SIFS 回 ACK——以太网链路层不确认,802.11 链路层确认(无线误码率高,必须链路层重传)
  • 二进制指数退避:信道从忙转闲的那个时刻冲突风险最大,此时所有站都要执行退避(即使侦听空闲);仅信道空闲且是首次发送可不经退避

RTS/CTS(请求发送/允许发送)解决隐蔽站:发送方先发短控制帧 RTS(含通信时长),接入点回 CTS 广播给所有站;听到 CTS 的站(包括听不到 A 的 C)在时长内保持沉默。用两个短控制帧的碰撞换取长数据帧免碰。隐蔽站场景建议开启,普通场景可关(RTS/CTS 有开销)。

对比项CSMA/CDCSMA/CA
介质有线总线/集线器无线
冲突处理检测冲突(边发边听)避免+退避,无法检测冲突
链路层确认无(错误交高层)有 ACK
退避时机冲突后信道由忙转闲时
辅助机制强化干扰信号RTS/CTS、IFS

6. 轮询访问:令牌传递

  • 轮询协议:主结点循环询问各从结点是否有数据,从结点仅被询问时才发。无冲突,但轮询开销大、单点故障(主结点)
  • 令牌传递协议:一个特殊格式的令牌(token)沿逻辑环依次传递,持有令牌者才能发送,发完(或时限到)传给下一站。无冲突、对短帧密集场景效率高;缺点是令牌维护开销、单点故障、轻负载时想发也得等令牌绕一圈。典型:IEEE 802.5 令牌环(FDDI)

五、局域网

1. 以太网与 IEEE 802.3

以太网提供无连接、不可靠服务:差错帧直接丢弃,不重传不确认,纠错交给高层(TCP)。采用 1-坚持 CSMA/CD。

以太网 V2(DIX)帧格式:

前导码+帧起始 8 B目的地址 6 B源地址 6 B类型 2 B数据 46~1500 BFCS 4 B
  • MAC 地址 48 bit(6 B),前 24 bit厂商标识(OUI)+ 后 24 bit设备标识;全 1(FF-FF-FF-FF-FF-FF)为广播地址
  • 类型字段指明上层协议(0x0800 → IPv4,0x0806 → ARP;见网络层)
  • 数据字段 46~1500 B:1500 为 MTU(历史上与结点缓存、最差冲突概率权衡相关);46 = 64(最小帧)− 18(首尾除前导码)。不足 46 B 时填充
  • FCS:CRC-32,校验范围为除前导码外的整帧
  • 前导码 8 B 不属于帧,不计入帧长。帧长范围 64~1518 B
  • IEEE 802.3 帧的长度/类型字段取值 ≤1500 解释为长度,≥1536(0x0600)解释为类型,两种格式兼容并存

10BASE-T 等命名法:10(Mb/s)- BASE(基带)- T(双绞线)/F(光纤),5 表示 500 m 网段。

2. IEEE 802.11 无线局域网

  • 组成:基本服务集 BSS(一个接入点 AP + 若干移动站)+ 分配系统 DS 互联成扩展服务集 ESS;有固定基础设施(AP 模式)与无固定基础设施(自组织/ Ad hoc)两种
  • MAC 层:CSMA/CA(见上节)+ 可选 RTS/CTS
  • 帧有三种:数据帧、控制帧(RTS/CTS/ACK)、管理帧(如关联)。地址字段最多 4 个,区分源、目的、AP 两侧
  • 面临的问题:误码率高(链路层 ACK)、隐蔽站/暴露站(RTS/CTS)、不能边发边听

3. VLAN 与链路聚合

VLAN(虚拟局域网,IEEE 802.1Q):在交换式以太网内逻辑上把一个物理局域网划分成多个广播域,同一 VLAN 内可二层互通,不同 VLAN 间二层隔离、必须经三层设备(路由器/三层交换机)转发——这是交换机无法替代路由器的根本原因,细节见网络层。

划分方式(按优先级从低到高):

  1. 基于交换机端口(最常用、最简单,但站点换端口要重配)
  2. 基于 MAC 地址
  3. 基于网络层协议/子网(IP 分组)

802.1Q 帧:在以太网帧源地址之后插入 4 B 的 VLAN 标签(含 12 bit VLAN ID,理论上 4094 个可用 VLAN),FCS 重算。交换机间干道(Trunk)链路上的帧带标签,接主机的 Access 口进帧打标签、出帧剥标签。

优势:分割广播域、抑制广播风暴;隔离故障域、提升安全(部门间隔离);跨交换机的逻辑分组灵活(不受物理位置限制)。

链路聚合(IEEE 802.3ad):把多条物理链路捆绑成一条逻辑链路(如 4 条 1 Gb/s → 1 条 4 Gb/s),提高带宽与冗余度,对上层透明。

六、广域网链路协议:PPP 与 HDLC

1. PPP(点对点协议)

用户接入 Internet 的主流链路层协议(拨号、光纤入户 PPPoE)。只检错不纠错、不可靠、不使用序号和确认机制、只支持全双工点对点(非广播)链路、面向字节。

三个组成部分:

  1. 一个将 IP 数据报封装到串行链路的方法(帧格式)
  2. LCP(链路控制协议):建立、配置、测试、拆除数据链路连接
  3. NCP(网络控制协议):为每种网络层协议(如 IPCP 为 IP)协商网络层参数(如动态分配 IP)

PPP 帧格式:

标志 7E地址 FF控制 03协议 2 B信息 ≤1500 BFCS 2 B标志 7E
  • 标志 7E(01111110)定界;地址 FF、控制 03 基本是摆设(点对点无须寻址)
  • 协议字段:0x0021 → IP 数据报,0xC021 → LCP,0x8021 → NCP(IPCP)
  • FCS 为 2 字节 CRC

透明传输——字节填充(信息字段是字节流):

  • 出现 0x7E → 转义为 0x7D 0x5E
  • 出现 0x7D(转义字符本身)→ 0x7D 0x5D
  • 数值小于 0x20 的控制字符 → 0x7D + (原字符 + 0x20),如 0x03 → 0x7D 0x23(异步链路采用此法)

若采用零比特填充的同步链路(如 SDH),则用与 HDLC 相同的"5 个 1 后插 0"规则,无需字节填充。

2. HDLC(高级数据链路控制)与对比

HDLC:面向比特的同步链路协议,帧定界用 01111110 + 零比特填充实现透明传输;帧类型分为信息帧(I)、监督帧(S)、无编号帧(U);有较完善的流量控制与差错控制(编号确认),是可靠传输协议。

对比项PPPHDLC
面向字节比特
透明传输字节填充(0x7D 转义)零比特填充(5 个 1 插 0)
可靠性不可靠(无序号确认,只检错)可靠(编号、确认、重传)
协议字段有(支持多网络层协议)无(面向比特)
链路点对点、全双工点对点与多点
控制协议LCP + NCP无(面向比特,无需协商封装)

考点:PPP 零比特填充仅用于同步传输场合;字节填充是异步场合的标准做法,两者都是 PPP 的合法透明传输手段,考试默认按"PPP 字节填充、HDLC 比特填充"记忆。

七、数据链路层设备

1. 网桥与交换机:自学习

  • 网桥:早期的二层设备,连接多个网段,按 MAC 地址过滤转发帧,每个端口是一个冲突域
  • 以太网交换机:本质上是一个多端口网桥(全双工、每个端口独享带宽、硬件转发、支持存储转发/直通两种方式)。直通交换只查目的地址即转发(时延小、不检错),存储转发整帧缓存校验后再转发(可靠、支持不同速率端口转换)

自学习算法:交换机收到一帧后——

  1. 登记:将帧的源 MAC 地址与进入的端口号写入转发表(MAC 地址表);已存在但端口不同则更新,并刷新老化计时
  2. 转发/过滤:查目的 MAC 地址——
    • 在表中且端口 ≠ 进入端口 → 单播转发到该端口
    • 在表中且端口 = 进入端口 → 过滤,丢弃(同一网段内部通信)
    • 不在表中 → 向除进入端口外的所有端口泛洪(flooding)
    • 目的地址为广播地址 → 泛洪

自学习完整示例(待动画化)。拓扑如下:

初始转发表为空。事件序列与转表演化:

事件帧进入端口源→目的学习(登记)转发决策表项(MAC→端口)
11A→D00-01→1D 不在表:泛洪至端口 2/3/4{00-01→1}
24D→A00-04→4A 在表:单播转发到端口 1{00-01→1, 00-04→4}
33C→A00-03→3A 在表:单播转发到端口 1{00-01→1, 00-03→3, 00-04→4}
42B→FF-FF-FF-FF-FF-FF00-02→2广播地址:泛洪至端口 1/3/4+{00-02→2}
51A→B刷新 00-01→1B 在表:单播转发到端口 2不变

注意事件 2 之后 A 的表项是事件 1 学来的——先学源、后查目的,这是"自学习"一次收帧同时干两件事的体现。

2. 冲突域与广播域

  • 冲突域:连接在同一物理网段上、会发生 CSMA/CD 竞争的站点集合(集线器的所有端口在同一个冲突域)
  • 广播域:一台设备发出广播帧,能收到该帧的站点集合(被路由器/三层设备分割)

设备隔离能力对比(必背表):

设备工作层次冲突域广播域带宽共享
集线器 Hub物理层不隔离(全域 1 个)不隔离所有端口共享总带宽,半双工
网桥 Bridge数据链路层隔离(每端口 1 个)不隔离按端口分段
以太网交换机 Switch数据链路层隔离(每端口 1 个)不隔离(除非划 VLAN)每端口独享带宽,全双工
路由器 Router网络层隔离隔离—

判定口诀:冲突域看有没有 CSMA/CD 争用(一层设备不隔离、二层及以上隔离);广播域只认路由器与 VLAN。交换机每个端口是一个冲突域,但默认所有端口同属一个广播域;划 VLAN 后每个 VLAN 一个广播域。

3. 冲突域/广播域划分示例(高频题型)

对给定拓扑数冲突域与广播域的个数,规则:

  1. 每个集线器整体(含所有下挂段)= 1 个冲突域
  2. 每个交换机/网桥的每个端口各 = 1 个冲突域
  3. 每个路由器端口各 = 1 个广播域(也就各含 ≥1 个冲突域)
  4. 集线器与交换机不切分广播域:凡经过集线器/网桥/交换机连通的区域属于同一广播域

例:1 台路由器下挂 1 台交换机,交换机 8 个端口各接 1 台主机 → 冲突域 8 个(交换机每端口 1 个),广播域 1 个。若把交换机换成集线器 → 冲突域 1 个,广播域 1 个。若路由器 2 个端口各挂 1 台集线器 → 冲突域 2 个,广播域 2 个。

常见坑

  1. FCS 位数:除数 n+1n+1 位 → FCS 为 nn 位;生成多项式最高次项系数 1 别丢(x3+x2+1x^3+x^2+1 是 4 位除数 1101 不是 1001)
  2. CRC "无比特差错 ≠ 可靠传输":CRC 只检错;可靠传输要求确认+重传机制。以太网帧过 CRC 校验但上层仍可能丢包
  3. GBN 接收窗口为 1:失序帧一律丢弃不缓存;SR 才缓存。SR 逐帧确认、GBN 累积确认,别混
  4. 窗口上限公式记反:GBN 是 2n−12^n - 1(发送窗口),SR 是 2n−12^{n-1}(收发各自)。题目给"序号 3 bit、SR 协议"时最大窗口 = 4 不是 7
  5. 信道利用率里 RTT 是往返:题给"单程传播时延 20 ms"要乘 2;忽略确认帧发送时延与否要看题面(帧长小通常忽略,不忽略时周期再加 TACKT_{ACK})
  6. 争用期是 2τ2\tau:2×2 \times 单程传播时延;最小帧长 =2τ×= 2\tau \times 数据率。反推距离时别忘了除 2
  7. 以太网前导码 8 B 不算帧长:帧长 641518 B;数据字段 461500 B,两个数字别混
  8. PPP 无序号确认:它是不可靠协议,别被"有 FCS"迷惑;HDLC 才是可靠传输
  9. 交换机自学习记的是源 MAC、查表查的是目的 MAC;目的不在表中是泛洪而不是丢弃
  10. 交换机隔离冲突域但不隔离广播域(VLAN 除外);隔离广播域只能靠路由器或 VLAN。VLAN 间通信必须过三层

例题

例 1(模拟题):数据链路层采用 GBN 协议,序号字段 3 bit,发送方已发出 0~6 号帧且均未确认。此时还能否继续发送 7 号帧?随后若 2 号帧确认到达,说明窗口如何变化。

解:WT=23−1=7W_T = 2^3 - 1 = 7。已发出 06 共 7 帧,窗口 [0..6] 已用满,不能再发 7 号帧,须等待确认。收到 ACK2(累积确认 02 号)后窗口滑动为 [3..7],此时 3~6 已在途,可补发 7 号帧。

例 2(模拟题):长度 1 km 的 CSMA/CD 网络,数据率 1 Gb/s,信号传播速率 2×1082\times10^8 m/s,求最小帧长;若帧长固定 1000 B,此网络最长允许多长?

解:τ=1032×108=5 μs\tau = \dfrac{10^3}{2\times10^8} = 5\ \mu s,2τ=10 μs2\tau = 10\ \mu s,Lmin⁡=10 μs×109 b/s=10000 bit=1250 BL_{\min} = 10\ \mu s \times 10^9\ \text{b/s} = 10000\ \text{bit} = 1250\ \text{B}。

反向:帧长 1000 B = 8000 bit,要求 8000109≥2τ=2d2×108\dfrac{8000}{10^9} \geq 2\tau = \dfrac{2d}{2\times10^8},即 d≤8000×2×1082×109=800 md \leq \dfrac{8000 \times 2\times10^8}{2 \times 10^9} = 800\ \text{m}。

例 3(模拟题):主机甲、乙分别直连一台交换机的端口 1、2,交换机端口 3、4 分别连接集线器 1、集线器 2;集线器 1 下挂丙、丁,集线器 2 下挂戊、己。求冲突域与广播域个数,并说明丙发广播帧时谁收到。

解:冲突域——交换机每个端口 1 个,共 4 个(甲、乙各占 1 个,集线器 1 连同丙丁整体 1 个,集线器 2 连同戊己整体 1 个)。广播域——交换机不切分广播域,全网 1 个广播域。丙发广播帧:集线器 1 向丙丁之外的所有端口转发(无脑转发)→ 交换机端口 3 收到 → 学习源后泛洪到端口 1、2、4 → 甲、乙、集线器 2 全部端口 → 戊、己收到。全网都收到(共 6 台主机)。

自测

  1. 数据字段中出现了与帧定界符相同的比特串 01111110,采用比特填充的发送方应如何处理?接收方如何还原?
  2. 信息位 n=7n = 7,采用海明码纠正单比特错,至少需要多少校验位?
  3. SR 协议序号字段 5 bit,发送窗口与接收窗口的最大值各是多少?若误按 GBN 的 2n−12^n - 1 配置会发生什么?
  4. 某以太网最短帧长 64 B、数据率 10 Mb/s、信号传播速率 2×1082\times 10^8 m/s,求争用期与最大网络跨距。
  5. 下列设备分别隔离冲突域、广播域的哪些?集线器、网桥、交换机、路由器;其中哪个设备的不同端口可以连接不同速率的网段(存储转发)?

自测答案

  1. 发送方扫描数据,每遇到连续 5 个 1 就插入一个 0(不管后面是什么),使得数据中凑不出 6 连 1,01111110 只能是边界;接收方每收到 5 个连续的 1 就删掉其后紧随的那个 0,原样还原数据。
  2. 2r≥n+r+12^r \geq n + r + 1:r=4r=4 时 16≥7+4+1=1216 \geq 7+4+1=12 成立,r=3r=3 时 8<118 < 11 不够。至少 4 位。
  3. 均为 25−1=162^{5-1} = 16。若误用 25−1=312^5 - 1 = 31,则 WT+WR>25W_T + W_R > 2^5,接收窗口滑动后与发送窗口的序号空间重叠,重传的旧帧会被接收方误当作新帧接收(新旧帧无法区分),出错。
  4. 争用期 =64 B×8/10 Mb/s=512 bit/107=51.2 μs= 64\ \text{B} \times 8 / 10\ \text{Mb/s} = 512\ \text{bit} / 10^7 = 51.2\ \mu s;单程 τ=25.6 μs\tau = 25.6\ \mu s,跨距 =25.6×10−6×2×108=5120 m= 25.6 \times 10^{-6} \times 2\times10^8 = 5120\ \text{m}(标准以太网按此再留工程余量取约 5 km 内的冲突域直径)。
  5. 集线器:均不隔离;网桥与交换机:隔离冲突域、不隔离广播域;路由器:均隔离。网桥/交换机(存储转发方式)可连接不同速率端口——集线器所有端口必须同速率。