前言
前面我们提到了 PSTN(Public Switched Telephone Network) ,今天介绍一种很少见的数据链路层的协议,HDLC!
文章目录
- 前言
- 1. 定义
- 2. 帧边界
- 3. 零比特填充
- 4. 控制字段
- 4.1. 信息帧(I帧)
- 4.2. 监控帧(S帧)
- 4.3. 无编号帧 (U帧)
- 后记
- 修改记录
1. 定义
HDLC(High-Level Data Link Control)
是一种面向比特的同步数据链路层协议,用于在网络节点间建立可靠的数据传输通道。支持全双工通信,适用于广域网中的点对点或多点链路环境,HDLC协议具有高可靠性,通过差错控制(CRC校验)和确认机制确保数据传输无误,同时采用固定帧格式和透明传输机制,减少额外开销。
2. 帧边界
HDLC帧的结构如下图所示:
我们在通讯线路上接收到一串零一时,都会思考何时开始何时结束。这就涉及到标志,也就是Flag。HDLC规定使用 0111 1110
来当标志,它包含6个连续的1,这在正常的数据流中出现的概率较低,所以拿它做标志。
至于为什么概率较低呢?在ASCII码中,最后一个可显示字符就是 7E
也就是波浪号。后面是不可见的控制字符了。所以此举也颇为合理。
3. 零比特填充
由于2中我们规定了 01111110
来当起始和终止的标志,那么我们的数据部分就不能出现这样的比特,防止接收方提前终止接收。
拿我们怎么办呢?发送方可以在连续的5个1之后填充一个0,然后再在接收方对应连续的5个1后面把0去掉即可。
4. 控制字段
HDLC协议在标志、地址信息之后,紧接着就是控制字段。控制字段最重要的功能就是标识它是 I、S、U 哪种帧。
帧类型 | 区别 | 作用 |
---|---|---|
I帧 | 第一位:为0 | 用于承载数据和控制 |
S帧 | 前两位为 10 | 差错控制、流量控制 |
U帧 | 前两位为 11 | 可靠的连接服务中负责链路的建立、拆除以及多种控制功能;提供不可靠的无连接服务时,也可以承载数据 |
这个控制字段正好是一个字节,它的划分很合理,先标识类型,后按照发与收的顺序分配这8个bit都负责什么。
4.1. 信息帧(I帧)
I帧的结构如下:
0 | N(S) | P/F | N (R) |
---|---|---|---|
1bit | 3bit | 1bit | 3bit |
其中:
N(S)
代表发送帧序号N(R)
代表预期要接收的帧序号:比如N(R)=6
,表示下一帧要接收6号帧。P/F
代表是否发送完毕,Poll 为轮询,继续发送;Final为发送完毕。
4.2. 监控帧(S帧)
前面的I帧干了最重要的传输数据的活儿,那么在当时,人们习惯性地将 控制信令和数据信令分开,那S帧就不得不干控制的活儿了。
S帧的结构如下:
10 | S | P/F | N (R) |
---|---|---|---|
2bit | 2bit | 1bit | 3bit |
S
代表S帧类型,S帧分四种,S帧主要的作用是流量控制,所以它用四种帧来移动帧下标。N(R)
代表预期要接收的帧序号:比如N(R)=6
,表示下一帧要接收6号帧。P/F
代表是否发送完毕,Poll 为轮询,继续发送;Final为发送完毕。
记忆符 | 名称 | S 字段 | 功能 |
---|---|---|---|
RR | 接收准备好 | 0 0 | 确认,且准备接受下一帧,已收妥N(R)以前的各帧 |
REJ | 拒绝接收 | 0 1 | 否认,否认N(R)起的各帧,但N(R)以前的帧已收妥 |
RNR | 接收未准备好 | 1 0 | 确认,暂停接收下一帧 |
SREJ | 选择拒绝接收 | 1 1 | 否认,只否认序号为N(R)的帧 |
4.3. 无编号帧 (U帧)
U帧的结构如下:
11 | M | P/F | M |
---|---|---|---|
2bit | 2bit | 1bit | 3bit |
它用于在连接的设备之间交换会话管理和控制信息,并且一些 U 帧包含一个信息字段,用于系统管理信息或用户数据。五个类型位(P/F 位之前的 2 位和 P/F 位之后的 3 位)可以创建 32 种不同类型的 U 帧。
它的功能有可以有:断开连接响应、无编号确认响应、设置模式、设置扩展模式、断开连接、设置初始化模式、信息传输……
这个类型的帧相当自由,它更像是一种功能的扩展。
后记
文中有任何错误、遗漏,烦请各位老铁在评论区指出,共同学习进步。
修改记录
更新日期 | 修改内容 |
---|---|
2025年5月13日 | 完成初稿 |