HDLC考点全解析:帧结构、零比特填充与滑动窗口计算

发布时间:2026/10/17 7:45:03

HDLC考点全解析:帧结构、零比特填充与滑动窗口计算 翻网络规划设计师真题的时候你会发现一个很有意思的现象数据链路层这块HDLC 出现的频率一点不比以太网低。很多人第一反应是——这玩意儿不是上世纪的老协议吗现在工作里哪还见得到可试卷不这么想上午题考帧结构、考零比特填充下午案例偶尔拿它跟 PPP 一起分析。说实话我第一次备考时也轻视过它直到做错一道关于 N(R) 的题才老老实实把协议规范捡起来重读。这篇笔记就当一份可直接拿去对照复习的资料HDLC 的帧结构、三种帧类型、三种传输模式、滑动窗口计算、透明传输原理以及软考最爱挖坑的几个点全部按考点笔记的形式拆开讲。不管你考的是网络规划设计师还是网络工程师凡是复习到数据链路层这几块内容都绕不开。工作中真正配置过 HDLC 的人确实不多但考试考的是原理原理搞透了题目怎么变都能应对。1. 先搞清楚软考里的HDLC为什么被归在局域网目录下1.1 一个容易让人误会的分类先说一个让不少考生蒙圈的目录问题。软考资料里经常写局域网之 HDLC 协议但翻主流教材时HDLC 通常被放在广域网章节介绍很多人因此觉得资料标错了。其实两边都不算错关键在于你怎么理解局域网这个栏目。在考纲的组织方式里局域网经常是数据链路层的代称。局域网本身的技术核心就是数据链路层的介质访问控制、帧封装、差错控制这些东西而 HDLC 恰好也是数据链路层协议所以它跟以太网、PPP 会被归到同一个复习单元里。更准确地说HDLC 是一个面向比特的同步链路控制协议常用在路由器串口、SDH 链路、DDN 专线这类点对点场景它跟以太网那种共享介质的局域网确实不是一回事但两者在 OSI 模型里住在同一层考点上被安排在一起很正常。所以复习时不用纠结这个分类你只需要记住一条HDLC 属于数据链路层协议核心考点是帧是怎么封装的、可靠传输是怎么做的、遇到标志字节怎么办。把它理解成链路层的通用框架后面所有知识点都顺了。1.2 考点地位与考查方式从历年题量看HDLC 在软考上午题里几乎是稳定出现的常驻考点包括帧结构中各字段的顺序和长度标志字段的取值0x7E以及连续帧怎么共用标志控制字段如何区分 I 帧、S 帧、U 帧滑动窗口与信道利用率的计算零比特填充的收发规则HDLC 与 PPP 的异同对比下午题虽然不常单独出大案例但经常把 HDLC 作为背景跟 PPP、SDH、广域网接入放在一起考。如果只是死记字段表碰到计算题和概念辨析题容易翻车但如果能把为什么这么设计想明白这些题其实都是送分题。2. 帧结构逐字段拆解七个字段每个字段都对应一个考点2.1 帧总览HDLC 的帧结构不长一个完整的帧由七个部分组成考试时画出来就是一个经典的表格题字段名称默认长度作用F标志字段8 bit表示帧的开始和结束固定为 01111110A地址字段8 bit可扩展标识主站或从站地址C控制字段8 bit可扩展区分帧类型携带序号与确认信息Info信息字段可变承载上层数据考试中常称为净荷FCS帧校验序列16 bit 或 32 bit用 CRC 校验帧的完整性与正确性F标志字段8 bit表示本帧结束与帧头标志相同这个顺序要背得非常熟。我之前见过有人把 FCS 放在信息字段前面一画图就错这种低级错误在考试里是最亏的。你可以用一句口诀辅助记忆标地控信校标——标志、地址、控制、信息、校验、标志。2.2 标志字段与帧边界的复用标志字段固定是二进制 01111110也就是十六进制 0x7E。它在链路中同时充当帧头和帧尾意味着接收方只要在比特流中检测到这个模式就认为一帧开始了或结束了。这里有个易考点相邻两帧之间的标志可以共享。比如前一帧的结束标志同时就是后一帧的开始标志这样一来帧与帧之间不需要额外的空闲填充链路上的开销能省一点。题目如果给你一段包含多帧的比特流让你数有几帧就要特别注意这种共用情况。标志字段本身也是后来透明传输问题的根源所在如果数据字段里恰好出现了和标志一样的 01111110接收方就会误判帧边界。怎么解决这就是后面要讲的零比特填充技术这里先记住标志值和边界复用这个考点后面自然能串起来。2.3 地址字段的扩展逻辑地址字段在不同场景下含义不同主站发出的命令帧地址字段填的是从站地址从站返回的响应帧地址字段填的是主站地址。所以它永远填对方的地址而不是发送方自己的地址。这个细节经常被考生忽略选择题特别喜欢在这里埋伏笔。默认情况下地址字段占 8 bit但 HDLC 支持地址扩展当地址字段第一个字节的最低位为 0 时表示后面还有地址字节为 1 时表示这是最后一个地址字节。这种逐字节续接的设计让协议可以根据实际网络中站的多少决定地址长度灵活但考试只需要知道它能扩展就行。2.4 FCS字段与帧无效判定FCS 是帧校验序列HDLC 标准里允许用 16 位或 32 位的 CRC 校验。软考常默认按 16 位 CRC 对待但选择题里如果明确说是扩展校验场景可能对应 32 位。FCS 的计算范围覆盖地址字段、控制字段和信息字段不包含标志字段。接收方收到帧后先做透明传输的反向处理再对地址、控制、信息重新计算 CRC和收到的 FCS 比对不一致就判定帧出错。除了 CRC 错误以下情况也被视为无效帧帧长度小于规定的最小值HDLC 规定除标志外至少要有 32 bit地址字段编码不合法收到的比特流不满足以标志开头、以标志结尾的基本结构这些无效帧判定规则也是选择题的高频选项复习时不要只看帧结构忽略后面的处理规则。3. 控制字段深度解析I帧、S帧、U帧各管一摊事3.1 8位控制字段的读法控制字段是 HDLC 里信息量最大的字段因为它用前两位比特就区分出了三种帧类型。请看这个对照控制字段前两位帧类型全称职责0I 帧Information Frame传输数据同时携带确认信息10S 帧Supervisory Frame流量控制与差错控制不带数据11U 帧Unnumbered Frame链路建立、拆除、管理不带序号I 帧里的N(S)是发送序号表示当前这一帧的编号后面的N(R)是期望接收序号表示发送方期望下一次从对方那里收到编号为 N(R) 的帧等于告诉对方你编号 N(R)-1 及之前的帧我都已经正确收到了。一句话记住N(R) 不是我收到了什么而是我期待你下一帧的编号。S 帧不带数据但它的 N(R) 同样起着确认作用。这样设计的好处是当对方没有数据要发时仍然可以单独发一个 S 帧来确认你发来的数据不用干等。3.2 I帧怎么用N(S)/N(R)做到捎带确认捎带确认是 HDLC 可靠传输的灵魂。正常情况下站点 A 给站点 B 发送数据帧B 收到后需要告诉 A我收到了。如果 B 恰好也有数据要回传给 A那么 B 可以在它发出的数据帧里通过 N(R) 字段顺带完成确认。这就是捎带确认信息不单独占一个帧而是藏在数据帧的控制字段里。这个机制省去了大量独立确认帧全双工通信时效率很高。考试常让人判断某条比特流的 N(R) 是否正确比如 A 收到编号为 3 的帧后回复的帧里 N(R) 应该填 4而不是填 3。很多人在这里栽跟头就是因为把 N(R) 理解成刚收到的那一帧序号。3.3 S帧和U帧的关键类型S 帧在控制字段的中间还有两个比特用来标识类型S帧编码名称作用00RR 接收就绪我准备好接收 N(R) 起的帧01RNR 接收未就绪我暂时没空接收别发了10REJ 拒绝N(R) 这一帧有问题从这里往后全部重发11SREJ 选择拒绝只有 N(R) 这一帧有问题只重发这一帧注意 REJ 对应的是退回 N 帧重传策略SREJ 对应的是选择重传策略。软考常考两者的区别REJ 让发送方从出错的帧开始把后面所有帧都重发一遍SREJ 只让发送方重发出错的那一帧。一个消耗简单但效率低一个效率高但实现复杂。U 帧是最容易被忽略的一类。它的 M 字段组合出了各种管理命令考试里出现频率比较高的有SABM置异步平衡模式建链时用UA无编号确认收到 SABM 或 DISC 后回复DISC拆除链路FRMR帧拒绝表示收到无法正确处理的帧这些命令长什么样不用死记二进制但作用必须对应清楚特别是 SABM 和 UA 的组合几乎年年以不同的形式出现。3.4 P/F位的作用控制字段里还有一个特殊位在 I 帧、S 帧和 U 帧里都出现就是 P/F 位。主站发出命令帧时这个位叫 PPolling轮询位从站回应时这个位叫 FFinal结束位。它的典型用法是主站发送带 P1 的命令帧强行要求从站立刻响应从站收到后只有在自己发回的最后一个响应帧里把 F 置 1表示这批回应结束了。也就是说P/F 位配合使用实现了主站对从站发送权的控制。如果考到 NRM 模式下的通信流程P/F 位几乎一定会出现在题目里要格外留个心眼。4. 链路建立与拆除从SABM到UAHDLC怎么握手4.1 主站、从站、复合站与三种传输模式HDLC 把通信站点分成了三类主站负责控制链路从站只能按主站的要求响应复合站同时具有主站和从站能力可以主动发送数据。这三类站点对应三种传输模式模式全称站点关系特点NRM正常响应模式主站 从站从站收到主站轮询后才能发送ARM异步响应模式主站 从站从站可以主动发送但链路仍由主站管理ABM异步平衡模式复合站 复合站双方对等任意一方可主动发帧软考复习重点在 NRM 和 ABM。NRM 对应传统的主从链路比如一台计算机带一堆终端ABM 对应现代路由器之间的点对点通信PPP 在概念上也托了它的福。题目常把模式与站点角色交叉出题比如ABM 模式下双方是什么站——答案一定是复合站。4.2 建链和拆链的过程以最常见的 ABM 模式为例链路建立的过程是这样的站点 A 向站点 B 发送 SABM 命令帧请求建立异步平衡模式链路站点 B 收到后若同意则返回 UA 帧作为确认站点 A 收到 UA 帧链路正式进入数据传输阶段这个过程和 TCP 三次握手很像但比 TCP 简单只有两帧就完成了。SABM 里的 P 位通常置 1要求对方必须响应UA 帧里的 F 位随之置 1表示这是对 SABM 的直接回应。拆链过程对称任意一方发送 DISC 命令对方回复 UA 帧链路就释放了。FRMR 帧则用在异常场景比如收到带错误序号或者根本无法识别的帧时站点发送 FRMR 通知对方出了协议级错误。建链和拆链的帧交换序列是下午案例题最爱画的过程题之一。复习时可以自己在纸上把 SABM、UA、I 帧、DISC、UA 的收发顺序画一遍画一次比背十次都管用。5. 滑动窗口与信道利用率计算软考计算题的主战场5.1 为什么需要滑动窗口如果不做任何确认窗口发送方发一帧就得停下来等确认链路大部分时间都在空等信道利用率非常低。HDLC 采用滑动窗口机制发送方可以一次性连续发送多个帧不必逐帧等待确认只要未确认帧的数量不超过发送窗口大小就行。HDLC 基本模式下序号字段只有 3 bit编号范围是 0 到 7发送窗口最大能做到 7 帧。为什么是 7 而不是 8这是 Go-Back-N 重传策略的约束发送窗口不能超过序号总数的一半少 1否则当确认丢失时发送方无法区分新帧和重传帧。扩展模式下序号字段 7 bit窗口最大可以到 127 帧卫星链路这类大时延场景就需要这么大窗口。5.2 信道利用率的计算公式做计算题前记住一个基本量帧发送时间 T_f 帧长(bit) / 链路速率(bps)。在不考虑确认帧发送时间、站点处理时延的简化模型下发送第一个帧到收到第一个确认一个完整周期需要 T_f RTT其中 RTT 是往返传播时延。在这个周期内发送窗口允许发 W 个帧这 W 个帧的总发送时间是 W × T_f。于是得到一个非常实用的结论如果 W × T_f T_f RTT那么发送窗口耗尽后必须等待确认信道利用率 W × T_f / (T_f RTT)如果 W × T_f ≥ T_f RTT那么发送窗口还没耗尽确认已经回来了理论上链路可以做到满载利用率按 100% 处理简化模型下这个公式不用死背理解窗口撑不撑得住链路就通了。5.3 一道典型的软考式计算题网上很多例题喜欢把参数设得特别凑巧练的时候觉得简单考场上数字一换就慌。我建议按下面的方式推一遍完整过程。题目背景某链路速率 100 kbps帧长 1250 字节单程传播时延 400 msHDLC 采用 3 bit 序号滑动窗口Go-Back-N求最大信道利用率。第一步求单帧发送时间T_f 1250 × 8 / 100000 0.1 s第二步求往返传播时延RTT 2 × 400 ms 0.8 s第三步求窗口的发送能力W 7W × T_f 7 × 0.1 0.7 s第四步与周期比较T_f RTT 0.1 0.8 0.9 s因为 0.7 s 0.9 s所以窗口成为瓶颈最大信道利用率为U 0.7 / 0.9 ≈ 77.8%这个题最大的意义在于演示流程先算 T_f再算 RTT最后拿窗口总发送时间和周期比一比。如果把帧长加大、或者把序号扩展为 7 bit让 W × T_f 超过 0.9 s利用率就会变成理论上的 100%。很多考生直接背利用率等于 7/(12a)之类的变体公式遇到窗口不满的情况就不知道怎么处理根源就是没理解这个比较过程。6. 零比特填充最容易被忽略的透明传输考点6.1 为什么要做透明传输前面说过HDLC 用 01111110 当帧边界标志。问题来了数据字段是任意的比特序列如果里面恰好也出现 01111110接收方就会把它误认为帧结束把数据拦腰截断剩下没读完的比特全算无效。链路层要解决这个问题就必须让数据字段中出现任何比特模式都能透明地传输。HDLC 采用的方法是零比特填充本质是发送前破坏掉数据里可能冒充标志的连续 1 序列接收后再恢复出来。6.2 发送端填充和接收端删除规则发送端的规则一句话在地址、控制、信息、FCS 这些除了标志以外的所有字段中只要发现连续 5 个 1就立即在它们后面插入一个 0。接收端的规则是逆向操作扫描比特流连续收到 5 个 1 后查看下一个比特如果下一个比特是 0就把它删除恢复出原始数据如果下一个比特是 1再看再下一个比特01111110 这个完整的 8 位序列被识别为帧边界如果出现连续 7 个以上的 1则判定帧异常举个例子发送数据是二进制序列 1011111100里面有一段连续 5 个 1填充后变成 10111110100。接收端扫描到 111110 时发现连续 5 个 1 后跟了 0就把这个 0 删掉恢复出 1011111100。再比如全部是 1 的 10 个比特发送端会在第 5 个 1 和第 10 个 1 后面各插入一个 0变成 111110111110。接收端据此准确还原数据不会误判边界。6.3 出题角度与易错点软考里零比特填充题一般是这么出的给一段待发送数据问插入几个 0或者问填充后的序列是什么给一段接收到的比特流问哪些 0 要被删除把一段包含标志的数据放出来问接收端会把它分成几帧做这类题时最容易错的是漏掉 FCS 字段里的 1。零比特填充覆盖的范围是除了标志以外的所有字段FCS 作为帧的一部分同样需要填充不是只填信息字段。题目如果给出完整帧结构计算填充数量时一定要把 FCS 也考虑进去。这个考点本身不难难的是需要细致。我见过不少人在考场上数错连续 1 的组数事后一对答案发现只是漏了一组。平时练习时养成从低位往高位逐位扫描的习惯把每组连续的 5 个 1 都圈出来基本就不会错了。另外可以对比一下 PPP 的字节填充来理解HDLC 是面向比特的协议所以用插入 0 的方式PPP 是面向字节的协议遇到 0x7E 和 0x7D 时用转义字符处理。两种机制的思路完全一致都是让数据里不再出现边界标志只是实现粒度不同。7. HDLC和PPP到底是什么关系对照着记效率翻倍7.1 从HDLC到PPP的演进逻辑软考把 HDLC 和 PPP 放在一起考的次数太多了以至于你不得不琢磨它们之间的关系。实际上PPP 的同步链路帧格式正是借鉴了 HDLC 的类 HDLC 成帧设计很多书都直接说 PPP 的帧格式基于 HDLC。但 PPP 解决的痛点是 HDLC 没覆盖的HDLC 面向比特主要跑在同步链路上PPP 则可以同时支持同步和异步链路还增加了链路控制协议、网络控制协议和认证机制能够协商链路参数、动态分配网络层地址、做用户身份认证。简单地说PPP 在 HDLC 的骨架上加了更多管理能力把这些能力抽象成了专门的子协议。7.2 帧格式与功能对照表对照表是最适合这个考点的复习工具对比项HDLCPPP同步链路编址方式地址字段有意义区分主从站地址字段固定为 0xFF点到点不需要控制字段区分 I/S/U 帧实现可靠传输固定为 0x03不做序号确认协议字段无需要额外机制区分上层协议有 2 字节协议字段直接标识封装协议透明传输零比特填充字节填充 / 转义链路管理U 帧完成建链拆链LCP 子协议完成认证功能无内置PAP、CHAP 等适用场景路由器串口、SDH、分组交换网拨号、PPPoE、专线接入这张表背下来考察对比的题基本可以秒选。考试里最爱考的点是PPP 相比 HDLC 增加了什么答案核心是协议字段、LCP/NCP 子协议、认证机制这几个词。7.3 复习定位把HDLC讲清楚的推荐步骤如果你正在备考我建议按这个顺序把 HDLC 过一遍先背帧结构图把七个字段顺序和默认长度记住再记三种帧类型和 SABM/UA 建链时序这是链路层状态机的入门然后练零比特填充找真题里的填充题做三到五道最后把滑动窗口计算题的系统性做法练会注意区分窗口满不满两种情况对照 PPP 帧格式做一次差异总结两个考点一次解决这套顺序的核心思路是从记忆到计算再到对比逐步深入。HDLC 这块在考试里不是最难的但非常考察基础概念的扎实程度。很多人在上午题丢分不是题目有多深而是帧结构、N(R) 含义、填充规则这些基本功有漏洞。你肯花半天时间把上述逻辑完整推一遍考场上遇到 HDLC 的题基本可以保证稳定拿分。最后分享一个复习时的小经验不要只盯着表中字段死记自己在纸上画一画 A 和 B 两个站点互相发送 I 帧时 N(S)、N(R) 的变化过程。把每一帧的序号代入进去你会很快理解 N(R) 为什么表示期望收到的下一帧序号也会明白滑动窗口为什么能提升全双工链路的效率。这个画面一旦在脑子里建立起来HDLC 的零散考点就全都串成一条线了。
延伸阅读

