封装成帧主要解决帧定界、帧同步、透明传输等问题。和 IP 数据报不同,组帧需要加首部也要加尾部

在一段数据的前后分别添加首部和尾部,构成,帧是数据链路层的 PDU 。

一个帧用标识位 F (01111110)来标识帧的开始与结束。

如果数据中正好出现与标识位 F 相同的比特组合,即使用透明传输解决这个问题。透明传输是指,不管传的数据是什么,都可以无感的传送。

透明传输

因为字符计数法中计数字段的脆弱性和字节填充法实现上的复杂性与不兼容性,目前较常用的组帧方法是零比特填充法和违规编码法。

字符计数法

字符计数法使用一个计数字段来记录该帧所含的字节数(包括计数字段自身)。

问题是若计数字段出错,将失去同步。

字节填充法

控制字符 SOH 放在帧的最前面,表示帧的开始,控制字符 EOT 表示帧的结束。若数据中出现控制字符,则在前面使用一个转义字符 ESC 来加以区分,接收方收到这个数据后会自己删除转义字符,结果仍得到原来的数据。

根据RFC 1662的规定,字节填充方法包括以下步骤:

  1. 将信息字段中出现的每个0x7E字节转换为两个字节的序列(0x7D, 0x5E)。这是因为0x7E是帧的标志字段,为避免与标志字段冲突,将其转义为0x7D后再添加0x5E。

  2. 如果信息字段中出现一个0x7D字节(与转义字符相同),则将0x7D转换为两个字节的序列(0x7D, 0x5D)。同样地,这是为了避免与转义字符的冲突。

  3. 如果信息字段中出现ASCII码的控制字符(数值小于0x20),则在该字符之前插入一个0x7D字节,并修改该字符的编码。例如,出现0x03(控制字符中的”传输结束”,即ETX),需要将其转换为两个字节的序列(0x7D, 0x23)。

零比特填充法

HDLC 协议中的比特填充法使用标识位 F (01111110)来标志一个帧的开始与结束。为了保证不出现 6 个连续的 1,在连续的 5 个 1 后面插入一个 0 比特。接收方收到数据,进行逆操作,在每连续的 5 个 1 后面删除 0,以恢复原始数据。

零比特填充法很容易由硬件来实现,性能优于字节填充法。

违规编码法(物理层)

在物理层进行比特编码时,常采用违规编码法。例如,曼彻斯特编码方法将数据比特“1”编码成“高-低”电平对,将数据比特“0”编码成“低-高”电平对,而“高-高”电平对和“低-低”电平对在数据比特中是违规的,因此可借用这些违规编码序列来定界帧的起始和终止。

局域网 IEEE 802 标准采用了违规编码法。