📖 3.2.1 封装成帧和透明传输
🎯 课程摘要:本节课深入讲解封装成帧的细节——帧定界(PPP 的标志字段、以太网 V2 的前导码与帧间间隔)、最大传送单元 MTU,以及透明传输的两种实现方法:面向字节的字节填充(字符填充)和面向比特的零比特填充,并通过 408 真题演练零比特填充法。
📝 详细笔记
1. 封装成帧
- 概念定义:封装成帧是指数据链路层给上层交付下来的协议数据单元(PDU)添加一个首部和一个尾部,使之成为帧。
- 原理解析:
- 发送方网络层将网络层 PDU 向下交付给数据链路层,数据链路层为其添加首部和尾部,封装成帧。
- 帧的首部和尾部包含重要的控制信息:
- 以太网 V2 的 MAC 帧格式:首部含目的地址、源地址、类型三个字段;尾部含帧检验序列 FCS 字段。
- PPP 帧格式:首部含标志、地址、控制、协议四个字段;尾部含 FCS 和标志两个字段。
- 数据链路层将封装好的帧向下交付给物理层,物理层将其看作比特流并转换成相应电信号发送。
2. 帧定界
- 概念定义:帧定界就是接收方的数据链路层从物理层交付上来的比特流中识别出一个个帧的开始和结束。帧首部和尾部的作用之一就是帧定界。
2.1 PPP 的帧定界
- PPP 帧的首部和尾部各包含一个长度为 1 字节的 标志字段,取值为 0x7E(二进制 01111110)。
- 接收方据此从比特流中识别出一个个帧。
2.2 以太网 V2 的 MAC 帧定界(无帧定界标志)
- 以太网 V2 的 MAC 帧首部和尾部中 没有帧定界标志,其定界方法如下:
- 物理层在 MAC 帧前面添加 8 字节的前导码,再转换成电信号发送:
- 前 7 个字节为 前同步码:使接收方时钟同步。
- 后 1 个字节为 帧开始定界符(SFD):表明其后紧跟着 MAC 帧。
- 以太网还规定了 帧间间隔(IPG) 时间为 96 比特的发送时间,因此 MAC 帧 不需要帧结束定界符。
- 物理层在 MAC 帧前面添加 8 字节的前导码,再转换成电信号发送:
- ⚠️ 重点/考点:并非每种数据链路层协议的帧都包含帧定界标志;以太网靠前导码 + 帧间间隔实现帧定界。
3. 最大传送单元 MTU
- 概念定义:为了提高数据链路层传输帧的效率,每种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(MTU,Maximum Transmission Unit)。
- 原理解析:
- 应使帧的数据载荷长度尽可能大于首部和尾部的长度,以提高传输效率。
- 需综合考虑缓存空间需求、差错控制等因素。
- 例如以太网的 MTU 为 1500 字节。
- ⚠️ 重点/考点:MTU 限制的是帧的 数据载荷 长度,不包括首部和尾部。
4. 透明传输
- 概念定义:透明传输是指数据链路层对上层交付下来的 PDU 没有任何限制,就好像数据链路层不存在一样。
- 问题提出:
- 若上层交付的 PDU 中恰好包含与帧定界符取值相同的数据,接收方在再次遇到该取值时会误认为帧结束,导致帧定界错误。
- 不解决此问题 → 数据链路层对上层 PDU 内容有限制 → 无应用价值。
- 解决思路:在把帧交付给物理层之前,对帧的数据载荷进行扫描,对出现的帧定界符做特殊处理。
5. 透明传输的两种实现方法对比
| 对比项 | 字节填充(字符填充) | 零比特填充 |
|---|---|---|
| 适用链路 | 面向字节的物理链路 | 面向比特的物理链路 |
| 帧定界符举例 | 特殊字节取值(如 ESC + 标志) | 特定位串 01111110(0x7E) |
| 发送端处理 | 每出现帧定界符或转义字符,在其前面插入一个转义字符 | 每出现 5 个连续比特 1,就在其后填入 1 个比特 0 |
| 接收端处理 | 遇转义字符则知其后为数据而非定界符,剔除转义字符 | 每 5 个连续比特 1 后删除其后的比特 0 |
| 转义字符 | 1 字节,十进制值为 27(非 E、S、C 三个字符) | 无需转义字符,用比特 0 |
| 典型协议 | PPP | HDLC |
5.1 字节填充(面向字节链路)
- 发送端:扫描数据载荷,每出现一个帧定界符或转义字符,就在其前面插入一个转义字符(ESC)。
- 接收端:
- 遇到第一个帧定界符 → 帧开始。
- 遇到转义字符 → 知道其后一字节内容虽与帧定界符相同,但它是数据而非定界符 → 剔除转义字符,将后面内容作为数据继续提取。
- 对转义字符本身也做相同处理(转义字符前再加转义字符)。
- 再次遇到帧定界符 → 帧结束。
- ⚠️ 重点/考点:转义字符是特殊的控制字符,长度 1 字节,十进制值为 27,并不是 E、S、C 三个字符。
5.2 零比特填充(面向比特链路)
- 帧定界符:假设采用 8 比特特定位串
01111110作为帧定界符。 - 发送端:扫描帧的数据载荷,只要出现 5 个连续比特 1,就在其后填入 1 个比特 0,确保数据载荷中不会出现帧定界符 01111110。
- 接收端:扫描数据载荷,每当发现 5 个连续比特 1,就把其后的 1 个比特 0 删除,还原原始数据载荷。
6. 字节填充与零比特填充工作流程
- ⚠️ 重点/考点:本节课介绍的字符填充法和比特填充法只是一般原理性方法,各种数据链路层协议有其具体实现,有的基于这两种方法,有的未采用。
💡 核心总结
- 封装成帧 = PDU 加首部和尾部 → 帧;首部尾部含重要控制信息。
- 帧定界:PPP 用标志字段 0x7E;以太网 V2 无定界标志,靠前导码(前同步码 + 帧开始定界符)和帧间间隔(96 比特时间)定界。
- MTU 限制帧数据载荷长度上限(以太网为 1500 字节),不含首部尾部。
- 透明传输 = 对上层 PDU 内容无限制;面向字节链路用字节填充(插入转义字符),面向比特链路用零比特填充(5 个连续 1 后插入 0)。
- 转义字符是 1 字节控制字符(十进制 27),非 E、S、C 三字符。
❓ 课后思考 / 经典考题
- (408 真题) HDLC 协议采用零比特填充法实现透明传输,给定帧数据载荷的比特串,写出零比特填充后的结果。
- 解析:HDLC 用帧首尾标志字段 01111110 作定界符;发送端扫描数据,每 5 个连续比特 1 后插入 1 个比特 0。对题目所给比特串逐段扫描,在 011111 后插入 0,得到填充后的比特流。
- 以太网 V2 的 MAC 帧为什么不需要帧结束定界符?它如何实现帧定界?
- 字节填充和零比特填充分别适用于什么类型的物理链路?两者的处理方式有何区别?
- 转义字符的十进制值是多少?为什么说它不是"ESC"三个字符?
- 若数据载荷中同时包含帧定界符和转义字符,字节填充法应如何处理?