在HDLC中,如何识别位填充?

问题描述 投票:0回答:1

在 HDLC 协议的成帧中,假设接收器收到以下位串:

[…]01111010[…]

如何判断序列“01111010”是真实数据,还是对原始标志序列“01111110”进行位填充操作的结果?

接收者如何识别这两个不同的选项?

protocols frame bitstuffing
1个回答
0
投票

首先,你举的例子并不正确。零插入在 Five 之后,而不是设置为 1

four
位,所以您的意思是
011111010

简单。没有两个选择。帧中的原始数据不允许使用序列

01111110 (0x7E)
,即它是为标志保留的。因此,当位填充时,只有data位序列受到影响,而不是flag位序列。这样任何连续 5 个的序列绝对不是标志序列。

请注意,标志字符的位模式为 01111110(六个 1 位的连续序列),位填充会安排在除标志字符本身以外的位置出现的任意五个 1 位的连续字符串之后插入 0 位.

--(参考见下文)

字节填充时,数据中发现的任何0x7E

都会被2字节
0x7D5E
替换,其中
0x7D
在放入帧之前充当转义字符。

请参阅

K.R.Fall 和 W.R.Stevens (2012),TCP/IP 图解卷 1:协议,第 2 版,Addison-Wesley,第 131 页了解整个过程:

在使用类 HDLC 成帧的常见情况下,PPP 帧格式被两个包含固定值 0x7E 的 1 字节标志字段包围。点对点链路两端的两个站使用这些字段来查找帧的开头和结尾。如果值 0x7E 本身出现在帧内,则会出现一个小问题。这可以通过两种方式之一进行处理,具体取决于 PPP 是在异步链路上运行还是在同步链路上运行。对于异步链路,PPP 使用字符填充(也称为字节填充)。如果标志字符出现在帧中的其他位置,则将其替换为 2 字节序列 0x7D5E(0x7D 称为“PPP 转义字符”)。如果转义字符本身出现在帧中,则将其替换为 2 字节序列 0x7D5D。因此,接收方在收到后将 0x7D5E 替换为 0x7E,将 0x7D5D 替换为 0x7D。在同步链路(例如,T1 线路、T3 线路)上,PPP 使用位填充。请注意,标志字符的位模式为 01111110(六个 1 位的连续序列),位填充会安排在除标志字符本身以外的位置出现的任何五个 1 位的连续字符串之后插入一个 0 位。这样做意味着字节可能会以超过 8 位的形式发送,但这通常是可以的,因为串行处理硬件的低层能够“解填充”比特流,将其恢复到预填充模式。

© www.soinside.com 2019 - 2024. All rights reserved.