当前位置: 首页 > ds >正文

【3-2】HDLC

前言

前面我们提到了 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帧的结构如下:

0N(S)P/FN (R)
1bit3bit1bit3bit

其中:

  • N(S) 代表发送帧序号
  • N(R) 代表预期要接收的帧序号:比如 N(R)=6 ,表示下一帧要接收6号帧。
  • P/F 代表是否发送完毕,Poll 为轮询,继续发送;Final为发送完毕。

4.2. 监控帧(S帧)

前面的I帧干了最重要的传输数据的活儿,那么在当时,人们习惯性地将 控制信令和数据信令分开,那S帧就不得不干控制的活儿了。

S帧的结构如下:

10SP/FN (R)
2bit2bit1bit3bit
  • 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帧的结构如下:

11MP/FM
2bit2bit1bit3bit

它用于在连接的设备之间交换会话管理和控制信息,并且一些 U 帧包含一个信息字段,用于系统管理信息或用户数据。五个类型位(P/F 位之前的 2 位和 P/F 位之后的 3 位)可以创建 32 种不同类型的 U 帧。

它的功能有可以有:断开连接响应、无编号确认响应、设置模式、设置扩展模式、断开连接、设置初始化模式、信息传输……
这个类型的帧相当自由,它更像是一种功能的扩展。

后记

文中有任何错误、遗漏,烦请各位老铁在评论区指出,共同学习进步。

修改记录

更新日期修改内容
2025年5月13日完成初稿
http://www.xdnf.cn/news/6034.html

相关文章:

  • 详解注意力机制
  • Linux文件编程——读写结构体、链表等其他类型的数据
  • 9.9 Ollama私有化部署Mistral 7B全指南:命令行交互到API集成全流程解析
  • 格雷希尔G10和G15系列自动化快速密封连接器,适用于哪些管件的密封,以及它们相关的特性有哪些?
  • 参考UTD的上市公司供应链信息数据库(2017-2022)
  • 深度学习模型在目标检测任务中的前向传播(forward)和反向传播(backward)过程
  • 基于STM32、HAL库的TLV320AIC3101IRHBR音频接口芯片驱动程序设计
  • NovaMSS v1.40音乐源分离工具,一键提取伴奏人声贝斯鼓点分离音轨等
  • 交流充电桩IEC 61851-1和IEC 61851-21-2标准测试项目
  • Deno、Bun、Node.js 性能对比与选型指南
  • C++23 ranges::range_adaptor_closure:程序定义的范围适配器闭包的辅助类
  • flutter Stream 有哪两种订阅模式。
  • 从新手到高手:全面解析 AI 时代的「魔法咒语」——Prompt
  • Hue面试内容整理-后端框架
  • C++11异步编程 --- async
  • 多目应用:三目相机在汽车智能驾驶领域的应用与技术创新
  • Generative Diffusion Prior for Unified Image Restoration and Enhancement论文阅读
  • Kafka原理深度剖析
  • 【大模型LLM学习】MiniCPM的注意力机制学习
  • LVS+keepalived实战案例
  • 2025-05-13 表征学习
  • Datawhale 5月llm-universe 第1次笔记
  • 从Aurora 架构看数据库计算存储分离架构
  • ArcGIS、InVEST与RUSLE在水土流失模拟及分析中的实践技术
  • C# 高级编程:Expression表达式
  • 记录vsCode连接gitee并实现项目拉取和上传
  • 力扣Hot100(Java版本)
  • 如何学习VBA_3.3.3 VBA程序写好后,如何进行调试,直到程序运行
  • 力扣-543.二叉树的直径
  • 每周靶点分享:Nectin-4、CDH6及文献分享