更多相关文章

2026/10/17 7:40:03

基于MATLAB的WCDMA小区搜索三步法仿真详解

简介:面向无线通信学习者和 MATLAB 仿真开发者的 WCDMA 小区搜索代码,聚焦移动终端接入网络时的 P-SCH/S-SCH 同步与小区识别,同时包含 PCPICH 搜索、下行链路生成、扰码、脉冲成形、浮点转定点及结果对比等配套实现。压缩包共 16 个文件&…

2026/10/17 7:40:03

AI技能包开发全指南:从设计到排错,沉淀可复用能力

最近这一个月,我没干别的,就专心折腾一件事:把散落在各种对话里的临时任务,变成一套可以被AI助手按需调用的技能包。所谓技能包,你可以理解成给大模型外挂的一组说明书、脚本和参考数据,用户发起对应需求时…

2026/10/17 7:40:03

医院药品管理系统全栈实战:SpringBoot+Vue+MySQL从0到1开发详解

医院药品管理系统从0到1:SpringBootVueMySQL全栈源码拆解与落地笔记最近刚把手头一套医院药品管理系统(HIS药品管理子系统)的全栈源码整理完毕,技术栈是SpringBoot后端Vue前端MySQL数据库,结构清晰、可以直接跑起来。前…

2026/10/17 9:05:07

