字节填充与位填充的区别

2025年2月26日 | 阅读 6 分钟

引言

在复杂的数据通信世界中,比特填充和字节填充都对于确保传输数据的准确性和可靠性至关重要。字节填充在高层次抽象上处理整个字节和转义序列,而比特填充则深入到单个比特的细节以维持同步。了解这两种方法的区别对于开发健壮的通信协议至关重要,这些协议能够应对各种环境中数据传输的挑战。比特填充和字节填充的区别如下:

什么是字节填充

字节填充是一种数据传输方法,可确保信息在设备之间准确一致地发送。它主要用于 OSI 模型的数据链路层,用于帧定界和错误检测。字节填充的主要目标是区分传输数据流中的控制字符和数据,并防止某些保留字符被误解为控制字符。

字节填充通常使用起始和结束分隔符(有时称为标志)来标识帧的开始和结束。字节填充会将原始数据中的任何保留分隔符替换为唯一的模式和一个特定的转义字符。这使得将信号保留的字符与实际数据分开成为可能。

什么是比特填充

比特填充是一种数据传输技术,用于确保正确的同步并防止数据被误解。它主要用于 OSI 模型的数据链路层,那里错误检测和帧定界是主要问题。比特填充的主要目的是防止在连续的比特长数据序列被错误地读取为控制字符或标志时发生同步问题。

比特填充通常需要预定义的比特模式(标志)来指示帧的开始和结束。当实际数据中出现特定比特模式时,比特填充会在数据流中添加一个额外的比特,以避免在传输过程中产生混淆。接收者然后必须找到并删除这些额外的比特才能恢复原始数据。

字节填充和比特填充的目的

在数据链路层,来自物理层的比特流被划分为数据帧。数据帧可以具有固定长度或可变长度。可变长度帧定界可能导致每个传输帧的大小发生变化。为了表示一个帧的结束和下一个帧的开始,使用比特模式作为分隔符。如果模式存在于消息中,则必须采取措施。

两种常见的方法是

字节填充:它涉及在消息中插入一个字节来区分它与分隔符。这通常被称为面向字符的帧定界。

比特填充:涉及将任意长度的比特模式插入消息以区分它与分隔符的过程。这也被称为面向比特的帧定界。

数据链路层帧中的比特填充和字节填充

数据链路帧的组成部分如下:

  • 帧头:这部分包含帧的源地址和目标地址。
  • 有效载荷字段:这包含需要传输的消息。字节填充使用可变序列的数据字节,而比特填充使用可变序列的比特。
  • 尾部:它包含错误检测和纠正的部分。
  • 标志:标志标记每个帧的开始和结束,并充当帧分隔符。在比特填充中,标志是指定开始和结束比特的比特模式。通常,它有八个比特,并且至少有六个连续的 1。字节填充使用一个 1 字节的标志,它代表协议相关的特殊字符。

比特填充与字节填充机制

字节填充机制

需要实现一种方法来防止接收方将标志字节模式解释为帧的结束,如果它出现在消息字节序列中。在这种情况下,一个特殊的字节,称为转义字符(ESC),将被放置在消息中的每个字节之前,它遵循与标志字节相同的模式。如果消息字节中存在 ESC 序列,则在其前面会附加另一个 ESC 字节。

Difference between Byte stuffing and Bit stuffing

比特填充机制

标志,用作数据链路层帧的分隔符,主要由六个或更多连续的 1 组成。在某些情况下,会在消息中填充一个单独的比特,以区分内容与其他也具有相同标志序列的消息。为了区分消息和标志,会在消息中紧跟在零比特之后的五个连续一后面添加一个额外的零比特。

接收到发送方的帧数据后,接收方通过删除数据中出现在五个连续一之后的所有零来“解填充”消息。然后将此消息发送到更高层。

Difference between Byte stuffing and Bit stuffing

字节填充与比特填充的区别

字节填充比特填充
一种在数据流中添加额外字节以防止出现特定字节的方法一种在数据流中插入额外比特以防止出现特定比特序列的技术。
当找到特殊字节时,数据会扩展一个字节。当找到特殊比特模式时,会在数据中添加一个额外的比特。
标志字节模式 (01111110)标志比特模式 (01111110)
每次出现标志字节时,都会添加一个额外的字节。每次出现标志比特模式时,都会添加一个额外的比特。
在接收端,会消除额外的字节。在接收端,会消除额外的比特。
由于额外的字节,效果较差。效率更高,因为只添加了额外的比特。
在接收端,会消除额外的字节。在接收端,会消除额外的比特。
在接收端,会消除额外的字节。在接收端,会消除额外的比特。
由于额外的字节,效果较差。效率更高,因为只添加了额外的比特。
用于 HDLC 和 PPP 等协议。用于令牌环网和以太网等协议。
确保数据准确性,并防止因数据流中存在特定字节而导致的错误造成数据丢失。确保数据完整性,并防止因数据流中存在特定比特序列而导致的错误造成数据丢失。
原始字节的值由一个跟随在特定字节被替换为唯一的转义字节后的第二个字节表示。一个唯一的比特序列,代表原始比特序列的值,取代了特定的比特序列。
每次出现特定字节时,通过插入新字节来增加数据流的开销。每次出现特定比特序列时,通过插入额外的比特来增加数据流的开销。
不如比特填充有效,因为它需要将整个字节添加到数据流中。比字节填充更经济,因为它只需要向数据流添加一个比特。
通常用于 PPP 和 HDLC 等使用固定长度帧或数据包的协议。通常用于使用可变长度帧或数据包的协议(如以太网)以及异步传输(如串行通信)。

结论

总结来说,在接收端,数据链路层将物理层接收到的比特流划分为帧。数据帧的长度可以是固定的,也可以是可变的。由于可变帧定界中每个帧的大小都不同,因此在数据帧的开始和结束使用比特模式。因此,很容易与其他数据帧区分开来。但是,如果比特模式出现在数据帧中,则使用比特填充和字节填充来解决问题。字节填充,也称为面向字符的帧定界,是一种在数据中填充一个字节的技术,以区分消息中标志模式的出现与分隔符。比特填充,也称为面向比特的帧定界,涉及在消息中插入任意比特模式,以区分它与分隔符。