这是本节的多页打印视图。
点击此处打印 .
返回本页常规视图 .
数据链路层 在选择题中考察,个别年份也在大题中考察过,需熟练掌握介质访问控制的相关方法。
学习思维导图:
# 数据链路层
## 数据链路层的功能
## 组帧
## 差错控制
- 检错编码
- 纠错编码
## 流量控制和可靠传输机制
- 流量控制、可靠传输和滑动窗口
- 停等协议
- 回退N帧
- 选择性重传协议
## 介质访问控制
- 信道划分
- 随机访问:ALOHA, CSMA, CSMA/CD, CSMA/CA
- 轮询访问
## 局域网
- 基本概念和体系结构
- 以太网和IEEE 802.3
- 无限局域网和IEEE 802.11
- VLAN
## 广域网
- 基本概念
- PPP协议
## 数据链路层设备
- 以太网交换机和工作原理
数据链路层功能
封装数据帧(Frame Encapsulation):数据链路层将来自网络层的数据包封装成数据帧,这包括将源和目标地址添加到帧头部,以便在物理介质上的传输。 数据帧传输(Frame Transmission):数据链路层负责将数据帧从一个物理节点传输到另一个物理节点。这可能涉及到点对点的传输(例如,以太网)或多点广播传输(例如,Wi-Fi)。 物理地址寻址(Physical Addressing):数据链路层使用物理地址(通常是 MAC 地址)来标识设备。这些地址用于确定数据帧的目标设备。 帧同步和定界(Frame Synchronization and Framing):数据链路层确保接收端可以正确识别和分离不同的数据帧。这通常通过在帧的起始和结束位置使用特殊的比特模式来实现。 流量控制(Flow Control):数据链路层可以控制发送端的数据传输速率,以防止接收端不堪重负而丢失数据。这确保了适当的数据流量管理。 差错检测和纠正(Error Detection and Correction):数据链路层使用差错检测技术(如 CRC 校验)来检测帧在传输过程中是否受到损坏。一些数据链路层协议还可以进行错误纠正,尝试修复损坏的数据。 1 - 组帧 数据链路层的主要功能之一就是 组帧 。
帧(frame)代表数据链路层的数据发送单位,在接收到来自于网络层的报文(packet)时如何为其添加帧头和帧尾,并且以何种方式进行 帧定界 (接收方区别连续不同的帧)。
数据链路层组帧 网络层报文 (Packet) 组帧 帧头 数据 帧尾 帧 (Frame) 帧定界示例: 发送端: 帧1 帧2 帧3 传输 接收端: 帧1 帧2 帧3 通过帧头/帧尾进行帧定界 关键概念 帧头/帧尾:标识边界 数据:网络层报文 帧定界:区分帧边界 组帧:添加控制信息 组帧 的关键就在于 帧定界 ,也就是对于接收方来说,它能够以某种方式区分连续收到的不同帧。 从这个角度出发,组帧 方式可以被分为以下几种:
字符计数法 字符计数法 是在帧的首部设置一个计数字段,用来指示该帧中包含的字符(或字节)数量。
当接收方开始读取一帧时,首先读取位于 帧首部的计数字段 。通过该字段的数值,接收方即可知道该 帧的总长度 (即后续应读取的字符数)。随后,接收方按照得到的长度继续读取剩余的数据,直至完整地接收完本帧。
首位定界字符法 首位定界字符法即 使用特殊控制字符标志帧的开始和结束 。
但是使用这种方式可能出现如下问题:就是 首位定界字符 可能会在帧内部出现,这个时候就会造成歧义。
所以当特殊字符出现在帧的数据部分时,需要用 转义字符 ESC 来对特殊字符进行转义,同样,ESC 出现在数据部分同样需要转义。
以上图为例,假设我们使用 FLAG 作为 首位定界字符 的话(注意这里 FLAG 只是字符名称,不是表示字符是 FLAG),那么当 FLAG 出现在数据部分时,我们需要对 FLAG 进行转义,需要注意的是,因为我们使用 ESC 作为转义字符,所以当数据中出现 ESC 时,我们也需要对转义字符自己进行转义。
零比特填充法 零比特填充法 (Bit Stuffing)与首位定界字符法思路类似。
用 01111110 作为一个新的数据帧的开头,这里的关键在于要对数据帧内容中与 01111110 相同的部分进行转义,转义的方式如下:
在 发送方 :每当数据中出现 连续 5 个 '1' 时, 就自动插入一个 '0',避免形成 6 个连续的 '1'(即避免形成 01111110)。 在 接收方 :每当检测到 连续 5 个 '1' 后跟着一个 '0',就去掉这个 '0',还原原始数据。 在传送的比特流中可以传送任意比特组合,而不会引起对帧边界的判断错误。零比特填充法 很容易由硬件来实现,性能优于字符填充法 。 对于 零比特填充法 ,需要记住 01111110 这种开头的比特填充方式以及具体如何进行转义。
违规编码法 违规编码法 (Physcial Layer Coding Violations)使用特殊电平进行定界。比如,曼彻斯特编码 将数据比特“1”编码为“高 - 低”电平,将比特“0”编码为 “低-高” 电平对,而 “高-高” 电平对和 “低-低” 电平对是没有被使用的,所以可以用这两个电平进行帧定界。
违规编码法 - 曼彻斯特编码帧定界 时钟 数据位 1 0 1 0 正常编码 高 低 1: 高→低 0: 低→高 1: 高→低 0: 低→高 违规编码 (帧定界) 高 低 高-高 (帧开始) 低-低 (帧结束) 正常数据: 0 1 0 1 违规编码法原理 • 正常编码: - 数据"1": 高→低电平 - 数据"0": 低→高电平 • 违规编码(帧定界): - 高→高: 帧开始标记 - 低→低: 帧结束标记 利用未使用的电平组合进行帧定界,避免了额外开销 2 - 差错控制 说实话本节细节极多但是考查频率很低,考的话一般是在选择题考一题,这一节的几个知识点说实话只能硬背了,大家可以根据自身精力决定要不要搏一搏这可能出现的两分。
分类 按照编码能够完成的功能,可以分为 检错编码 和 纠错编码 两类。
检错(Error Detection) :只能判断数据在传输或存储过程中是否发生了错误,但无法确定错误的位置,因此不能恢复原始数据。纠错(Error Correction) :不仅能够检测错误,还能够确定错误的位置,并自动恢复正确的数据。常见的差错控制编码如下:
检错编码 :奇偶校验码、循环冗余码(CRC)纠错编码 :海明码(Hamming Code)奇偶校验码 奇偶校验码(Parity Check Code)是一种 简单高效 的错误检测机制,广泛应用于数据传输和存储系统中,用于发现传输过程中发生的错误。其核心思想是在原始数据后增加 1 位校验位 (Parity Bit),使整个数据(原始数据 + 校验位 )中 “1” 的总数满足预先规定的奇偶规则 。
奇偶校验码分为 奇校验 和 偶校验 两种。
奇校验规则 :数据(包括校验位)中 “1” 的总数为奇数 。偶校验规则 :数据(包括校验位)中 “1” 的总数为偶数 。为什么奇校验中,原始数据已有奇数个 “1” 时,校验位反而为 0?
需要注意的是,校验位本身并不表示奇偶性 ,它的作用是使 整个数据(原始数据 + 校验位) 满足规定的奇偶规则。
例如采用 奇校验 :
若原始数据中已经有 奇数个 “1” ,说明已经满足奇校验要求,因此校验位设置为 0 ,保持总数不变。 若原始数据中有 偶数个 “1” ,则需要补一个 1 ,使总数变为奇数,因此校验位设置为 1 。 偶校验的原理完全相同,只不过目标变成了使 “1” 的总数为偶数 。
类型 数据中 “1” 个数 校验位 接收端判定 奇校验 偶数 1 若收到后 “1” 的总数不是奇数,则检测到错误。 奇校验 奇数 0 若收到后 “1” 的总数不是奇数,则检测到错误。 偶校验 奇数 1 若收到后 “1” 的总数不是偶数,则检测到错误。 偶校验 偶数 0 若收到后 “1” 的总数不是偶数,则检测到错误。
a 1 a 2 a 3 a 4 b 1 b 2 b 3 b 4 生成器 r 0 a 1 a 2 a 3 a 4 b 1 b 2 b 3 b 4 q 0 决策电路 检查器 校验码 s 0 伴随码syndrome 接收 拒绝 Encoder Encoder 发送端 接收端 不可靠的信道 奇偶校验码的 工作过程 如下:
发送端 :统计原始数据中 “1” 的个数,根据奇校验或偶校验规则计算校验位,并将校验位附加到原始数据后一起发送。接收端 :对接收到的数据(包括校验位)再次统计 “1” 的个数,检查是否满足预设的奇偶规则;若不满足,则说明传输过程中发生了错误。需要注意的是,奇偶校验码只能 检测错误 ,不能 纠正错误 ,因为它无法确定出错比特的位置。此外,它能够检测 任意奇数个比特错误 (例如 1 位、3 位、5 位错误),但 无法检测偶数个比特错误 (例如 2 位、4 位错误)。
检错能力 是否支持 单比特错误检测 ✔ 任意奇数个比特错误检测 ✔ 偶数个比特错误检测 ✘ 错误定位 ✘ 错误纠正 ✘
循环冗余码 循环冗余校验 (CRC,Cyclic Redundancy Check)是一种常用的数据完整性校验方法,广泛应用于数据传输和存储系统中,用于检测数据在传输过程中是否发生了错误。
其 核心思想 是将数据视为一个二进制多项式,并使用预先约定好的 生成多项式 对其进行 模 2 除法 ,最终所得的余数就是 CRC 校验码 。
模 2 除法 CRC 中最核心的运算就是 模 2 除法(Modulo-2 Division) 。
它与我们熟悉的十进制长除法过程基本相同,不同之处在于,模 2 除法中的 减法运算被替换为了按位异或(XOR)运算 ,整个计算过程中 没有借位 。
因此,模 2 除法可以简单理解为:
将生成多项式与当前被除数的最高位对齐。 若当前最高位为 1 ,则与生成多项式进行一次 按位异或 。 若当前最高位为 0 ,则无需计算,直接向右移动一位。 重复上述过程,直到所有数据处理完成,最后剩余的几位就是 CRC 校验码 。 商 1 1 0 0 除数 → 1 1 0 1 ) 1 0 1 1 0 0 0 ← 被除数(数据 + 补 0) ⊕ 1 1 0 1 0 1 1 0 0 0 0 ⊕ 1 1 0 1 0 0 0 0 1 0 0 ← 余数(CRC 校验码) 最高位为 1 → 与除数异或 商 除数(每次异或运算的操作数) 余数(长度 = 除数长度 − 1)
由于整个过程中只涉及 异或 和 移位 运算,因此 CRC 十分适合使用硬件电路实现,计算效率很高。
校验流程 zero accept non-zero reject
CRC 校验码的生成与校验过程如下:
确定生成多项式 发送端和接收端事先约定好同一个 生成多项式 。
扩展原始数据 若生成多项式共有 k 位 ,则在原始数据末尾补 k−1 个 0 ,得到扩展数据。
计算 CRC 校验码 使用扩展数据对生成多项式进行 模 2 除法 ,所得余数就是 CRC 校验码 。
发送数据 将 CRC 校验码附加到原始数据末尾,组成完整的数据帧并发送。
接收校验 接收端收到数据后,再次使用相同的生成多项式进行 模 2 除法 。若余数为 0 ,则说明数据未检测到错误;否则说明数据在传输过程中发生了错误。
发送方 假设原始数据为:1010001101,选用的生成多项式为:110101,则对应的多项式形式为:
x 5 + x 4 + x 2 + 1
发送方计算 CRC 校验码的过程如下:
扩展数据 :生成多项式共有 6 位,因此在原始数据末尾补上 6 - 1 = 5 个 0,得到扩展数据:
101000110100000
进行模 2 除法 :使用扩展数据对生成多项式进行 模 2 除法 (实际计算过程中使用异或操作)。
CRC 模 2 除法计算过程 数据 1010001101,生成多项式 110101,扩展数据 101000110100000 生成多项式(除数) 异或结果 最终余数 (CRC) 商 (不参与编码) 商:1 1 0 1 0 1 0 1 1 110101 ) 1 0 1 0 0 0 1 1 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 步骤说明 每次取当前高位与生成多项式按位异或 异或后的结果向右移一位继续除 仅看首位是否为 1,决定该位商 0/1 最终余数即为 CRC 校验码 01110 关键规则 1 ⊕ 1 = 0, 0 ⊕ 0 = 0 1 ⊕ 0 = 1, 0 ⊕ 1 = 1 (模 2 减法 = 按位异或,无借位) 最终发送帧 = 原始数据 + CRC 校验码 101000110101110
最终得到余数:
01110
因此,发送的数据帧为:
1010001101 01110
接收方 继续以上述例子进行说明,接收方收到的数据为:
101000110101110
接收方同样使用生成多项式 110101 进行 模 2 除法 :
CRC 模 2 除法校验过程(接收方) 接收数据 101000110101110,使用同一生成多项式 110101 进行模 2 除法 生成多项式(除数) 异或结果 最终余数(应为 0) 商 (不参与判断) 商:1 1 0 1 0 1 0 1 1 110101 ) 1 0 1 0 0 0 1 1 0 1 0 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 步骤说明 用同一生成多项式按位异或 异或结果右移一位继续除 商不用于判断,只看最终余数 余数 = 0 表示校验通过 判断规则 余数 = 0:数据帧未被破坏 ✓ 余数 ≠ 0:传输中发生错误 ✗ (接收方与发送方使用相同多项式) 最终余数为0 ,校验通过 101000110101110 ÷ 110101 → 余数 =0
最终余数为:
0
说明数据在传输过程中 未检测到错误 ,因此 校验通过 。
为什么接收方不需要重新补 0?
有人说,接收方也可以采用另一种等价的校验方式:
从接收帧中分离出原始数据和 CRC 校验码; 在原始数据后重新补上 (r) 个 0; 重新计算 CRC 余数; 将重新计算出的余数与接收到的 CRC 校验码进行比较。 即判断:
CRC ( M ′ ( x )) = ? R ′ ( x )
其中,
M ′ ( x )
是接收到的数据部分,
R ′ ( x )
是接收到的 CRC 字段,
G ( x )
是生成多项式。
这种方法在数学上与直接对完整接收帧进行模 2 除法是等价的。不过在一般的 CRC 原理讲解和硬件实现中,通常采用更直接的方式:
完整接收帧 mod G ( x )
然后检查余数是否为全 0。
海明码 海明码(Hamming Code)是一种用于 错误检测 和 纠正 的编码方案,通常用于数据传输和存储系统中。它的主要目标是检测和纠正数据中的 单比特错误 。
海明码的核心思想是在 数据位 之间插入一定数量的 校验位 (也称为奇偶校验位),使得每个校验位都负责检查一组特定的位。校验位的数量取决于数据位的数量,并且它们的位置通常是 2 的幂次(即第 1 位、第 2 位、第 4 位……)。
生成过程 以一个 实例 说明海明码的 生成和纠正 过程:
假如我们的数据是
1011
,也就是
k = 4
位。根据海明码的原则,我们需要确定足够的校验位
r
来满足以下条件:
2 r ≥ k + r + 1
对于
k = 4
(数据位),我们找到最小的
r
为 3 。
对于
k
位数据,应该有多少位校验位
假设我们有
k
位数据,我们需要添加
r
位校验位,那么校验位的总数必须满足以下条件:
所有数据位和校验位的总数加起来可以由校验位来表示。也就是说,每一位数据位和校验位在位模式中都有一个唯一的表示。这意味着
2 r
必须至少等于
k + r + 1
,其中加
1
是因为校验位模式全为零(即没有错误)的情况也必须被考虑在内,即
2 r ≥ k + r + 1
首先将校验位(
p
)插入到数据位中的适当位置。校验位下标是 2 的幂(
1 , 2 , 4 , 8 , ...
)。
第
1 ( 2 0 )
位:校验位
p 1 第
2 ( 2 1 )
位:校验位
p 2 第
4 ( 2 2 )
位:校验位
p 3 然后再放置剩余的 数据位
d
:
第
3
位:数据位
d 1 第
5
位:数据位
d 2 第
6
位:数据位
d 3 第
7
位:数据位
d 4 位置 7 6 5 4 3 2 1 海明码 d 4 d 3 d 2 p 3 d 1 p 2 p 1 数据 1 1 0 - 1 - -
注意到上述我们提到的关于校验位和数据位的第
n
位,下标是从 1 开始 而不是 0 开始的。
首先给出位置下标的二进制表示:
位置 7 6 5 4 3 2 1 二进制 111 110 101 100 011 010 001
p 1
检查位置
1
、
3
、
5
、
7
的位(最低位为 1) 。所以
p 1 = d 1 ⊕ d 2 ⊕ d 4 = 1 ⊕ 0 ⊕ 1 = 0
,所以
p 1 = 0
。p 2
检查位置
2
、
3
、
6
、
7
的位(次低位为 1)。这些位的异或值为
p 2 = d 1 ⊕ d 3 ⊕ d 4 = 1 ⊕ 1 ⊕ 1 = 1
,所以
p 2 = 1
。p 3
检查位置
4
、
5
、
6
、
7
的位(最高位为 1) 。这些位的异或值为
p 3 = d 2 ⊕ d 3 ⊕ d 4 = 0 ⊕ 1 ⊕ 1 = 0
,所以
p 3 = 0
。位置 7 6 5 4 3 2 1 海明码 d 4 d 3 d 2 p 3 d 1 p 2 p 1 数据 1 1 0 0 1 1 0
所以,
1011
的
( 7 , 4 )
海明码是 0110011 。任何一位的单一错误都可以通过分析 校验位 来检测并纠正。
检测和纠错 还是以 上文的例子 来说明海明码检测和纠错的过程。
假设在传输过程中第二位出现了错误,接收的码变为
0010011
。
首先,接收者现在要 重新计算校验位 :
p 1
(位置 1):检查二进制最低位为 1 的位置(1, 3, 5, 7),即
p 1 , d 1 , d 2 , d 4 p 1 ′ = 0 ⊕ 1 ⊕ 0 ⊕ 1 = 0 接收到的
p 1 = 0
,所以
p 1 ′ = p 1
,无错误 p 2
(位置 2):检查二进制第二位为 1 的位置(2, 3, 6, 7),即
p 2 , d 1 , d 3 , d 4 p 2 ′ = 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1 接收到的
p 2 = 0
,所以
p 2 ′ = p 2
,有错误 p 3
(位置 4):检查二进制第三位为 1 的位置(4, 5, 6, 7),即
p 3 , d 2 , d 3 , d 4 p 3 ′ = 0 ⊕ 0 ⊕ 1 ⊕ 1 = 0 接收到的
p 3 = 0
,所以
p 3 ′ = p 3
,无错误 1 1 0 0 1 0 0 p 1 p 2 p 3 d 1 d 2 d 3 d 4 1 1 0 0 1 0 0 1 1 0 0 1 0 0 ⊕ ⊕ ⊕ p 1 ' = 0 p 2 ' = 1 p 3 ' = 0 可以看到有错误发生,接下来需要 生成错误模式 :
( p 1 ′ ⊕ p 1 , p 2 ′ ⊕ p 2 , p 3 ′ ⊕ p 3 ) = ( 0 ⊕ 0 , 1 ⊕ 0 , 0 ⊕ 0 ) = ( 0 , 1 , 0 )
错误模式为二进制 010 ,十进制值为 2 ,表示错误在位置 2 (即
p 2
)。
最后一步是 纠正错误 :位置 2 的值
p 2
从 0 翻转为 1,得到纠正后的码字:
位置 7 6 5 4 3 2 1 海明码 d 4 d 3 d 2 p 3 d 1 p 2 p 1 修改前 1 1 0 0 1 0 0 修改后 1 1 0 0 1 1 0
现在,海明码回到了正确的 0110011 状态。
海明距离 在数据传输或存储过程中,比特可能会受到噪声干扰,从 0 变成 1,或者从 1 变成 0,这种现象称为 比特翻转 。
例如,发送端原本发送:101101,接收端实际收到:100111
对比两个比特序列可以发现,第 3 位和第 5 位发生了变化,因此一共发生了 2 位错误 。
这种“两个等长比特序列在多少个位置上不同”的数量,就称为它们之间的 海明距离 。
设两个长度相同的比特序列分别为:
x = x 1 x 2 ⋯ x n , y = y 1 y 2 ⋯ y n
则它们之间的海明距离记作:
d ( x , y )
其值等于满足
x i = y i
的位置个数。
因此,如果发送码字为
x
,接收序列为
y
,并且:
d ( x , y ) = t
就说明传输过程中一共发生了
t
位错误。
编码集 应用层产生的原始数据可以由 0 和 1 任意组合。对于长度为
k
的原始信息,一共有
2 k
种可能的比特串。
为了使数据具备检错或纠错能力,发送端会对原始信息进行差错控制编码,将每个长度为
k
的 原始信息 转换为长度为
n
的 码字 ,通常有:
n > k
其中,多出的
n − k
位用于承载校验信息,因此称为 冗余位 。
编码过程可以表示为:
0 , 1 k ⟶ C ⊆ 0 , 1 n
其中,
C
表示编码规则能够产生的所有码字的集合,称为 编码集 ,也称为 码(code) 。
原始信息 k = 2 位,共 2ᵏ = 4 种 00 原始信息 0 01 原始信息 1 10 原始信息 2 11 原始信息 3 编码映射 {0,1}ᵏ → C ⊆ {0,1}ⁿ 冗余位 = n − k 位 n 位比特空间(n = 3) 全部 2ⁿ = 8 种比特串 编码集 C(合法码字) 共 2ᵏ = 4 个 000 ← 00 的编码 011 ← 01 的编码 101 ← 10 的编码 110 ← 11 的编码 非法比特串 共 2ⁿ − 2ᵏ = 4 个 001 不在 C 中 010 不在 C 中 100 不在 C 中 111 不在 C 中 检错原理 接收端若收到不属于 C 的比特串,即可判定传输发生了错误 全部可能的
n
位比特串共有
2 n
个,但编码规则通常只使用其中的
2 k
个作为码字。其余
2 n − 2 k
比特串仍然是正常的二进制序列,只是不属于当前编码集。
例如,假设用 2 位信息表示四种原始数据,并将其编码为 3 位码字:
00 01 10 11 ⟶ 000 , ⟶ 011 , ⟶ 101 , ⟶ 110.
那么该编码集为:
C = 000 , 011 , 101 , 110
在全部
2 3 = 8
个 3 位比特串中,只有这 4 个属于编码集。
接收端事先知道发送端只会发送编码集中的码字 。因此,当接收到一个不属于编码集的比特串时,就可以判断数据在传输或存储过程中发生了错误。
最小海明距离 编码集
C
的 最小海明距离 定义为任意两个 不同码字之间海明距离的最小值 :
x , y ∈ C x = y min d ( x , y )
通常也将其简记为
d
。
最小海明距离反映了编码集中距离最近的两个合法码字相隔多远。它直接决定编码集的容错能力:
d m i n − 1
t = ⌊ 2 d m i n − 1 ⌋
检测和纠错位数是如何得到的 其原因可以从码字之间的距离进行理解。
假设两个合法码字
x
和
y
的距离为
d m i n
。要把
x
经过比特翻转变成另一个合法码字
y
,至少需要翻转
d m i n
位。因此,只要错误位数小于
d m i n
,错误后的序列就不可能成为另一个合法码字,接收端便能够判断数据发生了错误。
所以最多可以检测
d m i n − 1
位错误。
对于纠错,接收端通常采用 最近邻译码 :将接收到的序列判定为与其海明距离最近的合法码字。
要保证接收序列仍然唯一地靠近原码字,原码字周围可纠正的范围不能与其他码字的可纠正范围重叠。因此需要满足:
2 t < d m i n
由此得到:
t = ⌊ 2 d m i n − 1 ⌋
最小海明距离越大,码字在整个比特空间中越“分散”,发生一定数量的比特翻转后,接收端越容易区分原始码字。
例如,设编码集为:0000, 0110, 1011
三组码字之间的海明距离分别为:
0000 与 0110 的海明距离为 2 ,第 2、3 位不同;0000 与 1011 的海明距离为 3 ;0110 与 1011 的海明距离为 3 。因此,该编码集的最小海明距离为:
d m i n = 2
根据公式,该编码集最多可以:
检测
d m i n − 1 = 1
位错误; 纠正
⌊ 2 1 ⌋ = 0
位错误。 也就是说,它能够发现单比特错误,但无法保证确定原始码字。
例如,接收到 0010,它与 0000 和 0110 的海明距离都为 (1)。因此,接收端虽然知道发生了错误,但无法判断原本发送的是哪个码字。
如果想要稳定地纠正 1 位错误,就必须使任意两个合法码字之间至少相隔 3 位,即:
d m i n ≥ 3
海明码示例 海明码(Hamming Code) 是一种经典的线性分组码,其最小海明距离为 d = 3
。这意味着:
可以 检测最多 2 位错误 。 可以 纠正 1 位错误 。 接收端在解码过程中,会计算出一个称为 伴随式(syndrome) 的比特序列,用于判断是否发生了错误,以及错误的位置:
若伴随式为全零,说明数据未被破坏; 若伴随式为非零,且对应某个位的错误模式,则可准确定位并纠正该位; 若发生 2 位错误 ,伴随式可能不唯一,可检测但不可纠正 ,因为错误位置无法唯一确定。 3 - 流量控制 选择题和解答题都经常考查 ARQ 协议,三个重点不能忽略:1. 三种 ARQ 协议的 实现原理 。 2. 窗口大小的限制 。3. 信道利用率 的计算方法。
这一节都是理解性内容,需要理清背后的原理。
ARQ 协议 ARQ 协议是一类 可靠数据传输协议 ,用于在 不可靠的信道 (比如可能出错或丢包的网络链路)上实现 可靠通信 。
ARQ 协议的 核心思想 是:
发送方在发送数据后,必须等待接收方的确认(ACK)。 如果在规定时间内没有收到确认,就认为数据丢失或出错,需要重传。 ARQ 协议主要包括三种形式:停等 (Stop‑and‑Wait)、回退 N 帧 (Go‑Back‑N)以及 选择性重传 (Selective Repeat)。其中,回退 N 帧和选择性重传统称为 连续 ARQ 协议 。
ARQ 协议(Automatic Repeat reQuest) ACK 编号表示接收方下一次期望收到的帧 核心思想: • 发送方发送数据后,根据接收方返回的 ACK 判断数据是否正确到达 • ACK = n 表示编号小于 n 的帧已按要求收到,下一帧期望收到编号 n • 超时或收到重复 ACK 时,发送方重传丢失或出错的数据 三种主要 ARQ 协议 停等 ARQ (Stop-and-Wait) 发送方 接收方 数据帧 0 ACK 1 数据帧 1 ACK 2 特点:发送一帧,等待对应确认 效率较低,实现简单 回退 N 帧 ARQ (Go-Back-N) 发送方 接收方 帧 0 帧 1 帧 2 帧 3 丢失 帧 4、5 被丢弃 ACK 3 重复 ACK 3 重传帧 3、4、5…… 特点:采用累计确认 丢帧后从缺失帧开始回退重传 选择性重传 ARQ (Selective Repeat) 发送方 接收方 帧 0 帧 1 帧 2 丢失 帧 3 到达并缓存 ACK 1 ACK 2 ACK 2 + SACK 3 只重传帧 2 ACK 4 特点:缓存失序帧,只重传缺失帧 效率最高,实现最复杂 回退 N 帧与选择性重传均属于连续 ARQ;图中 ACK 采用“下一期待帧编号”语义 ARQ 在哪一层使用
考研模型里默认:
链路层:可能用 ARQ(作为差错控制手段之一),适用于误码率较高的链路 传输层:一定用 ARQ(TCP) 但要记住一句本质话:
ARQ 不是某一层专属,而是一种“机制”,可以出现在不同层。
如果 TCP 是保证可靠传输,那么链路层为什么还需要使用 ARQ?
如果链路层不大可靠的话,链路层 ARQ 可以在底层迅速修补了大多数偶发的比特错误,让上面的 TCP 以为链路几乎从不丢包,从而避免了频繁进入“拥塞控制”状态,大幅提升了吞吐量。
停等协议 停等(Stop‑and‑Wait)是一种最基本的 自动重传请求 (ARQ)协议。其核心思想是:发送方在发送完每一个数据帧后立即停止发送,并 等待 接收方的 确认 (ACK)。只有在收到确认后,发送方才会继续发送下一个帧。由于任意时刻网络中只会有一个 帧在传输,所以该协议也被称为“停等”。
sequenceDiagram
participant S as 发送方(Sender)
participant R as 接收方(Receiver)
S->>R: 发送数据帧 Frame[0]
Note over S: 启动计时器
R--xS: ACK[0] 丢失
Note over S: 计时器超时,未收到 ACK
S->>R: 重传数据帧 Frame[0]
Note over S: 重新启动计时器
R-->>S: 发送确认帧 ACK[0]
Note over S: 收到 ACK[0],停止计时器
S->>R: 发送数据帧 Frame[1]
Note over S: 启动计时器
R-->>S: 发送确认帧 ACK[1]
Note over S: 收到 ACK[1],停止计时器 停等协议的 工作过程 如下:
发送数据 发送方将一个数据帧发送给接收方。 同时启动 计时器 ,用于监控该帧的确认是否在规定时间内到达。 等待确认 在计时器超时之前,发送方保持在“等待”状态。 此期间若收到 确认帧 (ACK),则说明该帧已成功到达并被正确接收。 确认的接收 接收方收到数据帧后,首先检验其完整性(如校验和、序号等)。 若数据帧无误,接收方立即发送 确认帧 (ACK)回给发送方;若检测到错误,则不发送 ACK,导致发送方超时后重传。 计时器到期 若计时器在收到确认之前到期,发送方认为该帧或其确认已丢失。 发送方随后 重新发送 同一数据帧,并重新启动计时器,重复上述过程直至收到有效的确认。 StopAndWait cluster_sender 发送方 cluster_receiver 接收方 start 开始 send_frame 发送数据帧 启动计时器 start->send_frame wait_ack 等待确认 (等待状态) send_frame->wait_ack recv_check 接收方检验 数据帧完整性 send_frame->recv_check 数据帧传输 timeout_check 计时器 超时? wait_ack->timeout_check 等待超时 recv_ack 收到确认帧 (ACK) wait_ack->recv_ack 收到ACK send_ack 发送确认帧 (ACK) recv_check->send_ack 数据正确 no_ack 不发送ACK (检测到错误) recv_check->no_ack 数据错误 send_ack->recv_ack ACK传输 no_ack->timeout_check 无ACK timeout_check->recv_ack 否 (收到ACK) retransmit 重新发送 同一数据帧 重启计时器 timeout_check->retransmit 是 (超时) success 传输成功 准备下一帧 recv_ack->success retransmit->wait_ack 重新等待 success->start 下一帧 通过上述四个步骤,停等协议实现了可靠的点对点数据传输,尽管其效率受限于 “每次只能发送一个帧” 的特性。
回退 N 帧 在 回退 N 帧 (GBN,Go‑Back‑N)协议中,发送窗口 指的是发送方在未收到确认的情况下,最多可以连续发送的数据帧数量。它像一个滑动窗口,控制着数据的发送节奏。
发送方可以在等待确认的过程中,连续发送多个帧,但总数不能超出发送窗口的大小。当窗口被填满时,发送方必须停下来等待确认,收到确认后窗口才能向后滑动,从而腾出空间发送新的帧。
回退 N 帧的语义如何理解?
当发送方检测到某个数据帧超时(或收到重复的 ACK / NAK)时,它不会只重传那一帧,而是“回退”到该丢失帧的序号,并重新发送从该序号开始的所有后续帧 —— 即使这些帧之前已经发送过。
sequenceDiagram
participant S as 发送方 (Sender)
participant R as 接收方 (Receiver)
Note over S,R: 窗口大小 W = 4,序号空间 0-3
S->>R: Frame[0]
R->>S: ACK0 (确认帧0)
S->>R: Frame[1] (丢失)
S->>R: Frame[2]
R->>S: ACK0 (仍期望帧1,丢弃帧2)
S->>R: Frame[3]
R->>S: ACK0 (丢弃帧3,仍期望帧1)
Note over S: 定时器超时,回退到Frame[1]
S->>R: Frame[1] (重传)
R->>S: ACK1 (确认帧1)
S->>R: Frame[2] (重传)
R->>S: ACK2 (确认帧2)
S->>R: Frame[3] (重传)
R->>S: ACK3 (确认帧3)
Note over S,R: 全部确认完毕,窗口前移 回退 N 帧的 核心要点 如下:
窗口大小 若帧序号使用
n
位二进制,则序号空间大小为
2 n
。 为保证不产生歧义,GBN 的发送窗口大小
W
必须满足
W ≤ 2 n − 1
,因此 最大窗口大小 为
2 n − 1
。 接收窗口的大小固定为 1 ,即接收方只能一次接受并确认期望的序号。 发送过程 只要发送窗口未满,发送方就可以把窗口内的帧依次发送出去。 对于 最早发送且尚未被确认的帧 (即窗口中的第一个未确认帧),发送方启动 单一的超时计时器 。 其余已发送但尚未确认的帧不再单独维护计时器,而是共享这一个计时器。 接收过程 接收方维护一个 期望序号 (expected sequence number)。 当收到的帧序号等于期望序号时,接收方接受该帧并发送 累计确认 ACK (确认该帧及其之前的所有帧)。随后期望序号加 1。 若收到的帧序号不是期望序号(说明前面的某帧丢失),接收方直接 丢弃该帧 ,并 重新发送最近一次正确接收的帧的 ACK 。由于接收窗口为 1,后续已到达但序号不连续的帧都会被丢弃。 超时与重传 当 超时计时器 触发时,发送方认为窗口中最早的未确认帧已丢失。按照 GBN 的工作原理,发送方会 从该帧开始 ,把窗口内的所有帧全部 重新发送 。 这样做的原因是:即使后面的帧已经到达接收方,由于接收窗口仅能接受连续的序号,这些帧会在接收方被丢弃,只有最早丢失的帧被重新发送后,后续帧才能被顺利接收。 GBN_Protocol cluster_sender 发送方 (Sender) cluster_send_window 发送窗口 (W ≤ 2^n - 1) cluster_receiver 接收方 (Receiver) cluster_seq_space 序号空间 (n位二进制) frame0 帧0 (已发送) channel 传输信道 frame0->channel 发送帧0 frame1 帧1 (已发送) frame1->channel 发送帧1 frame2 帧2 (已发送) frame2->channel 发送帧2 frame3 帧3 (可发送) frame4 帧4 (可发送) timer 单一超时计时器 (针对帧0) timeout_action 超时触发: 从最早未确认帧开始 重传窗口内所有帧 timer->timeout_action 超时触发 send_action 发送动作: • 依次发送窗口内帧 • 为最早未确认帧启动计时器 channel->frame0 ACK确认 recv_window 接收窗口 = 1 期望序号: 0 channel->recv_window 接收帧 recv_window->channel 发送ACK (累计确认) sliding_action 收到累计ACK: 窗口向前滑动 释放已确认帧位置 recv_window->sliding_action 正确接收 recv_action 接收动作: • 序号 = 期望序号 → 接受+ACK • 序号 ≠ 期望序号 → 丢弃+重发ACK seq_space 序号范围: 0 到 2^n - 1 最大窗口: W ≤ 2^n - 1 seq_space->frame0 序号约束 timeout_action->frame0 重传所有未确认帧 sliding_action->frame0 窗口滑动 features GBN关键特性: 1. 发送窗口: W ≤ 2^n - 1 2. 接收窗口: 固定为1 3. 累计确认机制 4. 超时重传所有未确认帧 5. 序号不连续则丢弃 通过 GBN、SR 交互演示 可以直观地了解 Go‑Back‑N 与 Selective Repeat 的工作流程,加深对上述概念的理解。
选择性重传 选择性重传 (SR,Selective Repeat)是一种 自动重传请求 (ARQ )协议,专门用于克服回退 N 帧(Go‑Back‑N)在高误码率环境下的效率低下。与 Go‑Back‑N 不同,SR 只 重传 那些真正丢失或出错的帧,而不必重新发送随后所有的帧,从而在误码率较高的链路上表现得更为高效。
sequenceDiagram
participant S as 发送方 (Sender)
participant R as 接收方 (Receiver)
Note over S,R: 窗口大小 W = 4,序号空间 0-7
S->>R: Frame[0]
R->>S: ACK0 (确认帧0,交付上层)
S->>R: Frame[1] (丢失)
S->>R: Frame[2]
R->>S: ACK2 (缓存帧2,等待帧1)
S->>R: Frame[3]
R->>S: ACK3 (缓存帧3,等待帧1)
Note over R: 已缓存 {2,3},但因缺少1不能交付
Note over S: 定时器1超时,仅重传帧1
S->>R: Frame[1] (重传)
R->>S: ACK1 (确认帧1,立即交付 {1,2,3})
Note over R: 交付顺序为 1,2,3,接收窗口滑动
Note over S,R: 窗口继续前移,可发送后续帧4,5... 选择性重传的 核心要点 如下:
窗口大小 在 SR 中,发送窗口和接收窗口的大小保持一致。 若帧序号采用
n
位二进制表示,则窗口的最大取值为 2 n − 1
(即序号空间的半数),以避免发送方和接收方窗口的重叠产生歧义。 发送过程 发送方在其发送窗口范围内连续发帧。 每发送一帧,就为该帧启动一个 计时器 ;计时器独立于其他帧,超时后仅针对该帧进行重传。 接收过程 接收方接受所有落在接收窗口中的帧,即使这些帧顺序错乱。 对于每一正确收到的帧,接收方立即发送 确认 (ACK)。 乱序到达的帧会被 缓存 ,待窗口前面的缺失帧补齐后,按正确顺序交付给上层。 超时与重传 当某帧的计时器到期,发送方只 重传 该帧,而不是窗口内的全部帧。这一点是 SR 与 GBN 的根本区别,也是 SR 在高误码率下保持高吞吐量的关键。 滑动窗口机制 发送方 :收到帧的确认后,窗口左边界向前移动,释放已确认的帧槽位,随后可以发送新的帧。接收方 :当缓存的帧已能够连续组成一个完整序列并交付给上层后,接收窗口也向前滑动,腾出空间接收后续帧。冲突确认的处理 由于网络延迟,发送方可能在重传帧后才收到该帧的早期确认。 为避免误判,SR 协议必须具备 识别并丢弃重复确认 (duplicate ACK)的机制,只对最新、有效的确认作出响应。 SR_Protocol cluster_window 1. 窗口大小设计 cluster_sender 2. 发送方流程 cluster_receiver 3. 接收方流程 cluster_features 4. SR协议关键特性 title 选择性重传(SR)协议核心概念 window_size 窗口大小 = 2^(n-1) (序号空间的一半) title->window_size window_reason 防止发送窗口与 接收窗口重叠歧义 window_size->window_reason 设计原因 send_frames 在窗口内连续发帧 window_reason->send_frames start_timer 为每帧启动独立计时器 send_frames->start_timer timeout_retrans 超时仅重传该帧 (非全部帧) start_timer->timeout_retrans 超时 receive_ack 收到ACK后窗口滑动 start_timer->receive_ack 收到确认 receive_frame 接收窗口内的帧 (允许乱序) timeout_retrans->receive_frame 重传帧 selective 选择性重传 只重传丢失帧 timeout_retrans->selective receive_ack->send_frames 继续发送 send_ack 立即发送ACK receive_frame->send_ack buffer_frame 乱序帧缓存等待 receive_frame->buffer_frame 乱序 send_ack->receive_ack ACK传输 deliver_ordered 按序交付上层 buffer_frame->deliver_ordered 补齐 high_throughput 高误码率下 保持高吞吐量 buffer_frame->high_throughput slide_window 接收窗口滑动 deliver_ordered->slide_window selective->high_throughput independent_timer 独立计时器机制 independent_timer->selective duplicate_ack 处理重复ACK 避免误判 duplicate_ack->selective comparison SR vs GBN SR: 选择性重传单帧 GBN: 重传所有后续帧 协议对比 几种 ARQ 协议的主要区别是通过发送和接收窗口体现的:
发送窗口
定义 :发送方在未收到对方确认(ACK)的情况下,允许连续发送的最大帧数量(或数据单元数量)。作用 :控制发送方的数据发送速率,避免因发送过快导致网络拥塞或接收方处理不过来。接收窗口
定义 :接收方允许接收并缓存(或直接交付)的帧的最大数量,通常决定了接收方可以接受乱序或非连续帧的能力。作用 :明确接收方能够处理的数据范围(包括按序和乱序数据),超出窗口的数据会被丢弃。发送窗口 :决定发送方能“同时发多少”。接收窗口 :决定接收方能“同时收多少”以及“是否支持乱序接受”。ARQ 发送窗口与接收窗口示意图 展示发送方和接收方的滑动窗口机制,包括已发送未确认、可发送、不可发送等状态分区 发送方 0 1 发送窗口(W=4) 2 3 4 5 6 7 8 9 已确认 发出 / 待ACK 可发送 超出窗口 发送基 下一待发 窗口边界 ACK 2 ← 收到ACK后,窗口向右滑动 接收方 0 1 接收窗口(W=4) 2 3? 4 5? 6 7 8 9 已交付上层 已接收 等待中 乱序缓存 丢弃(窗口外) 丢弃 已确认/已交付 发出待ACK 可发送 / 已按序接收 乱序缓存 等待帧 三个 ARQ 协议的具体区别如下:
特性 停等协议 GBN(Go‑Back‑N)协议 SR(Selective‑Repeat)协议 发送方窗口大小(序号位数为 n) 1(一次只能发送一帧) 最多
2 n − 1
(可并发发送多帧) 最多
2 n − 1
(可并发发送多帧) 接收方窗口大小(序号位数为 n) 1(只接受一帧) 1(只能接受按序的下一帧) 与发送方窗口大小相同(可接受乱序帧) 超时重传单位 单个数据帧即整个发送窗口 整个发送窗口 单个数据帧 发送方效率 低——每发送一帧必须等待确认 高——在确认到达前可连续发送多帧 高——仅对出错帧进行重传,其他帧不受影响 接收方效率 高——无需缓存,按序直接交付 低——必须按照顺序接收 高——可以缓存并按序交付已收到的乱序帧 错误处理方式 只重传丢失的那一帧 从第一个出错帧起,全部帧都要重传 只重传出错或乱序的那一帧(或若干孤立的帧) 带宽利用率 低——大量空闲时间 高——大多数时间都在利用链路带宽 高——仅在必要时占用带宽进行重传
窗口大小限制 在说明窗口大小限制之前,必须先区分三种不同的“编号”概念:
假设序列号位数为 3,那么序列号范围为 [0, 7]
绝对编号 :指帧在整个逻辑发送流中的真实顺序编号。
该编号会随着发送不断递增:
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , …
绝对编号本身通常认为是无限增长的,仅用于逻辑分析。
序列号(循环编号) :协议首部中的编号字段长度有限。
若序列号字段使用
n
位,则序列号范围为:
0 ∼ 2 n − 1
超过后重新从 0 开始循环。
例如当 (n=3) 时:
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 0 , 1 , 2 , …
协议真正传输的是 序列号(循环编号) 。
发送窗口与接收窗口本质上是在“循环序列号空间”上滑动。
这可以与 TCP 中的 绝对下标和序列号 进行类比。
假设协议中的序列号字段使用
n
位,则序列号空间大小为:
2 n
发送窗口大小(
W s
)与接收窗口大小(
W r
)必须满足:
W s + W r ≤ 2 n
为什么有这个限制?
根本原因是防止 序列号回绕(wrap around)带来的歧义 。
当发送窗口和接收窗口的大小之和超过
2 n
时,可能出现以下情况:
一个新帧使用了与之前某个仍在网络中滞留的旧帧相同的序列号; 接收方无法区分该帧是“新的合法帧”还是“旧的延迟到达帧”。 通过保证:
W s + W r ≤ 2 n
可以确保在任何时刻,发送窗口与接收窗口不会在序列号空间中发生重叠,从而避免不同绝对编号的帧使用同一序列号时产生歧义。
极端情况下:当接收方收到了所有数据帧,但是所有确认帧都丢失的情况下,
发送窗口和接收窗口会具有相同的 序列号,但是所对应的数据帧不同
假设序列号位数为 2,序列号范围为 0,1,2,3
假设发送窗口大小 4,接收窗口大小 1,
4 + 1 > 4
假设发送窗口大小 3,接收窗口大小 3,
3 + 3 > 4
信道利用率 在 ARQ 协议中,信道利用率 (也叫做链路利用率)是指信道用于传输有效数据的效率,通常定义为 成功传输数据的时间占总传输时间的比例 。它反映了协议在给定信道条件下的性能,是评估 ARQ 协议效率的重要指标。
信道利用率
U
可以表示为
U = T t o t a l T d a t a
其中:
T d a t a
:成功传输有效数据的时间。T t o t a l
:总时间,包含数据传输、确认、重传以及等待。计算方法 对于 ARQ 协议,假设信号传播时间为
T p
,一个数据帧的传输时间为
T d
,一个确认帧的传输时间为
T a
,发送窗口的最大值为
N
,信号往返时间
RTT = 2 ⋅ T p
。
在此情况下,信道利用率
U
= 发送数据的时间 / 从发送第一个帧的时间到收到第一个确认帧的时间:
U = RTT + T d + T a N ⋅ T d
停等协议 对于停等协议,信道利用率为
U = RTT + T d + T a T d
连续 ARQ 协议 对于使用了滑动窗口的协议(比如回退 N 帧和选择性重传),一次性可以传输
N
个数据帧,信道利用率为
U = RTT + T d + T a N ⋅ T d
注意有些时候确认帧比较小,在这种情况下确认帧传输时间
T a
可以忽略。
此外,
U ≤ 1
,所以当
N ⋅ T d > RTT + T d + T a
时,信道利用率
U = 1
。
4 - 介质访问控制 数据链路层的另一个重点(之前一个是 ARQ 协议),重点掌握 CSMA/CD 的细节,会在选择题和解答题中考查。多路复用和 CSMA/CA 也要熟悉下,会在选择题中考查。
ALOHA 协议说实话没考察过,但是出现过在考纲中,所以还是加在教程中。
共享介质 在介绍 MAC 概念之前,必须要说明一下 共享介质 的概念。
在一个网络环境中,多个设备可能需要同时访问同一个 物理介质 来发送数据,这个介质可以是 电缆 、光纤 或者 无线信道 。
当设备发送数据时,数据包会在整个介质上传播,所有连接到该介质的设备都可以接收到数据包。
如果多个设备同时发送数据,介质上的数据信号就会相互 冲突 进而导致错误。
所以 MAC 协议确保了 共享介质 上的有效、公正且有序的数据传输。
其实现代网络架构很少有这种共享介质了,但是考研的语境下,只要题目出现:
CSMA/CD 冲突(collision) 传播时延 最小帧长 你就要立刻切换到这个模型:
共享信道 + 广播传播 + 半双工
所有设备接在同一根“线”上 一个设备在一个时刻只能发送或者接收数据 任意发送 = 信号扩散到整个网络 所有设备都能“听到” 用一句话总结这个模型:
一人发,全网听;但只认目的地址
MAC 方式总结 介质访问控制(MAC,Media Access Control)可以分为 信道划分 以及 随机访问 两种大方向。
信道划分介质访问控制
也叫做 多路复用 ,在一条传输介质上同时传输 多个不同种类的信号 (种类可以根据不同的参数进行划分),这样不同的设备可以发送特定类型的信号,并且不同信号之间相互不干扰,信道划分 访问控制可以分为以下几种:
FDM:频分多路复用 TDM:时分多路复用 WDM:波分多路复用 CDM:码分多路复用 随机访问介质访问控制
指多台设备共享同一个 通信介质 时,它们可以随机地尝试发送数据,而不需要事先协调,当发生冲突后再做后续的协调,以保证不会接收到错误的数据。
mindmap
root((MAC 介质访问控制))
信道划分介质访问控制
多路复用
同时传输多个不同种类的信号
不同设备发送特定类型信号
信号间相互不干扰
FDM
频分多路复用
TDM
时分多路复用
WDM
波分多路复用
CDM
码分多路复用
随机访问介质访问控制
共享通信介质
多台设备随机尝试发送数据
无需事先协调
冲突后进行后续协调
保证接收正确数据
ALOHA
CSMA
CSMA/CD
CSMA/CA 多路复用 多路复用(Multiplexing)是一种技术,用于在同一 传输介质 上同时传输 多个信号 ,包含频分多路复用(FDM)、时分多路复用(TDM)、波分多路复用(WDM)和码分多路复用(CDM)四种。
FDM 频分多路复用(FDM)将可用带宽划分为若干个不重叠的 频段 ,每个 信号 占用一个频段。各个信号可以同时传输,但彼此之间不会干扰,因为它们占用不同的频率。
FDM 在传统的模拟电话系统和广播中广泛使用。
TDM 时分多路复用(TDM)将 时间 划分成若干个 时隙 ,每个 信号 在不同的时隙中传输。所有信号在时间上轮流使用同一传输介质。
TDM 常用于数字通信系统,如数字电话网络。
WDM 波分多路复用(WDM)是 FDM 的一种应用,主要用于 光纤通信 。它将光纤的可用带宽划分为多个 波长 (颜色),每个 信号 占用一个波长。
WDM 技术可以大幅增加光纤的通信容量,广泛应用于长距离和高速光纤网络。
CDM 码分多路复用(CDM)使用不同的 编码 来区分各个 信号 。所有信号可以在同一 频带 上同时传输,但通过使用不同的编码序列来避免相互干扰。
虽然 CDM 的概念可以用在许多不同的传输系统中,但在实践中,它主要作为 码分多址 (CDMA ,Code Division Multiple Access)的基础技术。
CMDA
在 CDMA 中,每一个 比特时间 划分为 m 个短的 时间槽 ,称为 码片 (chip),每个站被指派一个惟一的 m bit 码片序列 (chip sequence) 。
如果发送比特 1,则发送自己的 m 位码片序列。 如果发送比特 0,则发送该码片序列的二进制反码。 +1 −1 ① 比特时间与码片 (chip) 1 个比特时间 码片 1 码片 2 码片 3 码片 4 1 个比特时间被划分为 m 个短时间槽,每个称为一个码片;码片是 CDMA 的最小时间单位(本例 m = 4)。 ② 码片序列 S(每个站点唯一) S = +1 −1 −1 +1 每个站点分配一个唯一的码片序列, 不同站点的序列相互正交。 ③ 如何用码片序列表示比特 0 和 1 1 比特 1 发送原码片序列 S = (+1, −1, −1, +1) +1 −1 +1 −1 −1 +1 0 比特 0 发送反码(各码片取反) S̄ = (−1, +1, +1, −1) +1 −1 −1 +1 +1 −1 口诀:发 1 就发原序列,发 0 就发反码;比特 0/1 被“扩展”成一串 ±1 码片再送入信道。 简单理解就是,A 站向 C 站发出的信号用一个向量来表示,B 站向 C 站发出的信号用另一个向量来表示,两个向量要求相互 正交 。向量中的分量,就是所谓的码片。
当两个或多个站点同时发送时,各路数据在信道中线性相加。为了从信道中分离出各路信号,要求各个站点的码片序列相互 正交 。
令向量
S
表示站 S 的码片向量,令
T
表示其他任何站的码片向量。两个不同站的码片序列正交,就是向量
S
和
T
的规格化内积(inner product)都是 0:
S ⋅ T = m 1 i = 1 ∑ m S i T i = 0
任何站的码片向量和该码片反码的向量的规格化内积都是 -1:
S ⋅ S = m 1 i = 1 ∑ m S i ⋅ S i = − 1
CDMA 的过程可以通过下图辅助理解:
CDMA码分多址工作原理 站点A (发送比特1) 码片序列: (+1, +1, -1, -1) +1 +1 -1 -1 比特时间被分为4个码片 站点B (发送比特0) 码片序列: (+1, -1, +1, -1) 发送反码: (-1, +1, -1, +1) -1 +1 -1 +1 信道中线性叠加 A信号 + B信号 (+1,+1,-1,-1) + (-1,+1,-1,+1) = (0,+2,-2,0) 接收端分离信号 恢复站点A的信号 接收信号 · A码片序列 = (0,+2,-2,0) · (+1,+1,-1,-1) = 1/4 × (0+2+2+0) = +1 → 比特1 恢复站点B的信号 接收信号 · B码片序列 = (0,+2,-2,0) · (+1,-1,+1,-1) = 1/4 × (0-2-2+0) = -1 → 比特0 正交性保证 A · B = 1/4 × ((+1)×(+1) + (+1)×(-1) + (-1)×(+1) + (-1)×(-1)) = 1/4 × (1-1-1+1) = 0 注:码片序列必须相互正交,这样才能在接收端成功分离各路信号 发送比特1时发送原码片序列,发送比特0时发送反码片序列 上图以一个实例展示了 CDMA 的工作过程:
站点 A :码片序列为
S = ( + 1 , + 1 , − 1 , − 1 )
站点 A 发送比特 1,因此发送原码片序列:
( + 1 , + 1 , − 1 , − 1 )
站点 B :码片序列为
T = ( + 1 , − 1 , + 1 , − 1 )
站点 B 发送比特 0,因此发送码片序列的反码:
− T = ( − 1 , + 1 , − 1 , + 1 )
信道叠加 :两个站点的信号在信道中进行线性叠加:
S + ( − T ) = ( + 1 , + 1 , − 1 , − 1 ) + ( − 1 , + 1 , − 1 , + 1 ) = ( 0 , + 2 , − 2 , 0 )
信号分离 :
恢复站点 A 的信号:
4 1 ( 0 , + 2 , − 2 , 0 ) ⋅ ( + 1 , + 1 , − 1 , − 1 ) = 4 1 ( 0 + 2 + 2 + 0 ) = + 1
因此,站点 A 发送的是比特 1。
恢复站点 B 的信号:
4 1 ( 0 , + 2 , − 2 , 0 ) ⋅ ( + 1 , − 1 , + 1 , − 1 ) = 4 1 ( 0 − 2 − 2 + 0 ) = − 1
因此,站点 B 发送的是比特 0。
正交性 :站点 A 和站点 B 的码片序列相互正交:
4 1 S ⋅ T = 4 1 [ ( + 1 ) ( + 1 ) + ( + 1 ) ( − 1 ) + ( − 1 ) ( + 1 ) + ( − 1 ) ( − 1 ) ] = 4 1 ( 1 − 1 − 1 + 1 ) = 0
正交性使不同站点发送的信号在叠加后仍然可以通过相关运算进行分离。
ALOHA 协议 ALOHA 协议是一种早期开发的 随机访问协议 ,用于在 共享信道 上传输数据。ALOHA 有两种基本类型:纯 ALOHA 和时隙 ALOHA。
纯 ALOHA:用户可以在 任何时间 发送数据包。由于没有时间同步,数据包之间容易发生 冲突 。 时隙 ALOHA:时间被分成离散的 时隙 ,用户只能在时隙的开始发送数据包。这种方法通过同步发送时间,减少了 冲突 的概率。 ALOHA 如何检测冲突 在纯 ALOHA 中:
发送端 直接发,不监听信道 也没有“边发边检测”的能力 那怎么知道冲突了?
靠 ACK(确认应答)机制
接收端会对数据进行差错校验,只有当接收端成功接收并通过差错校验(如 CRC)时,才会发送 ACK
纯 ALOHA 纯 ALOHA(Pure ALOHA)是一种简单的 随机接入协议 ,允许用户在 任意时刻 发送数据包,而无需对时间进行任何同步或分时。
Station1 Station2 Station3 Station4 Frame 1.1 Resend Frame 1.2 Frame 2.1 Resend Frame 3.1 Resend Frame 4.1 Frame 2.1 Frame 4.1 Frame 3.1 Collision... Collision... Resend Text is not SVG - cannot display 工作原理:
用户 随时 发送数据包。 如果数据包成功到达接收端,则传输完成。 如果发生 冲突 (即两个或多个用户同时发送数据包),相关用户需要等待随机的时间后重传。 时隙 ALOHA 时隙 ALOHA(Slotted ALOHA)在纯 ALOHA 的基础上引入了 时间同步 ,将时间划分为一系列等长的 时隙 。用户只能在 时隙的开始 发送数据包。
Station1 Station2 Station3 Station4 Frame 1.1 Frame 1.2 Frame 2.1 Resend Frame 3.1 Resend Frame 4.1 Frame 2.1 Frame 4.1 Frame 3.1 Slot 1 Resend Slot 2 Slot 3 Slot 4 Slot 5 Slot 6 Text is not SVG - cannot display 工作原理:
时间被划分为 等长的时隙 。 用户在 时隙的开始 时发送数据包。 如果一个时隙内 只有一个用户 发送数据包,则传输成功。 如果多个用户在同一时隙发送数据包,发生 冲突 ,相关用户等待随机时间后重传。 CSMA 协议 CSMA(Carrier Sense Multiple Access)的中文叫做 载波监听多路访问 。理解 CSMA 的关键在于理解它名称中的两个部分:载波监听 (Carrier Sense)和 多路访问 (Multiple Access)。
载波监听 (Carrier Sense):因为 CSMA 属于随机访问介质控制方式,所以设备在发送数据前,需要先判断当前 通信介质 是否正被其他设备使用。在现代网络中,“载波监听”是一个逻辑概念,指的是检测当前信道是否处于忙碌状态——在有线网络中依赖物理电平检测,在无线网络中依赖能量检测和前导码检测。
因此,载波监听 可以理解为设备具有监听当前 信道 是否空闲的能力。
多路访问 (Multiple Access):多个设备共享同一条 通信介质 ,任何设备都可以在认为信道空闲时尝试发送数据。因此,CSMA 可以理解为:多个设备共享同一通信介质,并在发送前先监听信道是否空闲,以尽可能减少冲突的发生。
CSMA 载波监听多路访问 共享通信介质 (总线/信道) 设备 A 准备发送 载波监听 设备 B 等待发送 载波监听 设备 C 等待发送 载波监听 设备 D 空闲状态 载波监听 数据传输中 载波监听 (Carrier Sense) • 发送前检测信道是否空闲 • 如果有数据传输,等待 • 避免冲突,提高传输效率 多路访问 (Multiple Access) • 多个设备共享同一介质 • 任何设备都可尝试发送 • 提供公平的访问机会 工作原理: 监听 → 判断 → 发送/等待 准备发送 等待中 传输中 空闲 然而,仅仅进行 载波监听 并不能完全避免冲突,其根本原因在于 传播时延 (Propagation Delay)的存在。
这里需要理解两个重要概念:
传播时延 (Propagation Delay ) = 距离 / 信号传播速度传输时间 (Transmission Time ) = 数据大小 / 数据传输速率由于信号传播需要时间,设备监听到的只是 当前时刻本地接收到的信道状态 ,而无法立即获知网络中其他位置刚刚开始发送的数据。
例如,当两个距离较远的设备几乎同时监听到信道空闲时,它们都会开始发送。由于双方发送的信号都需要经过一段时间才能传播到对方,因此双方都会误认为信道仍然空闲,从而同时发送数据,最终在通信介质上发生 冲突(Collision) 。
因此,传播时延会形成一个"冲突窗口" :设备监听到的"空闲"实际上反映的是过去某一时刻的信道状态,而无法预知是否已有其他设备的信号正在传播途中但尚未到达本设备。
那么 CSMA 如何处理冲突呢? CSMA 只规定了 发送前进行载波监听 这一基本机制,并没有规定当多个设备几乎同时发送而发生冲突时应如何处理。
因此,实际网络中通常不会单独使用"纯 CSMA",而是在其基础上加入不同的冲突处理机制,形成了不同的协议:
协议 是否实际应用 应用场景 特点 CSMA ❌ 几乎没有 教学概念 仅规定发送前监听,不规定冲突后的处理方式 CSMA/CD ✅ 是 有线以太网(Ethernet) 监听 + 碰撞检测 + 随机退避重传 CSMA/CA ✅ 是 无线局域网(Wi-Fi) 监听 + 碰撞避免 (尽量降低碰撞概率)+ ACK 确认
接下来将分别介绍 CSMA/CD 和 CSMA/CA 是如何解决这一问题的。
三种类型 CSMA 也 根据其在 信道空闲 时的行为分为三种类型,如下所示:
特征 1-persistent CSMA Non-persistent CSMA p-persistent CSMA 信道空闲时的行为 立即以发送数据 立即开始传输数据 在下一个时隙以概率 p 发送数据;以概率 1-p 推迟到下一个时隙 信道忙时的行为 持续监听,直到信道空闲 等待一个随机时间后,重新监听信道 持续监听,直到信道空闲(进入空闲后的行为见上一条) 碰撞的可能性 最高(多个站点同时等待,一旦空闲必然冲突) 低(随机等待减少了竞争) 中等(通过概率 p 分散了发送时机) 延迟特性 信道空闲时,发送延迟最小;但发生碰撞时,延迟会很大。 避免了多个站点的持续竞争,减少了碰撞,但可能增加平均延迟。 在减少碰撞和控制延迟之间取得平衡。 适用性 实际上很少用于纯ALOHA或CSMA,因为碰撞概率太高。 更像是一个理论参考。 适用于非持续型流量、碰撞概率较高的网络(如早期的以太网) 适用于时隙化信道,是前两种策略的一个很好折中,常用于Wi-Fi等网络。
CSMA/CD 协议 CSMA/CD(CSMA with Collision Detection ,载波监听多路访问/碰撞检测 )是 CSMA 的一种拓展,在了解这个知识之前,请确保你已经理解了什么是 CSMA 中的 CS(Carrier Sense 即 载波监听 ),以及什么是 CSMA 中的 MA(Multiple Access 即 多路访问 )。
CSMA/CD 比 CSMA 多出一个 CD (Collision Detection 即 碰撞检测 )的功能。
在上文中我们提到,CSMA 中监听到信道空闲可能是“虚假 ”,所以在 CSMA 发送数据后介质中也许会发生冲突,但 CSMA 只能依靠非常原始的方案处理冲突。
CSMA/CD 就高级一些,在发送数据期间,我们刚刚提到的 监测器件 (Carrier,就是 CSMA 中 C 的简称)会 一直监听有没有冲突发生 ,
CSMA/CD 载波监听多路访问/碰撞检测 共享通信介质 设备 A 正在发送 发送数据 持续监听 设备 B 正在发送 发送数据 持续监听 碰撞! 数据损坏 时间线 t1: 开始发送 t2: 碰撞发生 t3: 检测到碰撞 t4: 停止发送 CSMA (原始版本) ✓ 发送前载波监听 ✗ 发送时不监听 ✗ 碰撞后才知道失败 → 浪费带宽和时间 → 效率较低 CSMA/CD (改进版本) ✓ 发送前载波监听 ✓ 发送时持续监听 ✓ 实时检测碰撞 → 立即停止发送 → 提高网络效率 碰撞检测(CD)工作流程 1 载波监听 2 开始发送 3 持续监听 4 检测碰撞 5 立即停止 载波监听器件 (Carrier) 发送期间持续工作,实时检测信号异常 以下图为例,假设 A 向 D 发送一段数据,C 向 A 发送一段数据,我们可以观察到:冲突发生 的时间点 和 设备检测到 冲突的时间点是不同的。
当 A 和 C 检测到冲突发生时,它们会立即停止发送,并且发送信号通知其他设备该次碰撞。
流程 CSMA/CD 的工作流程如下:
准备发送 :适配器从网络层获得一个分组,封装成帧,放入网络适配器缓存准备发送。检测信道 :监听信道是否空闲,若信道空闲,则开始发送该帧;若信道忙,则持续检测直至信道空闲。在发送过程中,适配器仍然持续检测信道。这里只有如下两种可能。发送成功 :在争用期内一直未检测到冲突,该帧肯定能发送成功。发送失败 :在争用期内检测到冲突,此时立即停止发送,并且广播 碰撞通知信号 。接着适配器执行 指数退避算法 ,等待一段随机时间后返回到步骤 2。若重传 16 次仍不能成功,则停止重传并向上报错。 指数退避算法 在随机访问网络中,当 冲突 发生后,设备需要 等待一段时间 后重试发送,以避免再次冲突。指数退避算法 (Exponential Backoff Algorithm)通过动态调整等待时间,减少连续冲突的概率,提高网络效率。
其核心思想是当冲突发生时,设备随机选择一个等待时间,并在每次冲突后 成倍增加等待时间范围 ,以降低后续冲突的可能性。
指数增长规则 如下:
如果是第
k
次重传尝试(通常从
k = 1
开始),则从以下范围随机选择等待时间槽(slot)的个数: [ 0 , 2 k − 1 ]
每个时间槽长度为一个基本单位(如 51.2 微秒,以太网中一个“slot time”)。 最大的
k
通常是有限制的,例如 以太网中最大为 10 (即窗口最多增长到
2 10 − 1 = 1023
) 如果尝试达到一定次数仍冲突,放弃传输并上报错误。
举个实际例子:
假设某设备在尝试发送时检测到 冲突 :
第 1 次重试:在 [0, 1] 中随机选择一个时间槽(即可能等待 0 或 1 个 slot time)。 第 2 次重试:在 [0, 3] 中随机选择(0~3 个 slot)。 … 第 10 次重试:在 [0, 1023] 中随机选择。 第 16 次重试后仍失败:报错放弃。 限制条件 CSMA/CD 能够正常工作的 限制条件 是:
帧的传输时间至少要两倍于信号在总线上最长的传播时延 (即两倍于总线端到端的单向传播时延)。
设:
T t
:发送完整个数据帧所需的 传输时间 (Transmission Time)T p
:信号从总线一端传播到另一端所需的 单向传播时延 (Propagation Delay)则 CSMA/CD 正常工作的条件可表示为:
T t ≥ 2 T p
其中
T t = 帧长 / 数据传输速率
因此,上式也可以写成:
最小帧长 ≥ 2 T p × 数据传输速率
该公式说明:最小帧长 由网络的 传播时延 和 传输速率 共同决定。
要在帧的发送过程中及时发现冲突,发送站必须在整个帧发送完毕之前收到冲突信号 。
考虑最坏情况:发送站 A 开始发送时,位于总线另一端的发送站 B 几乎同时开始发送。A 发出的信号需要经过一个传播时延
T p
才能到达 B,而碰撞信息再传播回 A 又需要一个传播时延
T p
。因此,发送站 A 最早也要经过 两个传播时延 后才能检测到碰撞。
所以必须满足:
T t ≥ 2 T p
否则,如果发送时间小于两个传播时延,即
T t < 2 T p
发送站可能在碰撞信号返回之前就已经发送完整个数据帧,从而误认为发送成功,导致冲突无法被检测,CSMA/CD 的碰撞检测和退避机制也就失去了作用。
因此,CSMA/CD 能否正常工作,本质上取决于发送时间是否足够覆盖一个"信号往返传播时间"(Round Trip Time, RTT) 。这一限制最终决定了以太网规定的 最小帧长 (经典以太网为 64 B )。
这一机制的依据是:冲突信号必须在网络中传播并被发送站捕获,发送站才能意识到冲突的发生。若帧的传输时延过短 ,发送站可能在冲突信号返回之前就已结束帧的发送,从而错过冲突的检测。
因此,帧的传输时延必须不小于传播时延的两倍 ,才能确保冲突能够在帧发送完毕前被发现并采取相应的碰撞处理。
最小传输时长 = 2 ×最大传播时延
最小帧大小 = 带宽 ×最小传输时长
B 在 A 发送的信号刚到达的前一瞬间 开始发送数据
A 必须还在传输数据,也就是说数据传输还没有结束, 才能在这个时刻检测到冲突
CSMA/CA 协议 CSMA/CD 适用于 以太网 (使用有线连接的局域网),但在 无线局域网 (WLAN,Wireless LAN)中无法直接使用 CSMA/CD,主要有以下原因:
无线设备 不能同时“听”和“说”:无线收发器在发送数据时,无法同时监听信道来判断是否发生碰撞。信道干扰 比有线环境严重:无线信号受环境干扰更大,误判空闲或碰撞的概率更高。隐藏节点问题 (隐蔽站):假设 A 和 C 两台无线设备都想给 B 发送数据,但 A 和 C 彼此“看不到”,只看到 B 是空闲的。结果就是 A 和 C 同时给 B 发送,发生碰撞,但它们却以为没事。为此,802.11 标准定义了广泛用于无线局域网的 CSMA/CA 协议,它对 CSMA/CD 协议进行修改,将 冲突检测 改为 冲突避免 (Collision Avoidance,CA)。“冲突避免 ” 并不是指协议可以完全避免冲突,而是指协议的设计要尽量降低冲突发生的概率。
隐藏节点问题 (CSMA/CD 在无线网络中失效的根因) AP `A STA C STA 在范围内 在范围内 A 与 C 互相"看不见" 各自以为信道空闲 → 同时发送 → 碰撞 且碰撞发生在 AP 侧,A 和 C 自己无法感知 CSMA/CA 的解决思路 冲突避免(Collision Avoidance) 1 载波监听(Carrier Sense) 发送前先"听"信道是否忙碌 2 等待 DIFS + 随机退避 信道空闲后等一段再随机延迟,错开发送时机 3 发送数据帧 退避结束后发送(无法边发边检测碰撞) 4 等待 ACK 确认 ACK 到达 → 成功;超时未到 → 重发并扩大退避窗口 CSMA/CD vs CSMA/CA 对比维度 CSMA/CD(有线以太网) CSMA/CA(无线 802.11) 冲突处理策略 边发边检测,冲突后立即停止 发送前退避,尽量避免冲突 确认机制 无需 ACK(冲突直接感知) 必须等待 ACK 确认成功 帧长最小限制 有(确保碰撞可被检测到) 无此限制 信道预约 无 可选 RTS/CTS 预约信道 适用场景 有线局域网(以太网) 无线局域网(Wi-Fi / 802.11) 考点提示: "冲突避免"不代表完全消除冲突,只是尽量降低概率;CSMA/CA 无法"检测"冲突,只能通过 ACK 超时"感知"失败。 CSMA/CA 的核心不是“边发送边检测冲突”,而是 发送前尽量避免冲突,发送后用 ACK 判断是否成功 。408 已考过的角度主要有:802.11 数据帧地址、RTS/CTS 预约信道、IFS 长短、NAV 持续时间计算。
基础概念 在学习 CSMA/CA 之前,先了解无线局域网中的几个基本概念。
STA(Station,站点) :无线局域网中的终端设备,如手机、笔记本电脑等。AP(Access Point,接入点) :无线接入设备,负责连接无线局域网和分布式系统(DS)。家庭中的 Wi-Fi 路由器通常集成了 AP 功能。DS(Distribution System,分布式系统) :连接多个 AP 的网络,通常就是 AP 背后的有线局域网,用于在不同 AP 之间以及无线网络与其他网络之间转发数据。发送方 (Sender)与 接收方 (Receiver):分别表示当前无线链路中发送数据帧和接收数据帧的站点,它们可能是 STA,也可能是 AP。隐藏节点 (Hidden Terminal,也称隐蔽站 ):两个站点彼此无法收到对方的无线信号,但都能与同一个 AP 通信,因此会误以为信道空闲,可能同时向 AP 发送数据,从而发生碰撞。ESS(Extended Service Set) DS — Distribution System(分布式系统 / 骨干有线网络) BSS 1 Basic Service Set AP₁ STA A STA B STA C BSS 2 Basic Service Set AP₂ STA D STA E BSS 3 Basic Service Set AP₃ STA F STA G STA H BSS(基本服务集) 一个 AP 覆盖范围内的所有 STA 组成一个 BSS;同一 BSS 内的通信通过 AP 中转 ESS ESS(扩展服务集) 由多个 BSS + DS 组合而成的更大范围无线网络,对外表现为一个整体 AP AP(接入点) 无线局域网的"基站",负责将 STA 的无线帧桥接到 DS(有线网络) STA STA(站点) 无线终端设备(手机、笔记本等),通过关联到 AP 来加入 BSS DS DS(分布式系统) 连接各 AP 的有线骨干网,负责在不同 BSS 之间转发帧,使跨 BSS 通信成为可能 例:STA-A(BSS 1)→ AP₁ → DS → AP₂ → STA-D(BSS 2) CSMA/CA 正是针对无线信道无法进行碰撞检测以及隐藏节点等问题而设计,通过载波监听、随机退避、ACK 确认以及 RTS/CTS 信道预约 等机制,尽可能降低碰撞发生的概率。
流程 CSMA/CA 做题时,先区分两种情况:
普通发送(默认情况) :监听信道 → 等待 DIFS → 随机退避 → 发送 DATA → 接收方等待 SIFS 后回复 ACK。启用 RTS/CTS(可选机制) :监听信道 → 等待 DIFS → 随机退避 → RTS → SIFS → CTS → SIFS → DATA → SIFS → ACK。其中,RTS/CTS 主要用于缓解隐藏节点问题,并非所有数据帧都会使用。即使不使用 RTS/CTS,CSMA/CA 仍然依靠 载波监听、随机退避和 ACK 确认 来降低冲突发生的概率,只是无法进一步缓解隐藏节点带来的冲突。
普通发送 不使用 RTS/CTS 时,802.11 的普通发送流程如下:
sequenceDiagram
participant A as 发送方
participant B as 接收方
A->>A: 监听信道
A->>A: 信道持续空闲 DIFS
A->>A: 随机退避
A->>B: DATA
Note over B: 等待 SIFS
B-->>A: ACK 普通发送中的 碰撞避免(Collision Avoidance) ,主要体现在发送数据之前的信道监听和随机退避过程。
发送方准备发送数据时,首先监听信道:
如果信道处于忙状态,则暂不发送,等待当前传输结束。 如果信道持续空闲一个 DIFS,发送方也不会立即发送,而是从竞争窗口 (CW) 中随机选择一个退避计数。 如果退避过程中检测到其他站点开始发送,当前站点会:
暂停退避计数; 等待信道重新空闲; 再等待一个 DIFS; 从原来的剩余计数继续退避。 例如,两个站点同时准备发送数据,分别选择退避计数:
A = 3 , C = 7
经过 3 个空闲时隙后,A 的计数先减为 0,于是开始发送。C 检测到信道变忙后暂停计数,避免与 A 同时发送;A 发送结束后,C 再继续完成剩余退避。
因此,普通发送中的 CA 主要体现为:
载波监听 :信道忙时不发送;DIFS 等待 :确认信道已经持续空闲;随机退避 :避免多个站点在信道刚空闲时同时发送;退避冻结 :其他站点发送时暂停计数,避免继续争用;扩大竞争窗口 :传输失败后增大随机退避范围,降低再次冲突的概率。不过,随机退避只能降低碰撞概率,并不能完全消除碰撞。如果两个站点恰好选择了相同的退避计数,它们仍可能同时发送,从而发生碰撞。
对于普通发送,如果没有收到 ACK,发送方并不能确定是否发生了碰撞,只能认为本次传输失败。造成失败的原因可能包括:
与其他站点发生碰撞; 无线信道受到干扰,数据帧出现误码; 接收方没有正确收到数据帧; ACK 在返回过程中丢失。 因此,802.11 不像 CSMA/CD 那样在发送过程中直接检测碰撞,而是通过 ACK 判断本次传输是否成功:
收到 ACK:说明数据帧已被接收方正确接收; 未收到 ACK:认为本次传输失败,但无法确定具体原因。 传输失败后,发送方会扩大竞争窗口 (CW),重新选择随机退避计数,再次竞争信道。其基本思想可以表示为:
C W ↑ ⟹ 随机退避范围扩大 ⟹ 再次碰撞的概率降低
需要注意的是,ACK 的主要作用是进行发送结果确认 ,而不是直接避免碰撞。真正体现“碰撞避免”的,是发送前的监听、DIFS、随机退避和竞争窗口机制。
使用 RTS/CTS 在普通 CSMA/CA 流程中,发送方会先侦听信道,并在退避期间持续侦听,因此:
能彼此“听见”的站点,大多数同时发送的冲突会被载波监听和随机退避提前规避。 当无线局域网中存在 隐藏节点 时,仅依靠物理载波监听和随机退避,仍可能发生碰撞。
例如 A ──> B <── C
A 和 C 都能听见 B,但彼此听不见。于是:
A 监听时,听不到 C,认为信道空闲; C 监听时,也听不到 A,认为信道空闲; 两者可能同时向 B 发送 DATA,在 B 处发生碰撞。 为缓解隐藏节点问题,IEEE 802.11 提供了可选的 RTS/CTS 机制:
RTS (Request To Send):请求发送;CTS (Clear To Send):允许发送。其核心思想是:
先通过较短的控制帧预约信道,再发送较长的数据帧。
使用 RTS/CTS 时,发送流程如下:
具体过程如下:
发送方监听信道。 信道持续空闲一个 DIFS 后,发送方进行随机退避。 退避计数减为 0 后,发送方发送 RTS 。 接收方正确收到 RTS 后,等待一个 SIFS ,回复 CTS 。 发送方收到 CTS 后,等待一个 SIFS ,发送 DATA 。 接收方正确收到 DATA 后,等待一个 SIFS ,回复 ACK 。 因此,完整交换过程可表示为:
监听信道 → 等待 DIFS → 随机退避 → RTS → SIFS → CTS → SIFS → DATA → SIFS → ACK
因此,CTS、DATA 和 ACK 等后续帧可以优先于其他站点的新一轮信道竞争发送,保证已经开始的数据交换能够连续完成。
RTS/CTS 如何降低碰撞代价
RTS 和 CTS 都是较短的控制帧。
多个站点仍可能选择相同的退避计数,并同时发送 RTS,导致 RTS 发生碰撞。但此时损失的只是较短的 RTS 帧,而不是较长的 DATA 帧。
因此,RTS/CTS 的主要作用不是彻底消除碰撞,而是:
缓解隐藏节点问题; 提前预约信道; 将可能发生的碰撞尽量限制在较短的 RTS 帧上; 减少长数据帧碰撞造成的信道浪费。 当数据帧较短时,使用 RTS/CTS 反而会引入额外控制开销。因此,RTS/CTS 通常是可选机制,并非每次传输都必须使用。
NAV 与虚拟载波监听
发送方 A 接收方 B 普通站 C 隐藏站 D (只听到CTS) DIFS RTS SIFS DATA SIFS CTS SIFS ACK NAV (听到 RTS 后设置) 收到RTS NAV (只听到 CTS 后设置) 收到CTS DIFS RTS SIFS CTS SIFS DATA SIFS ACK t SIFS+CTS+SIFS+DATA+SIFS+ACK SIFS+DATA+SIFS+ACK 机制说明 RTS 发送方请求占用信道 携带 Duration 字段 CTS 接收方允许发送 周围站点均可听到 NAV-C 听到 RTS → 设 NAV = SIFS+CTS+SIFS+DATA+SIFS+ACK NAV-D 只听到 CTS → 设 NAV = SIFS+DATA+SIFS+ACK 考点提示 • NAV 从控制帧结束后开始计算 • 不含 DIFS,不含控制帧本身 • 隐藏站错过 RTS,NAV 比普通 站少 SIFS + CTS 隐藏站 D:与发送方 A 相互"看不见",无法收到 RTS; 但能收到接收方 B 发出的 CTS,因此仍能设置 NAV 保持静默。 802.11 中的载波监听分为两种:
物理载波监听 :直接检测无线信道当前是否存在信号;虚拟载波监听 :通过 NAV 判断信道在未来一段时间内是否已被预约。NAV (Network Allocation Vector,网络分配向量)本质上是一个倒计时计时器。
RTS、CTS 等帧中的 Duration 字段会说明:
从当前帧发送结束后,完成本次数据交换还需要占用信道多长时间。
附近站点收到 RTS 或 CTS 后,会根据 Duration 设置 NAV。在 NAV 归零之前,即使物理载波监听发现信道暂时空闲,也不会主动竞争信道。
因此,站点只有在以下两个条件都满足时,才会认为信道空闲:
物理信道空闲 且 NAV=0
NAV 计算
曾经考察过 NAV 的计算 。计算 NAV 时,应抓住一个核心原则:
帧中的 Duration 表示:当前帧发送结束后,后续通信过程还需要占用信道的时间。
假设不考虑传播时延,在 RTS/CTS 交换过程中,需要分两种情况讨论。
收到 RTS 的站点
收到 RTS 的站点知道,RTS 发送结束后还需要依次进行:
SIFS → CTS → SIFS → DATA → SIFS → ACK
因此,RTS 中的 Duration 为:
NAV RTS = 3 T SIFS + T CTS + T DATA + T ACK
这些站点需要在 CTS、DATA 和 ACK 的整个交换过程中保持避让。
收到 CTS 的隐藏站点
隐藏站点可能无法收到发送方发出的 RTS,但可以收到接收方发出的 CTS。
CTS 发送结束后,还需要依次进行:
SIFS → DATA → SIFS → ACK
因此,CTS 中的 Duration 为:
NAV CTS = 2 T SIFS + T DATA + T ACK
RTS/CTS 的局限性
RTS/CTS 只能降低碰撞概率和碰撞代价,不能完全避免碰撞。
例如,多个站点可能:
同时检测到信道空闲; 选择相同的退避计数; 同时发送 RTS; 导致 RTS 在接收方处发生碰撞。 此时接收方无法正确收到 RTS,因而不会返回 CTS。发送方等待 CTS 超时后,会扩大竞争窗口,重新随机退避并重传 RTS。
因此,应准确理解为:
RTS/CTS 通过控制帧预约信道和 NAV 虚拟载波监听,缓解隐藏节点问题,并将碰撞代价尽量限制在较短的 RTS 帧上,但不能彻底消除碰撞。
IFS 由于无线信道的可靠程度不如有线网络,802.11 MAC 层采用与 停等协议 类似的一帧一确认机制,即发送方每发送一帧数据,都需要等待接收方返回 ACK 后才能继续发送下一帧。
发送 DATA → 等待 ACK → { 收到 ACK :本帧成功 未收到 ACK :退避后重传
为了尽量避免冲突,802.11 规定:站点完成一次发送后,并不能立即发送下一帧,而是必须先等待一段时间(期间继续监听信道)。这段等待时间称为 帧间间隔 (InterFrame Space,IFS )。
不同类型的帧对应不同长度的 IFS,通过 IFS 的长短实现优先级控制 :IFS 越短,优先级越高,因此 ACK、CTS 等控制帧能够优先于普通数据帧发送。
802.11 中常见的三种 IFS 如下:
SIFS(Short IFS) :最短,优先级最高,用于 ACK、CTS、分片后的下一帧等需要立即响应的控制帧。PIFS(PCF IFS) :长度介于 SIFS 和 DIFS 之间,用于点协调功能(PCF)。DIFS(DCF IFS) :最长,普通站点发送数据帧前必须等待 DIFS。长度关系如下:
SIFS < PIFS < DIFS
t 信道忙 (上一帧传输) 帧结束 SIFS 最短 PIFS 中等 DIFS 最长 ACK / CTS 立即响应帧 PCF 控制帧 点协调功能 随机退避 Backoff DATA 普通数据帧 长度对比 SIFS PIFS DIFS IFS 用途速查 SIFS ACK、CTS、 分片帧响应 PIFS 点协调功能 (PCF) 帧 DIFS 普通数据帧 争用信道前等待 IFS 越短 → 优先级越高 ACK/CTS 等 SIFS 后发出, 可抢在普通数据帧之前占用信道 SIFS < PIFS < DIFS
因此,题目如果问"哪一种 IFS 最长",要先判断帧的类型:
普通站点竞争发送 DATA 前等待 DIFS 。 ACK、CTS 等应答控制帧发送前等待 SIFS 。 由于 SIFS 最短 ,因此 ACK、CTS 等控制帧能够优先于普通数据帧发送,从而避免再次发生竞争。
802.11 数据帧地址 下图展示了 802.11 数据帧头的完整字段布局。
802.11 数据帧头结构 展示 802.11 帧头各字段:帧控制、持续时间、地址1-4、序号控制、QoS控制、帧主体、FCS,并标注地址字段的颜色含义 帧控制 2字节 持续时间/ID 2字节 地址1(RA) 6字节 地址2(TA) 6字节 地址3 6字节 序号控制 2字节 地址4 可选(WDS) QoS控制 可选 帧主体 可变长度 FCS 4字节 地址1(RA):当前无线链路这一跳的接收方 地址2(TA):当前无线链路这一跳的发送方 地址3:视 To/From DS 而定,为最终目的或源主机 地址4:仅用于 AP 间 WDS 桥接场景 其中:
帧控制 (Frame Control) 2 字节,包含 To DS/From DS 标志位等子字段,正是这两位决定了地址 1~3 的角色分配。持续时间/ID 用于 NAV(网络分配向量) 虚拟载波监听。地址 1~3 按你给的表格规则填充,颜色对应它们在当前跳/端到端语义中的角色。地址 4 只有在 AP 到 AP 的无线分布系统(WDS)桥接场景下才会出现,此时 To DS 和 From DS 同时置 1,四个地址分别对应 RA、TA、DA、SA。QoS 控制 仅 QoS 数据帧才有,用于携带优先级(TID)等信息。帧主体 是可变长度的数据载荷,FCS 是 4 字节的帧校验序列(CRC)。如果需要,我也可以单独画一张"To DS / From DS 四种组合下地址 1~4 具体含义"的对照图,把 AP↔AP、站点↔站点(IBSS)等情况也补全。
802.11 数据帧最多包含 4 个地址字段 。408 考试中最常见的是站点与 AP 之间收发数据的情况,需要区分当前无线链路 和最终通信双方 。
场景 地址 1(RA) 地址 2(TA) 地址 3 To DS(站点 → AP) AP 的 MAC 源站点(SA)的 MAC 最终目的主机(DA)的 MAC From DS(AP → 站点) 目的站点(DA)的 MAC AP 的 MAC 原始源主机(SA)的 MAC
其中:
RA(Receiver Address) :当前无线链路这一跳的接收方。TA(Transmitter Address) :当前无线链路这一跳的发送方。SA(Source Address) :端到端通信的源主机。DA(Destination Address) :端到端通信的目的主机。因此,RA/TA 描述的是当前无线链路这一跳;SA/DA 描述的是整个通信过程的最终源和最终目的。
例如,主机 H 通过 AP 向 Internet 中的主机 R 发送数据:
地址 1(RA):AP 的 MAC。 地址 2(TA):主机 H 的 MAC。 地址 3:最终目的主机 R 的 MAC。 因此,这种情况属于 To DS 。
5 - 局域网和广域网 本节主要关注以太网的传输介质和帧格式,往年在解答题出现了传输介质的名称,如果不知道对应的带宽就难搞了。VLAN 和 广域网的概念考查频率低一些,但也比较简单,熟悉下能在选择题应对就可。
局域网 局域网(Local Area Network,LAN)是一种覆盖范围较小、用于连接同一物理地点(如家庭、办公室、学校或企业内)的计算机和其他设备的计算机网络。
特性 局域网的特性主要由三个要素决定:拓扑结构 、传输介质 和 介质访问控制方式 ,其中 介质访问控制方式 是最关键的因素,它决定了局域网的主要技术特性。
常见的局域网 拓扑结构 主要包括以下四类:
星形结构 环形结构 总线形结构 星形与总线形结合的复合型结构 在 传输介质 方面,局域网可以采用铜缆、双绞线和光纤等多种介质,其中 双绞线 是当前的主流传输介质。
局域网常用的 介质访问控制方法 包括 CSMA/CD 协议 、令牌总线协议 和 令牌环协议 。其中,CSMA/CD 协议和令牌总线协议主要应用于总线形局域网,而令牌环协议则主要用于环形局域网。
实现 局域网主要包含三种实现:
以太网 (目前使用范围最广)。逻辑拓扑是总线形结构,物理拓扑是星形结构。令牌环 (Token Ring,IEEE802.5)。逻辑拓扑是环形结构,物理拓扑是星形结构。FDDI (光纤分布数字接口,IEE802.8)。逻辑拓扑是环形结构,物理拓扑是双环结构。以太网 在实际的局域网应用中,由于 以太网 占据垄断地位,所以基本上成为了局域网的代名词,需要对局域网的概念有深入了解。
传输介质 以太网常用的传输介质有 4 种:粗缆、细缆、双绞线和光纤,这里需要熟练掌握它们的英文名,常在选择题中出现:
参数 10BASE5 10BASE2 10BASE-T 10BASE-FL 传输媒体 粗缆 细缆 双绞线 光纤对 编码 曼彻斯特编码 曼彻斯特编码 曼彻斯特编码 曼彻斯特编码 拓扑结构 总线形 总线形 星形 点对点 网络适配器 早期以太网 早期以太网 现代以太网 现代以太网
注意上述传输介质的英文名称其实是挺有讲究的:
首先是前缀的数字,代表的是传输介质的速率, 10 代表 10 Mbps ,100 代表 100 Mbps ,注意这里是 Mbps 而不是 MB/s 。
其次是中间的 base ,代表基带传输(Baseband),基带与宽带(broadband)相对应。基带表示直接传输原始数字信号,不调制;宽带代表使用模拟调制技术传输多个频道信号,常见于有线电视等。
最后是后缀的英文字母,代表的传输介质的类型:
注意字母 T 是 twisted pair 的首字母,含义是 双绞线 。 FL 是 Fiber optic 的缩写,含义是 光纤 。帧格式 101010101010 ··· 101010101010
如上图所示,以太网帧格式从逻辑上可以分为物理层控制字段、帧首部、数据负载、差错校验字段这四个部分,每个字段的具体说明如下所示:
物理层控制字段 前导码(Preamble):7B由 7 字节的交替的 1 和 0 位组成,用于同步接收方的时钟。 帧开始分隔符(Start of Frame Delimiter, SFD):1B 帧首部 :固定为 14B目的地址(Destination MAC Address):6B 源地址(Source MAC Address):6B 类型/长度字段(Type/Length):2B如果值大于或等于 0x0600(1536),则表示帧携带的数据的类型(例如 IPv4、IPv6、ARP 等)。 如果值小于或等于 0x05DC(1500),则表示数据字段的长度。 负载 数据和填充(Data and Padding):范围为 46-1500B 携带帧的有效载荷,即要传输的数据。 如果数据少于 46 字节,则需要填充,确保数据字段的最小长度为 46 字节。 差错校验字段 帧校验序列(Frame Check Sequence, FCS):4 字节 :一个循环冗余校验(CRC)值,用于错误检测。接收方计算帧的 CRC,并与这个字段进行比较,以确定帧是否在传输过程中被损坏。 为什么 前导码 和 帧开始定界符 不包括在以太网帧的最小和最大大小计算中?
需要注意的是,Preamble 和 SFD 确实是以太网标准规定的格式的一部分,但它们属于 物理层 的内容,而非 数据链路层 中的以太网帧内容。
以太网分为 物理层 和 数据链路层 。物理层负责比特级的传输和同步,而数据链路层负责处理数据的封装、地址标识和错误检测。
以太网帧的最大和最小大小为多少?
以太网帧的最小和最大大小(不包括前导码和帧开始定界符)有明确的规定,目的是确保帧的有效性并避免冲突。
其中最小大小为 64B ,最大大小为 1518B 。 最小帧大小的要求是为了确保冲突检测机制(如 CSMA/CD)能够正常工作。 最大帧大小也称为 标准帧 或 最大传输单元(MTU) ,它限制了每个帧可以承载的数据量,以确保设备处理负载不会过大。
以太网帧数据部分的最小大小为 46B ,最大大小为 1500B 。
以太网快速填充
:当 IP 数据包的大小 小于 46 时(以太网设备会读取 IP 的首部的长度字段以得知),以太网设备会自动在其末尾填充 0,使其大小为 46 字节 。
无线局域网 帧格式 802.11 帧共有三种类型,即数据帧、控制帧和管理帧。数据帧的格式如图 3.28 所示。
802.11 数据帧由以下三部分组成:
MAC 首部,共 30 字节 。帧的复杂性都在 MAC 首部。 帧主体,即帧的数据部分,不超过 2312 字节 。 帧检验序列 FCS 是 MAC 尾部,共 4 字节 。 可以观察到,802.11 帧首部中字段很多,但是其实主要考察的就是个别字段。
其中最重要的是 4 个地址字段 (都是 MAC 地址)。这里仅讨论前三个地址(地址 4 用于自组网络)。这三个地址的内容取决于帧控制字段中的“去往 AP”和“来自 AP”这两个字段的数值,如下表所示:
去往 AP 来自 AP 地址 1 地址 2 地址 3 地址 4 0 1 接收地址 = 目的地址 发送地址 = AP 地址 源地址 —— 1 0 接收地址 = AP 地址 发送地址 = 源地址 目的地址 ——
💡核心记忆点:
地址 1:谁接收这帧(无线信号的接收者) 地址 2:谁发的这帧(无线信号的发送者) 地址 3:通信的最终目标或源(真实的目的地或来源) VLAN VLAN(Virtual Local Area Network)虚拟局域网,是通过 逻辑划分 的方式,把一个物理局域网拆分成多个独立的子网。
打个比方:一家公司只有一个办公室(一个交换机),但希望让财务部、技术部和人事部各自的数据隔离,互不干扰。VLAN 就像是在这一个办公室里,用“看不见的墙”把它们隔开,互相听不到对方说话。
⚙️ 那么 VLAN 是如何实现的呢?
VLAN 是通过 交换机 和 VLAN 标签(Tag) 实现的。简单来说:
普通交换机:看网线在哪个口(port)来转发数据。 支持 VLAN 的交换机:会在数据包中加上 VLAN 标签 ,按“部门”来转发。 802.3c 标准定义了支持 VLAN 的以太网帧格式的扩展。它在以太网帧中插入一个 4 字节 的标识符(插在源地址字段和类型字段之间),称为 VLAN 标签 ,用来指明发送该帧的计算机属于哪个虚拟局域网。插入 VLAN 标签的帧称为 802.1Q 帧 ,如下图所示。
其中 VID(VLAN ID) 为 12 位 ,一个 VLAN 交换机最多支持 4096 个 VLAN 。
📦 VLAN 示例:
假设有三台电脑:
PC1:财务部,接在 VLAN 10 PC2:技术部,接在 VLAN 20 PC3:人事部,接在 VLAN 30 它们都连在一台交换机上,如果没有 VLAN,三者可以互相通信。如果配置了 VLAN:
PC1 发的广播,只有 VLAN 10 内的设备能收到。 PC2 和 PC3 不会收到 PC1 的数据,除非通过路由器(或者三层交换机)跨 VLAN 通信。 广域网 HDLC 协议 HDLC(High-Level Data Link Control,高级数据链路控制)是一种 面向比特 (bit-oriented) 的 数据链路层协议 ,用于在点对点或点对多点通信中提供可靠的数据传输。
HDLC 几个特点可以被简单总结为:面向比特、面向连接、提供可靠传输。
需要注意的是 HDLC 使用 零比特填充法 来组帧。
PPP 协议 PPP(Point-to-Point Protocol)是一种数据链路层协议,用于在两个点对点连接的网络之间传输数据。PPP 最初是为拨号连接设计的,但它后来被广泛用于建立各种类型的点对点连接,包括 DSL(数字用户线路) 、ISDN(综合业务数字网) 和串口连接等。
6 - 数据链路层设备 需要了解三点:转发表结构、交换机转发流程 以及 交换方式,选择题会考查,也作为解答题的基础。
MAC 地址 MAC 地址(Media Access Control Address,介质访问控制地址),也称为物理地址 或硬件地址 ,是网络设备在数据链路层的唯一标识符,由 48 位(6 字节) 组成,通常以十六进制表示,例如:00:1A:2B:3C:4D:5E。
MAC 地址由设备制造商在出厂时烧录到网卡中,理论上全球唯一。其结构分为两部分:
字节 含义 前 3 字节 OUI(组织唯一标识符) ,由 IEEE 分配给各厂商后 3 字节 设备序号 ,由厂商自行分配,确保同厂商内唯一
MAC 地址还有一个特殊的广播地址 :FF:FF:FF:FF:FF:FF,发送到该地址的帧会被同一局域网内所有设备接收。
MAC 地址工作在数据链路层,用于同一局域网 内的设备间通信;而 IP 地址工作在网络层,用于跨网络 的路由寻址。路由器转发数据包时,每经过一跳,源/目的 MAC 地址都会更新,但 IP 地址保持不变。
交换机 交换机(Switch)是网络中用于连接设备并转发数据帧的二层设备。它通过分析数据帧中的 MAC 地址,将数据帧从接收端口精准转发到 目标设备所在的端口 。相比 集线器 ,交换机只将数据帧发送到必要端口,避免广播到整个网络,显著降低碰撞域 ,提升带宽利用率和传输速度。
转发表 转发表(也称 MAC 地址表 )是交换机内部维护的一张记录表,存储了网络设备 MAC 地址 与其 连接端口 的对应关系。每条记录通常包含以下信息:
MAC 地址 :网络设备的唯一标识。端口号 :设备连接的交换机端口。附加信息 (可选):如 VLAN 标识或条目有效时间。Switch A PC1 PC3 Switch B PC4 PC5 PC2 1111.1111.1111 4444.4444.4444 2222.2222.2222 3333.3333.3333 5555.5555.5555 MAC Address Port 1111.1111.1111 F0 2222.2222.2222 F1 3333.3333.3333 F2 4444.4444.4444 G0 5555.5555.5555 G0 F0 G0 F1 F2 G0 F0 F1 Switch A MAC Address Port 1111.1111.1111 G0 2222.2222.2222 G0 3333.3333.3333 G0 4444.4444.4444 F0 5555.5555.5555 F1 Switch B 如上图所示,交换机 A 和 B 分别通过 转发表 记录了通往每个 MAC 地址 的端口。
转发流程 当交换机收到数据帧后,会根据 转发表(MAC 地址表) 执行以下步骤:
检查目标 MAC 地址 查询转发表(MAC 地址表) 命中(已学习) :如果表中有该 MAC 地址 → 将帧转发到对应端口(单播)。未命中(未知 MAC) :如果表中没有记录 → 交换机将帧 泛洪(Flooding) ,即复制该帧并发送到除接收端口以外的所有端口。转发数据帧 目标设备收到帧后应答,交换机会根据 源 MAC 地址 学习到该设备所在端口,并更新转发表。 SwitchForwarding start 收到数据帧 extract 提取目标MAC地址 start->extract lookup 查询转发表 extract->lookup hit 表中存在MAC lookup->hit 命中 miss 表中无MAC记录 lookup->miss 未命中 unicast 单播转发 发送到对应端口 hit->unicast flood 泛洪转发 发送到所有端口 miss->flood response 目标设备应答 flood->response 等待 learn 学习源MAC 更新转发表 response->learn 这里的“广播”是二层的 Flooding 行为,并不是“发送 ARP 请求”。交换机只是盲目地把该帧发给所有人,以期目标主机回复。
交换方式 交换机的交换方式 是指交换机在接收到数据帧后,开始转发数据帧之前所采用的处理方式 ,它决定了交换机需要接收到数据帧的哪一部分后才开始转发。
直通交换
:交换机在接收到数据帧的前6个字节(即目的 MAC 地址 )后,立即根据 MAC 地址表 查找目标端口并开始转发,无需等待整个数据帧接收完成。存储转发
:交换机接收完整数据帧后,存储在缓冲区中,进行 CRC (循环冗余校验)检查,确认数据帧无误后再根据 MAC 地址表 转发。碎片隔离 :在直通交换基础上,增加了一个"至少收到 64 Byte"的检查,以过滤碰撞产生的碎片帧。碎片隔离为什么是 64B
IEEE 802.3 要求:
一个合法的以太网帧长度(不含前导码)至少 64 Byte。
所以规定:合法Frame ≥ 64 Byte。于是 frame < 64B,基本可以断定是碰撞导致的残缺帧。
交换机交换方式对比 数据帧结构: 目的MAC 其他 数据载荷 CRC 1. 直通交换 时间 数据帧到达 读取MAC 立即开始转发(无需等待完整帧) 特点:延迟最低,但可能转发错误帧 2. 存储转发 完整数据帧接收 存储到缓冲区 CRC校验 确认无误后转发 特点:可靠性最高,能检测并丢弃错误帧,但延迟较大 3. 碎片隔离 数据帧到达 检查前64字节 ≥64? 正常转发 丢弃碎片 特点:介于两者之间,能过滤碎片帧,延迟适中 性能对比: 交换方式 转发延迟 错误检测 适用场景 直通交换 最低 无 高速网络 存储转发 最高 完整CRC 可靠性要求高 碎片隔离 适中 碎片检测 平衡性能 很多同学容易将该节谈论的交换方式和 计算机网络的交换方式 弄混淆,需要注意,它们讨论的是两个不同层次的“交换” ,中文都叫"交换方式",所以很容易混淆。
可以理解成:
层次 讨论对象 典型概念 网络层面的交换方式 数据如何在整个网络中从 A 到 B 电路交换、报文交换、分组交换 交换机内部的转发方式 一台交换机收到一帧以后,什么时候开始转发 直通交换、存储转发、碎片隔离
网桥 网桥(Bridge)的功能和 交换机 基本一致,两者都是二层网络设备,用于转发数据帧。网桥中也有 转发表 的概念,转发过程和 交换机 一致,这里不再赘述。
E1 — MAC1 E1 — MAC2 E2 — MAC3 E2 — MAC4 E1 E2 Bridge Hub Hub PC1 PC2 PC3 PC4 MAC1 MAC2 MAC3 MAC4 那么 网桥和交换机区别
在哪里呢?
网桥是比较早期计算机网络使用的设备,现在已经渐渐被 交换机 替代,两者的重要区别如下表:
方面 网桥(Bridge) 交换机(Switch) 端口数量 通常较少(2~4 个) 通常很多(几十个甚至上百个) 性能 软件转发,处理能力较弱 硬件转发(ASIC 芯片),转发速度更快 功能 简单地转发帧,适合小型或实验网络 支持 VLAN 、端口镜像、链路聚合等高级功能 使用场景 用于连接两个小型网络 用于构建现代企业内部网络(LAN)