数据链路层负责称为成帧的东西,它将来自网络层的比特流划分为可管理的单元(称为帧)。 每个帧由发送方地址和目标地址组成。 目标地址定义了数据包的去向,发送者的地址帮助接收者确认收到。

帧可以是固定大小或可变大小。 在固定大小的帧中,不需要定义帧的边界,因为大小本身可用于定义帧的结束和下一帧的开始。 但是,在可变大小的帧中,我们需要一种方法来定义帧的结束和下一帧的开始。

为了将一帧与下一帧分开,在帧的开头和结尾添加一个 8 位(或 1 字节)标志。 但问题是,用于标志的任何模式也可能是信息的一部分。 因此,有两种方法可以克服这个问题:

  • 使用字节填充(或字符填充);
  • 使用位填充;

1. 字节填充

当存在与标志具有相同模式的字符时,将具有预定义位模式的字节(通常为转义字符(ESC))添加到帧的数据部分。 每当接收器遇到 ESC 字符时,它就会从数据部分中删除并将下一个字符视为数据,而不是标志。

但是当文本包含一个或多个转义字符后跟一个标志时,就会出现问题。 为了解决这个问题,作为文本一部分的转义字符由另一个转义字符标记,即,如果转义字符是文本的一部分,则额外添加一个以表明第二个是文本的一部分。
例子:

2. 位填充

大多数标志是一个特殊的 8 位模式 01111110 ,用于定义帧的开始和结束。
标志的问题与字节填充的情况相同。 所以,在这个协议中,我们所做的是,如果我们遇到 0 和五个连续的 1 位,则在这些位之后添加一个额外的 0。 这个额外的填充位被接收器从数据中删除。

无论下一位的值如何,在一个 0 后面加上五个 1 位之后都会添加额外的位。 此外,由于发送方总是知道哪个序列是数据,哪个是标志,它只会在数据序列中添加这个额外的位,而不是在标志序列中。
例子:

位填充

注 – 高级数据链路控制 (HDLC) 是面向位的协议。

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:字节填充和位填充的区别
本文链接:https://www.vsdiffer.com/vs/byte-stuffing-vs-bit-stuffing.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。