Oracle 包实战:用 TaoToken 统一管理 PL/SQL 存储过程与函数封装

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:05:07

C#上位机通过FINS协议读取PLC数据:从报文到工程实现

简介:面向C#开发者的欧姆龙PLC通信资源包,演示如何通过FINS协议连接、读取和写入PLC寄存器数据,覆盖帧构造、命令代码、响应解析等关键点,适合工业自动化上位机开发人员、电气工程师和PLC通信入门者。包内共45个文件,大…

2026/10/17 9:05:07

抖音测试小程序源码:零后台+流量主直通的轻量变现方案

简介:这是一份面向小程序开发者与副业实践者的抖音轻量级测试项目源码,聚焦快速上线与流量变现场景,特别适合前端基础扎实、希望低门槛切入抖音生态的个人开发者或小团队。资源包含236个文件,以27个JS逻辑文件为核心实现交互功能&…

2026/10/17 9:05:07

MFC+OpenGL加载OBJ模型贴图完整方案:解析、UV翻转与渲染

简介:本资源是一份面向计算机图形学初学者与C实践者的MFCOpenGL综合实验项目,聚焦于3D模型加载与纹理渲染这一核心图形编程任务。项目完整实现了OBJ格式模型的解析、顶点/法线/纹理坐标提取、VAO/VBO/IBO构建、外部MTL材质与BMP纹理加载及OpenGL管线渲染…

2026/10/17 9:00:07

superpowers:给AI编码助手装上工作流技能包

先说个我自己的真实经历。早前我用Codex、Claude Code这类AI编码工具,最上头的用法就是甩给它一句话:“帮我写个XX功能”,然后回车。它确实噼里啪啦输出一大段代码,我也确实兴冲冲地拿去跑,紧接着也确实收获了一堆红色…

2026/10/16 5:33:43

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/16 4:03:48

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/17 0:04:32

PlanarSLAM:面向曼哈顿世界的点线面联合SLAM系统

简介:本资源是面向机器人视觉与SLAM研究者的C开源RGB-D SLAM系统实现,专为结构化室内场景(如办公室、走廊)设计,通过融合点、线、平面三类几何特征并引入“曼哈顿世界”假设,显著提升位姿跟踪鲁棒性与稠密地…

2026/10/17 0:04:32

TDH Workflow调度实战:从DAG依赖驱动到任务编排与故障排查

1. 从一个调度脚本说起:TDH Workflow到底在解决什么问题第一次接触TDH的Workflow,是在一个数据清洗项目里。当时团队每天要跑几十个ETL任务,任务之间有严格的先后依赖——A表清洗完才能跑B表的关联,B表跑完才能触发C表的聚合。最开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