首页/计算机网络/03-data-link/组帧方法 🔗 在 Obsidian 中打开
计算机网络 · 03-data-link

组帧方法

重要度 ⭐⭐⭐⭐⭐ 计算机网络/数据链路层组帧帧定界字节填充比特填充
速查
组帧 = 把网络层分组封装成帧并实现帧定界。四种:字节计数法、字节填充(FLAG)、比特填充(01111110)、违规编码。比特填充规则:连续 5 个 1 后插入 0。考试频率 ⭐⭐⭐⭐。

核心概念

什么是组帧

将网络层传下来的分组封装成帧,添加帧头和帧尾,并实现帧定界(确定帧的开始和结束位置)。

┌──────────┬──────────────────┬──────────┐
│  帧首部   │      数据部分      │  帧尾部   │
│ (帧头)    │   (网络层分组)     │          │
├──────────┼──────────────────┼──────────┤
│帧定界符   │                  │帧定界符   │
│地址/控制   │                  │校验序列   │
└──────────┴──────────────────┴──────────┘

四种组帧方法

1. 字节计数法

原理:帧首部用一个字段标明帧的字节数
帧1: [5][数据1数据2数据3数据4]
帧2: [4][数据5数据6数据7]
- 缺点:计数字段出错会导致后续所有帧定界错误
- 很少使用

2. 字节填充的标志字节法

原理:用特殊字节 FLAG(0x7E)作为帧起止标志
问题:数据中可能出现与 FLAG 相同的字节
解决(字节/字符填充):
- 数据中遇到 FLAG → 转义为 ESC+FLAG
- 数据中遇到 ESC  → 转义为 ESC+ESC
FLAG = 01111110 = 0x7E,ESC = 0x1B

3. 比特填充的标志比特法 ⭐

原理:用比特串 01111110 作为帧首尾标志
发送方:数据部分每遇到连续 5 个 1,自动插入一个 0
接收方:数据部分每遇到连续 5 个 1,自动删除后面的 0
原始数据: 0 1 1 1 1 1 1 0 (这恰好是标志)
填充后:   0 1 1 1 1 1 0 1 0 (5 个 1 后插 0)

4. 违规编码法

原理:利用物理层编码中的违规码元作为帧定界标志
例:曼彻斯特编码中每个码元中间必须有跳变
- "高-高"或"低-低"是违规编码
- 用违规编码作为帧开始/结束标志
优点:不占用数据传输带宽;应用:IEEE 802 局域网

方法对比

方法定界方式填充开销可靠性应用
字节计数计数字段差(计数错全错)少用
字节填充FLAG 标志字节级PPP
比特填充01111110比特级HDLC
违规编码违规码元以太网

常见考法

考点说明
比特填充计算给定数据,计算填充后的比特串
字节填充规则FLAG 和 ESC 的转义规则
四种方法对比优缺点和适用场景
曼彻斯特编码帧定界用违规编码做帧定界

易错点

注意
  • 比特填充是连续 5 个 1 后插入 0,不是 6 个 1
  • 字节填充中 ESC 和 FLAG 都要转义,不只是 FLAG
  • 违规编码法只能用于特定物理层编码(如曼彻斯特)
  • 以太网不用比特填充,用前导码 + 帧开始定界符

核心结论

必背
  1. 字节计数法不可靠,已基本淘汰
  2. 字节填充和比特填充是主流,分别用于 PPP 和 HDLC
  3. 违规编码法最高效,但依赖物理层编码特性
  4. 以太网使用前导码(7B)+ 帧开始定界符(1B)

记忆卡片

比特填充的规则?
数据中连续 5 个 1 后自动插入 1 个 0,接收方删除。
字节填充中哪些字节需转义?
FLAG(0x7E)ESC(0x1B) 都需要转义。
哪种方法用违规编码?
违规编码法,如曼彻斯特编码中用高-高 / 低-低做帧定界。
字节计数法的缺点?
计数字段出错会导致后续所有帧定界错误(差错传播)。

图示 · 比特填充

发送方原始数据 0 1 1 1 1 1 1 0 1 1 ← 连续5个1 → 填充后(插0) 0 1 1 1 1 1 0 1 0 1 1 0 第6位后插入0,破坏标志串 接收方逆操作:连续 5 个 1 后删 0,恢复原始数据
图:比特填充在数据中每出现连续 5 个 1 即插入一个 0,使数据内不会出现帧标志 01111110。

交互动画 · 四种组帧方法逐步演示

相关知识点

data-link-layer-functions error-control

↑ 站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。