HDLC(High-Level Data Link Control,高级数据链路控制协议)是由国际标准化组织(ISO)制定的面向比特的数据链路层协议标准,标准编号为ISO/IEC 13239。在OSI七层模型中,HDLC位于第二层——数据链路层,其核心职责是在两个网络节点之间提供无差错、有序、不丢失和不重复的数据帧传输服务。
HDLC的历史可以追溯到20世纪70年代。IBM公司在1974年推出了SDLC(Synchronous Data Link Control,同步数据链路控制)协议,用于其SNA(系统网络体系结构)架构中的通信控制。ISO在SDLC的基础上进行了标准化和扩展,于1979年正式发布了HDLC标准。此后,HDLC成为数据链路层协议的事实基准,许多后续协议——包括PPP的点对点协议、LAPB(X.25的数据链路层)、LAPD(ISDN的D信道协议)、LAPF(帧中继的数据链路层)——都在不同程度上继承了HDLC的帧结构和控制机制。
在软考体系内,HDLC主要出现在网络工程师(中级)和网络规划设计师(高级)两个科目的考试中。中级网工侧重考查HDLC的基本帧结构、比特填充技术和帧类型识别;高级网规则进一步要求考生理解HDLC的工作模式(NRM/ARM/ABM)、三种帧类型(I/S/U)的功能差异及其在通信过程中的协作关系。值得注意的是,虽然HDLC在工程实践中已逐渐被PPP等协议替代,但在软考命题中它仍然是一个高频考点,原因在于HDLC的帧结构和控制机制是理解所有面向比特的数据链路层协议的基础。
从协议层次的角度理解HDLC,可以建立这样一个认知框架:物理层解决的是"比特怎么传"的问题(编码、调制、同步),而HDLC解决的是"比特传过去以后怎么组织成有意义的数据块"的问题(帧定界、差错检测、流量控制、链路管理)。HDLC定义了数据链路层最核心的三个功能域——帧的封装与定界、差错控制、流量控制——几乎所有后续的数据链路层协议都是以它为蓝本进行裁剪或增强的。
在历年考题中,HDLC的知识考查有一个显著特点:它经常和OSI七层模型的分层思想结合出题。例如,一道典型的网规真题会先描述一个通信故障现象(如数据帧被错误定界),然后让考生判断问题出在OSI的哪一层。如果考生理解HDLC作为数据链路层协议负责帧定界的核心职责,就能快速锁定数据链路层而非物理层或网络层。这种"协议职责→层次定位→故障归因"的推理链条,是软考网络类科目的核心考查逻辑。
HDLC帧的基本结构由六个字段组成,按照传输顺序依次为:标志字段(Flag,8比特)、地址字段(Address,8或16比特)、控制字段(Control,8或16比特)、信息字段(Information,长度可变)、帧校验序列(FCS,16或32比特)、标志字段(Flag,8比特)。六个字段中,Flag、Address、Control和FCS是每个帧都必须包含的,Information字段仅在I帧(信息帧)中出现,S帧(监控帧)和U帧(无编号帧)不携带Information字段。
标志字段(Flag)的固定值为二进制01111110(十六进制0x7E),它承担着帧定界的核心功能——接收方通过识别Flag序列来确定一个帧的开始和结束。这里引出了HDLC协议设计中最精巧的一个机制:比特填充(Bit Stuffing)。由于Flag序列01111110中包含了六个连续的"1",如果数据部分——包括Address、Control、Information和FCS字段——的任意位置碰巧出现了五个以上的连续"1",接收方就可能误将其识别为Flag,导致帧定界错误。为了解决这个问题,HDLC规定发送方在每发送五个连续的"1"之后自动插入一个"0"(这个过程称为零比特填充),接收方在收到数据后执行逆操作——每检测到五个连续的"1"且后面紧跟一个"0"时,自动删除这个"0"。这样,标志序列01111110中的六个连续"1"就不会被比特填充规则改变(因为六个"1"不是"五个1加插入的0"),从而在数据流中唯一地标识帧边界。这个机制的精妙之处在于:它不需要预先知道帧的长度,也不需要对数据内容做任何语义限制,完全在物理层和数据链路层的交界处通过纯比特层面的操作来保证帧定界的可靠性。网规真题中反复出现的一道经典题目——"HDLC协议中采用比特填充技术的目的是避免帧内部出现01111110序列时被当作标志字段处理"——考查的正是这个核心机制。
控制字段(Control)是HDLC帧最复杂的部分,它决定了帧的类型和功能。根据控制字段第一个比特的不同取值,HDLC将帧分为三种类型:第一个比特为0的是I帧(Information Frame,信息帧),用于传输用户数据,同时捎带发送方的发送序号N(S)和接收序号N(R);前两个比特为10的是S帧(Supervisory Frame,监控帧),不携带用户数据,专门用于流量控制和差错控制,通过RR(接收就绪)、RNR(接收未就绪)、REJ(拒绝)和SREJ(选择拒绝)四种命令/响应来实现滑动窗口协议的管理;前两个比特为11的是U帧(Unnumbered Frame,无编号帧),用于链路建立、拆除、模式设置等链路管理功能,典型命令包括SABM(设置异步平衡模式)、SABME(设置扩展异步平衡模式)、DISC(断开连接)、UA(无编号确认)和FRMR(帧拒绝)等。
真题中频繁考查的一个易错点是U帧的识别。以2021年网规真题第11题为例:题干给出了一个HDLC通信过程图,包含SABME、UA、REJ和I帧等帧类型,要求考生判断哪些属于U帧。正确答案是SABME和UA——SABME用于建立链路连接,UA是对方对SABME的确认,两者都是控制链路建立的无编号帧。而REJ(拒绝)虽然也属于控制类帧,但它的前两个比特是10,因此归类为S帧(监控帧),不是U帧。这道题考查的核心能力是:根据控制字段的前两个比特精确判断帧类型,而非凭语义直觉猜测。
地址字段(Address)在HDLC中始终标识的是从站(次站)的地址——在命令帧中表示接收方地址,在响应帧中表示发送方地址。这种设计源于HDLC早期的应用场景:多点链路上一个主站控制多个从站,地址字段永远指向"主站正在和哪个从站通信"。帧校验序列(FCS)采用CRC循环冗余校验,生成多项式通常为CRC-16或CRC-32,校验范围覆盖Address、Control和Information三个字段(不包括Flag和比特填充插入的零)。
HDLC的三种帧类型——I帧、S帧和U帧——在通信过程中各司其职,形成了一套完整的链路控制体系。理解三者之间的协作关系,比孤立地记忆每种帧的功能定义更有价值。
I帧承担的是数据传输的主线任务。每个I帧都有一个发送序号N(S)(表示本帧是发送方发出的第几个数据帧)和一个接收序号N(R)(表示本方期望接收的下一个帧的序号,同时隐含确认N(R)-1及之前的所有帧已正确收到)。这种"捎带确认"(Piggybacking)的设计极大地提高了通信效率——接收方不必为每个成功收到的数据帧单独发送一个确认帧,而是将确认信息附带在反向传输的数据帧中。I帧的控制字段中还有一个P/F(Poll/Final,轮询/终止)比特,当作为命令帧发送时P=1表示要求对方立即响应,当作为响应帧发送时F=1表示这是最后一帧响应。
S帧不携带数据,专门用于链路监控。四种S帧类型的应用场景各具特色:RR帧(Receive Ready,接收就绪,编码为00)表示本方已准备好接收下一帧,是最常见的确认帧——当没有反向数据帧可以捎带确认时,用RR帧独立发送确认;RNR帧(Receive Not Ready,接收未就绪,编码为10)表示本方暂时无法接收数据(如缓冲区满),要求对方暂停发送,实质上是一种流量控制信号;REJ帧(Reject,拒绝,编码为01)告诉对方"从N(R)号帧开始我需要重传",采用的是回退N帧重传策略(Go-Back-N);SREJ帧(Selective Reject,选择拒绝,编码为11)则更精细——告诉对方"只需要重传N(R)这一个帧",对应的是选择重传策略(Selective Repeat)。这四种S帧在软考中的考查重点是RR/RNR与REJ/SREJ之间的功能区分:前两者是流量控制工具,后两者是差错控制工具。
需要特别指出的是,真题中REJ帧和SREJ帧的区分是一个容易忽视的细节。REJ帧要求对方重传从N(R)开始的所有后续帧(回退N帧),效率较低但实现简单;SREJ帧只要求重传N(R)指定的那一帧(选择重传),效率更高但要求接收方有足够的缓冲区来暂存已接收但乱序的帧。如果题目描述"接收方要求发送方只重传第5号帧",这对应的就是SREJ而非REJ。这一区分在网工中级的滑动窗口协议题目中经常与TCP的选择确认机制形成交叉考查。
U帧的命名本身就提示了其独特性——"无编号"意味着这类帧不携带N(S)和N(R)序号,因为链路管理操作不涉及数据帧的序号管理。U帧的功能可以分为四类:模式设置命令与响应(如SABM、SABME、SNRM、DISC、UA)、信息传输命令与响应(如UI无编号信息帧)、恢复命令与响应(如FRMR帧拒绝、RSET重置)以及其他杂项命令与响应(如XID交换标识、TEST测试)。其中,SABME(Set Asynchronous Balanced Mode Extended,设置扩展异步平衡模式)是软考考查频率最高的U帧命令——SABM使用3比特序号(模8),窗口大小为7;SABME使用7比特序号(模128),窗口大小为127。这个差异在网规考试中也经常以"SABM和SABME的区别"的形式出现。
HDLC定义了三种链路工作模式:正常响应模式(NRM,Normal Response
本篇完!