Appearance
HDLC 高级数据链路控制
2026 大纲「三(七)广域网」下只有 1 广域网的基本概念与 2 PPP 协议两条,已不含 HDLC。本篇作为《PPP 协议》的对照篇保留,只求理解帧格式的组织方式与两种透明传输做法的对比,细节读懂即可不必记。
一、同一条链路,为什么早年的协议要做可靠传输
上一节反复强调 PPP"其他什么也不做"——不纠错、不设序号、不做流量控制。但在 PPP 之前,广域网链路上跑的 HDLC 恰恰相反:它的信息帧带序号,能确认、能重传、能做流量控制。
同一层、同一类链路,两个协议的取舍为什么完全相反?根源是时代,不是技术优劣。
HDLC 诞生时通信线路的误码率很高。坏帧若不就地重传,就要一路传到目的地才被端到端机制发现,重传代价是时延乘以距离,极大——链路层做可靠传输划算。PPP 诞生时光纤已经普及,误码率大幅下降,就地重传的收益骤减而复杂度一分不少,于是把可靠性整个交给 TCP。
教材把这条取舍写得很直接:"这种方法在历史上曾经起到很好的作用。但现在的通信线路的质量已经大大提高了……因此,现在互联网就采取了区别对待的方法。"
而无线的 802.11 又把逐帧确认捡了回来——因为无线的误码率重新变高了。这条随误码率而变的取舍,比记住三种站类型有用得多,它在本章里出现了三次。
HDLC 本身是 ISO 制定的面向比特的链路层协议,由 IBM 的 SDLC 发展而来;用零比特填充实现透明传输;点对点与多点链路均适用。
二、帧格式:一个格式承载三类功能
┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│ 标志 F │ 地址 A │ 控制 C │ 信息 I │ FCS │ 标志 F │
│ 01111110 │ 8 位 │ 8/16 位 │ 可变长 │ 16 位 │ 01111110 │
└──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘所有帧共享这一个格式,这是 HDLC 设计上最值得注意的一点。控制字段 C 决定帧的类型与功能;信息字段 I 并非所有帧都有;FCS 是 16 位 CRC,校验范围是地址 + 控制 + 信息。
三类帧靠控制字段的前 1~2 位区分,不是靠"有没有信息字段":
| 帧类型 | 控制字段格式 | 判定 | 用途 | 有信息字段吗 |
|---|---|---|---|---|
| 信息帧 I | 0 N(S) P/F N(R) | 第 1 位 0 | 传输用户数据 | 有 |
| 监督帧 S | 10 SS P/F N(R) | 前 2 位 10 | 流量控制与差错控制 | 无 |
| 无编号帧 U | 11 MM P/F MMM | 前 2 位 11 | 链路管理 | 部分有 |
这是一种前缀编码:0 一位就够,把一半编码空间给最常用的数据帧,10、11 各占四分之一——最频繁的帧类型用最短的标识符,霍夫曼式的思路。
I 帧里 N(S) 是发送序号、N(R) 是接收序号("我期望收到你的下一帧编号",即捎带确认),P/F 是轮询/终止位(命令帧为 P,响应帧为 F)。序号位数决定窗口上限:控制字段 8 位时 N(S)/N(R) 各 3 位,
地址字段始终标识从站:命令帧填对方(从站)地址,响应帧填本站(从站)地址。多点链路上主站只有一个,说清"是哪个从站"就足够定位一次通信;ABM 下两站都是复合站,标识的是响应方。
U 帧的"无编号"指没有序号,不是"没有编码":那 5 位 M 码是功能码(SABM / DISC / UA 等 32 种),与 N(S)/N(R) 是两回事。
S 帧的两位 SS:把两类机制装进同一个字段
| SS | 名称 | 含义 | 对应机制 |
|---|---|---|---|
00 | RR(Receive Ready) | 准备接收,确认 N(R)−1 及之前所有帧 | 正常确认 |
01 | REJ(Reject) | 从 N(R) 开始重传后续所有帧 | 对应 GBN |
10 | RNR(Receive Not Ready) | 接收方忙,暂时不能接收 | 流量控制 |
11 | SREJ(Selective Reject) | 仅重传 N(R) 号帧 | 对应 SR |
REJ 对应 GBN、SREJ 对应 SR——HDLC 把前面两节讲的两种重传策略都做进同一个 2 位字段,由实现方按链路特性选用。
RNR 是流量控制不是差错控制:它不是说"你发错了",而是"我缓冲区满了,先别发"。这是一个显式的刹车信号——对照 TCP 的流量控制用接收窗口 rwnd 隐式表达同一件事。
三种站与三种操作方式
HDLC 支持多点链路,所以要区分链路上各节点的角色:主站(控制链路操作、发命令帧)、从站(受主站控制、发响应帧)、复合站(两者皆可)。
| 模式 | 全称 | 链路配置 | 从站能否主动发 | 应用 |
|---|---|---|---|---|
| NRM | 正常响应模式 | 不平衡(1 主 + N 从) | 不能,必须等主站轮询 | 主从式网络 |
| ABM | 异步平衡模式 | 平衡(2 个复合站) | 双方都可主动发起 | 点对点链路,使用最广 |
| ARM | 异步响应模式 | 不平衡(1 主 + N 从) | 可以不经轮询主动发响应帧 | 实际很少使用 |
NRM 与 ARM 的唯一区别是"从站要不要等轮询",链路配置完全一样(都是不平衡);ABM 则是配置本身不同(两个对等的复合站)。
顺带一提,NRM 的"主站轮询从站"正是轮询访问那条路线在多点链路上的体现——发送权由中心节点集中授予,与令牌传递的分散控制相对。
控制字段(8 位)的三种排布:
I 帧 ┌───┬─────────┬─────┬─────────┐
│ 0 │ N(S) 3位│ P/F │ N(R) 3位│
└───┴─────────┴─────┴─────────┘
S 帧 ┌────┬────────┬─────┬─────────┐
│ 10 │ SS 2位 │ P/F │ N(R) 3位│
└────┴────────┴─────┴─────────┘
U 帧 ┌────┬────────┬─────┬─────────┐
│ 11 │ MM 2位 │ P/F │ MMM 3位 │
└────┴────────┴─────┴─────────┘U 帧的 MM + MMM 共 5 位编码,可定义
三、透明传输:与 PPP 的同步方案完全相同
HDLC 用 01111110 作帧定界标志。发送方在数据部分每遇到连续 5 个 1 就在其后插入一个 0,接收方每遇到 5 个 1 就删除紧跟的那个 0。这样保证数据部分永远不会出现 6 个连续 1,自然也不会出现 01111110。
还有一条帧结构上的细节:相邻两帧可共用一个标志字段——前一帧的结束标志同时充当后一帧的开始标志。HDLC 与 PPP 的标志完全相同(01111110 / 0x7E),不同的只是透明传输方案:HDLC 只有零比特填充一套,PPP 按物理层另备一套字节填充。
四、HDLC 与 PPP 的完整对比
这张表是本篇存在的理由。
| 对比项 | HDLC | PPP |
|---|---|---|
| 面向类型 | 面向比特 | 面向字节 |
| 传输可靠性 | 支持(I 帧带 N(S)/N(R),可确认重传) | 不支持(无序号,坏帧直接丢弃) |
| 流量控制 | 支持(RNR / 滑动窗口) | 不支持 |
| 链路类型 | 点对点 与多点 均支持 | 仅点对点 |
| 双工方式 | 半双工与全双工 | 仅全双工 |
| 操作模式 | NRM / ABM / ARM 三种 | 只有点对点一种 |
| 透明传输 | 零比特填充 | 异步用字节填充,同步用零比特填充 |
| 帧定界标志 | 01111110 | 0x7E(即 01111110,相同) |
| 帧类型 | I 帧 / S 帧 / U 帧 三种 | 仅一种帧格式 |
| 站类型 | 主站 / 从站 / 复合站 | 无站类型区分(对等) |
| 地址字段 | 有实际功能(标识从站) | 固定 0xFF,无实际意义(可协商省略) |
| 控制字段 | 有实际功能(区分帧类型、带序号) | 固定 0x03(无编号帧) |
| FCS 长度 | 16 位 | 16 位(2 字节) |
| FCS 校验范围 | 地址 + 控制 + 信息 | 地址 + 控制 + 协议 + 信息 |
| 网络层支持 | 无专门机制 | NCP,支持多种网络层协议并协商 |
| 鉴别功能 | 不提供 | 支持 PAP / CHAP |
| 协议复杂度 | 复杂 | 简单 |
| 应用场景 | 传统广域网链路 | Internet 拨号 / 宽带接入 |
从表里能读出三件事。
- PPP 是 HDLC 的"简化再扩展"。 帧定界标志与骨架相同,但它砍掉序号与确认、加上 NCP 与鉴别——砍的是误码率下降后不再划算的,加的是互联网时代新出现的需求。
- 地址与控制字段的"退化"是场景变化的直接结果。 HDLC 支持多点链路,地址要标识从站、控制要带序号;PPP 只支持点对点全双工,两个字段就无事可做。字段有没有用,取决于协议要解决的问题还在不在。
- "一个格式三类帧" vs "一种格式"是复杂度的分水岭。 HDLC 用控制字段前缀编码,代价是每收一帧先解码;PPP 用协议字段说明"里面装的是什么",把分类负担从控制字段挪到协议字段,维度从"帧的功能"变成"载荷的归属",更适合通用承载。
本节小结
- HDLC 与 PPP 最大的差别是"可不可靠",根源是时代而非技术优劣:误码率高时链路层重传划算,误码率低时收益骤降而复杂度不减,于是可靠性整个交给 TCP。
- 所有帧共享一个格式,靠控制字段前 1~2 位的前缀编码区分 I / S / U 三类;地址字段始终标识从站,相邻两帧可共用一个标志。S 帧的 SS 两位里 REJ 对应 GBN、SREJ 对应 SR、RNR 是流量控制。
- 透明传输用零比特填充,与 PPP 的同步方案完全相同,两者帧定界标志也相同,差别只在 PPP 按物理层另备一套字节填充。口诀:HDLC 面向比特有序号(可靠),PPP 面向字节无序号(不可靠)。
考点速记
HDLC 已被 2026 大纲移出(三(七)下只剩"广域网的基本概念"与"PPP 协议"两条),本节不单独成题。
但有一处要注意:真题里考过 HDLC 的零比特填充(cn-2013-37,"HDLC 协议采用零比特填充法,对数据 01111100 01111110 组帧后的比特串")。那道题渲染在封装成帧与透明传输的练习区(它挂的 topic 是组帧),做法与完整走查也记在那一篇——HDLC 在这里只是题面的一个背景词,考的是组帧规则本身。
除此之外,HDLC 在真题的题干与选项里只作对照项出现:分层模型题里与以太网、PPP 并列举例,协议归属题里当干扰项。没有一道题考它的三种站类型、三种操作方式或控制字段编码。
所以本节的正确用法是:用它来理解 PPP 为什么长成那样。第四部分那张对比表里,真正会被考到的只有三行——可靠性、链路类型、面向比特还是面向字节,而它们全都出现在与 PPP 对照的语境里。
易错:零比特填充是 HDLC 与 PPP(同步方式)共用的机制,帧定界标志也完全相同。 两者的区别不在这里,在于 PPP 另有一套异步字节填充,而 HDLC 没有。
易错:HDLC 支持可靠传输,PPP 不支持。 根源是 I 帧带 N(S)/N(R) 序号——没有序号就谈不上确认与重传。
易错:U 帧的"无编号"指没有序号,不是没有编码。 那 5 位是功能码,能定义 32 种命令。
易错:RNR 是流量控制,不是"拒绝、要求重传"。要求重传的是 REJ 与 SREJ。
教材出处
- 谢希仁《计算机网络》(第 8 版)印刷 p78,3.1.3 节:链路层可靠传输取舍随线路质量而变的完整论述——"过去 OSI 的观点是:必须让数据链路层向上提供可靠传输。因此在 CRC 检错的基础上,增加了帧编号、确认和重传机制……这种方法在历史上曾经起到很好的作用。但现在的通信线路的质量已经大大提高了,由通信链路质量不好引起差错的概率已经大大降低。 因此,现在互联网就采取了区别对待的方法:对于通信质量良好的有线传输链路,数据链路层协议不使用确认和重传机制"。本篇第一节"为什么 HDLC 可靠而 PPP 不可靠"的全部依据出自这一段。同页还给出"无比特差错"与"无传输差错"的辨析——"在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输"。
- 同书印刷 p80–p81:PPP 帧格式与两套透明传输方案的原文(详见 PPP 篇引证),本篇对比表以此为准。
谢希仁第 8 版未专门讨论 HDLC 协议(该书第 3 章的点对点信道部分直接讲 PPP)。因此本篇的三种站类型、三种操作方式、控制字段位域编码与三种帧类型不标注该书页码——这些内容依据 ISO/IEC 13239(HDLC)的机制描述。本篇也正因如此只作"理解即可"的对照篇处理。
相关知识
PPP 点对点协议|封装成帧与透明传输|后退 N 帧协议(GBN)|选择重传协议(SR)