组帧

← 返回 MOC | ← 主页


1. 字符计数法 (Character Count Method)

示例: 假设有四个帧,长度分别为 5、5、8、8(包含计数字段本身)。

  • 发送数据:[5] A B C D [5] E F G H [8] I J K L M N O (注:括号内的数字代表计数字段)

简单但是脆弱


2. 字符填充法 (Character Stuffing / Byte Stuffing)

原理:

这种方法使用特定的控制字符来作为帧的起始和结束定界符(例如使用 SOH 表示帧首,EOT 表示帧尾)。

为了防止数据载荷中恰好出现了与定界符相同的字符(导致接收方误判为帧结束),发送方会在数据段中出现的特定控制字符前,插入一个 转义字符(ESC) 。接收方在遇到 ESC 时,会将其删除,并把紧随其后的字符视为普通数据。

填充规则:

  1. 数据中出现定界符(如 EOT 替换为 ESC EOT
  2. 数据中出现转义字符本身(ESC 替换为 ESC ESC

示例:

  • 原始数据: A B ESC C EOT D
  • 填充后发送的帧: SOH A B ESC ESC C ESC EOT D EOT

比较好,但是如果是二进制代码处理起来效率较低


3. 零比特填充法 (Zero-Bit Stuffing / Bit Stuffing)

原理:

这是目前最流行、也是最安全的组帧方法之一(广泛应用于 HDLC 和 PPP 协议中)。它不再以“字节”为单位,而是以“比特(Bit)”为单位进行操作。

它使用一个特定的位模式 01111110 (即 )作为帧的起始和结束标志。

填充规则(“遇5个1填0”):

  • 发送方: 扫描整个数据载荷(不包括首尾标志),只要发现有 5个连续的 1 ,就立即在其后自动插入一个 0。这样可以保证数据部分绝对不会出现 01111110 这个标志。
  • 接收方: 在收到数据时,先找到帧定界符。然后在数据载荷中,每当发现 5个连续的 1 时,就自动将其后紧跟的 0 删除,从而恢复出原始数据。

示例:

  • 原始数据比特流: 0110 11111 1000 11111 010
  • 发送方填充后: 0110 11111 0 1000 11111 0 010
  • 最终传输的帧: 01111110 (标志) + 01101111101000111110010 + 01111110 (标志)

打破ASCILL编码限制,实现二进制传输

本章小结