将网络层传下来的分组封装成帧,添加帧头和帧尾,并实现帧定界(确定帧的开始和结束位置)。
┌──────────┬──────────────────┬──────────┐
│ 帧首部 │ 数据部分 │ 帧尾部 │
│ (帧头) │ (网络层分组) │ │
├──────────┼──────────────────┼──────────┤
│帧定界符 │ │帧定界符 │
│地址/控制 │ │校验序列 │
└──────────┴──────────────────┴──────────┘
原理:帧首部用一个字段标明帧的字节数
帧1: [5][数据1数据2数据3数据4]
帧2: [4][数据5数据6数据7]
- 缺点:计数字段出错会导致后续所有帧定界错误
- 很少使用
原理:用特殊字节 FLAG(0x7E)作为帧起止标志
问题:数据中可能出现与 FLAG 相同的字节
解决(字节/字符填充):
- 数据中遇到 FLAG → 转义为 ESC+FLAG
- 数据中遇到 ESC → 转义为 ESC+ESC
FLAG = 01111110 = 0x7E,ESC = 0x1B
原理:用比特串 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)
原理:利用物理层编码中的违规码元作为帧定界标志
例:曼彻斯特编码中每个码元中间必须有跳变
- "高-高"或"低-低"是违规编码
- 用违规编码作为帧开始/结束标志
优点:不占用数据传输带宽;应用:IEEE 802 局域网
| 方法 | 定界方式 | 填充 | 开销 | 可靠性 | 应用 |
|---|---|---|---|---|---|
| 字节计数 | 计数字段 | 无 | 低 | 差(计数错全错) | 少用 |
| 字节填充 | FLAG 标志 | 字节级 | 中 | 好 | PPP |
| 比特填充 | 01111110 | 比特级 | 中 | 好 | HDLC |
| 违规编码 | 违规码元 | 无 | 无 | 好 | 以太网 |
| 考点 | 说明 |
|---|---|
| 比特填充计算 | 给定数据,计算填充后的比特串 |
| 字节填充规则 | FLAG 和 ESC 的转义规则 |
| 四种方法对比 | 优缺点和适用场景 |
| 曼彻斯特编码帧定界 | 用违规编码做帧定界 |
↑ 站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。