计算机网络自学网站 王道带学 · 考点 × 插图 × 真题 × 打卡
首页 › 第3章 数据链路层 › 3.2 组帧

3.2 组帧

对应王道教材 3.2 节(教材 P54–P55)· 本节属于 408 考纲范围

发送方依据特定规则,将网络层递交的分组封装成帧(也称组帧)。数据链路层以帧为单位传输数据,其主要目的是:一旦出错,只需重传出错的帧,而不必重传全部数据,从而提高传输效率。组帧需解决帧定界、帧同步和透明传输等问题。常见的组帧方法主要有以下四种。

⚠️ 注意:首部尾部通常都要加

组帧时通常既要添加首部,也要添加尾部。原因在于:网络中信息以帧为最小传输单位,接收方必须能准确识别一帧在比特流中的起始与结束位置,否则无法正确解析帧内容。

3.2.1 字符计数法 考点

字符计数法在帧首部设置一个计数字段,用于记录该帧包含的总字节数(包括计数字段自身占用的 1B),如图 3.5 所示。接收方读取该计数值后,即可确定后续数据的长度,从而定位帧的结束位置;由于帧是连续传输的,下一帧的起始位置也随之确定。

图3.5 字符计数的过程示例
图 3.5 字符计数的过程示例(王道教材 P54)
⚠️ 主要缺陷:计数字段出错则满盘皆输

当计数字段在传输过程中出错时,接收方将无法正确识别帧的边界,导致收发双方失去同步,可能引发灾难性后果(后续所有帧的边界全部错位)。这也是字符计数法在实际中很少使用的原因。

3.2.2 字节填充法 考点

字节填充法通过特定控制字符实现帧定界。在图 3.6 中,控制字符 SOH 表示帧的起始,EOT 表示帧的结束。为避免数据中出现的 SOH 或 EOT 被误判为帧的定界符,发送方会在这些特殊字符前插入一个 ESC 字符(注意,ESC 是 ASCII 码中的一个单字节控制字符),以实现透明传输。若数据中原本就包含 ESC,则同样在其前再插入一个 ESC。接收方收到 ESC 后,会将其丢弃,并将紧随其后的字符视为普通数据(而非控制字符),从而还原出原始数据。

图3.6 字节填充的过程示例
图 3.6 字节填充的过程示例(王道教材 P54)

当帧的数据部分中出现 ESC、EOT 或 SOH 时[见图 3.6(a)],发送方在每个 ESC、EOT 或 SOH 之前插入一个 ESC 字符[见图 3.6(b)],接收方处理后恢复原数据[见图 3.6(c)]。

3.2.3 零比特填充法 考点

🎯 考点跟踪:HDLC 的比特填充规则(2013 统考)

零比特填充法允许数据帧包含任意数量的比特,并用固定比特串 01111110 作为帧的起始和结束标志,如图 3.7 所示。为防止数据字段中出现与标志相同的比特序列,规则是:

早期的 HDLC 协议正是采用这种方法来实现透明传输。零比特填充法易于硬件实现,性能优于字节填充法。

图3.7 比特填充过程示例
图 3.7 比特填充过程示例(王道教材 P55)
🎯 考法:2013 统考真题·逐步复算

题目:HDLC 协议对 01111100 01111110 组帧后,对应的比特串为?

逐步计算(发送方每遇 5 个连续"1"即在其后填一个"0"):

  1. 第一段 01111100:扫描得 0 11111 00——出现 5 个连续"1",先输出 011111,紧随其后填充一个"0",再输出余下的 00,得到 011111000;
  2. 第二段 01111110:扫描得 0 11111 1 0——前 5 个连续"1"后填充一个"0",再输出余下的 10,得到 011111010(数据中本有 6 个连续"1",填充后被拆开,不再构成标志模式);
  3. 首尾再加上标志 F(01111110),组帧后的数据部分为 011111000 011111010。

对照选项,正确答案为 A(011111000 011111010,填充的"0"已用粗体标出)。

3.2.4 违规编码法

📚 课外拓展:利用编码冗余定界

违规编码法利用物理层编码的冗余特性实现帧定界。例如,在曼彻斯特编码中:比特"1"编码为"高-低"电平对,比特"0"编码为"低-高"电平对。而"高-高"或"低-低"电平对在数据比特中是违规的(未被采用),因此可借用这些违规编码序列来标识帧的起始或终止。局域网 IEEE 802 标准采用了这种方法(更多介绍见 3.6 节)。

违规编码法无须任何填充技术即可实现透明传输,但仅适用于采用冗余编码的特殊编码环境。

📌 小结:四种组帧方法的现状

由于字符计数法对计数字段错误极为敏感,而字节填充法在实现上较为复杂且存在兼容性问题,因此目前更常用的组帧方法是零比特填充法和违规编码法。

表 3.1 四种组帧方法对比
方法定界手段透明传输实现主要问题/特点
字符计数法首部计数字段(含自身总字节数)无特殊处理计数出错即失去同步,很少使用
字节填充法控制字符 SOH/EOT特殊字符前插入 ESC 转义实现复杂、存在兼容性问题
零比特填充法标志比特串 011111105 个连续"1"后填"0"/删"0"易于硬件实现,HDLC 采用
违规编码法违规电平对(如"高-高")无须填充仅适用于冗余编码环境,IEEE 802 采用