You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HDLC协议中接收端如何识别比特填充及序列真实类型?

HDLC比特填充识别与序列区分方法

一、HDLC比特填充的基本识别逻辑

HDLC用零比特填充解决数据字段与帧标志01111110(8位,含连续6个1)的混淆问题,规则很直接:

  • 发送端:在数据里每碰到连续5个1,就插一个0,确保数据里不会出现连续6个1,避免被误判为帧边界。帧标志本身是帧的起止标识,不属于数据,不用填充。
  • 接收端:盯着比特流找连续的1:
    • 碰到连续5个1后,看紧接的下一个比特:如果是0,直接删掉(这是发送端插的填充位);如果是1,再看后面的比特——要是0,那就是帧标志;要是1,直接判定传输错误(合法序列里不会有连续7个1)。

二、针对011111010序列的两种情况区分

你收到的011111010(9位比特),要么是真实数据,要么是原始数据01111110经填充后的结果,区分方法看接收端处理后的上下文:

情况1:这是未经过填充的真实数据

意思是发送端发的原始数据就是011111010,连续5个1后面的0是数据本身的一部分,不是填充位。

  • 接收端的判断过程:
    检测到前5个1(第2到第6位)后,下一个比特是0(第7位)。按规则先删掉这个0,得到01111110。这时候看后续比特:如果01111110后面跟着10(也就是原序列的第8、9位),而且这个序列处于数据字段内部(前后都是正常数据,不是帧边界的上下文),那说明删掉的0不是填充位——因为如果是填充位,删完后得到的01111110是原始数据,而如果是真实数据,删完后会出现类似帧标志的序列,但上下文不支持它是帧边界,所以接收端会回退,把那个0加回去,整个序列当作真实数据处理。

情况2:这是原始数据01111110经填充后的结果

发送端的原始数据里有01111110,这个序列如果直接发会被误判为帧标志,所以发送端在连续5个1后插了一个0,把01111110变成了011111010。

  • 接收端的判断过程:
    同样先删掉0得到01111110,此时如果这个序列是数据字段的内容(比如上下文显示它在帧的数据部分,不是帧边界),或者结合帧长度、校验和等信息验证后符合原始数据的逻辑,就判定这个0是填充位,删掉后的01111110就是还原后的原始数据。

核心区分要点

两种情况的关键在于删除0后的序列是否符合帧结构的上下文逻辑:

  • 要是删完得到的01111110不符合帧边界的场景(比如在数据中间,前后都是正常数据),那这个0是真实数据的一部分,必须保留;
  • 要是删完后的序列作为原始数据合理(比如在数据字段内,且校验、长度都对),那就是填充后的结果,删除0是正确操作。

另外,接收端还会用帧的校验和、预设长度等信息辅助判断,如果删除0后导致校验失败或长度异常,也会立刻回退,判定那是真实数据里的0。

内容的提问来源于stack exchange,提问作者mgiordi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:45:05