📜  字节填充和位填充的区别

📅  最后修改于: 2021-09-27 14:27:14             🧑  作者: Mango

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

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

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

  1. 使用字节填充(或字符填充)
  2. 使用位填充

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

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

注 –点对点协议 (PPP) 是一种面向字节的协议。

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

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

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

参考 –
数据通信和网络 作者 Behrouz A. Forouzan(书籍)。