HDLC协议

HDLC协议:原理、特点与工作过程

概述

HDLC是一种基于比特流的同步传输协议,是一种运行在串行链路上的协议 

将设备分为主站,从站复合站,在链路上用于控制目的站称为主站,其它的受主站控制的站称为从站,复合站既可以发送命令也可以响应命令

 

报文

FLAG:标识报文的开始与结束,用01111110标识

Address:8b,标识链路在站上的地址,全1为全站地址,全0为无站地址

control:控制段,用于区分三种类型帧,具体情况如图所示
 

S字段(supervisory function bit):监控命令字段,2bit组成4种监控命令

M字段(modifier function bit):无编号帧的命令字段,共5bit

FCS:校验和,16位,用于检验数据完整性

类型 

I帧

信息帧,通常用于传输数据

较为重要的字段有N(S)字段(transmitting send sequence number),N(R)字段,P/F字段(poll/final)

N(S)transmitting send sequence number标记当前传输的信息的编号,基本帧格式3b,非基本帧格式可拓展至7b或15b
N(R)Receive sequence number标记期望接收的序列号 
P/Fpoll/final查询/结束

S帧

监管帧,通常用于流量管控,差错控制

内容包含RR,RNR,REJ,SREJ

RR00接收就绪,请求下一帧
RNR10接收未就绪,请求暂停
REJ01拒绝,要求重传所有编号
SREJ11拒绝,要求重传指定帧

U帧

无编号帧,提供链路建立和拆除,有5个M位,可标识32种命令,但大多空缺,可参考图表

DM11000断开模式
SNRM00001正常响应模式
FRMR10001拒绝
DICS/RD00010请求断开连接
XID11101交换识别
UA00110无编号确认

特点

1.可实现透明传输

2.只支持点到点链路,不支持点到多点

3.不支持IP地址协商,不支持认证

4.协议内部通过Keepalive报文来检测链路状态

5.0比特插入法,为防止误识flag导致报文信息不正确,当放送数据是011111时,在5个1后补0

链路配置

非平衡配置

既可用于点对点链路也可用于多点链路。这种链路由一个主站和多个从站组成,可以支持全双工或半双工

平衡配置

只能用于点对点链路。这种配置由两个复合站组成,同样支持全双工或半双工传输。

操作模式

正常响应方式(NRM)

   适用于不平衡链路结构,即用于点-点和点-多点的链路结构中,特别是点-多点链路。主站控制整个链路的操作,负责链路的初始化、数据流控制和链路复位等。从站只有在收到主站的明确允许后,才能发出响应

异步响应方式(ARM)

  也适用于不平衡链路结构。它与NRM不同的是:在ARM方式中,从站可以不必得到主站的允许就可以开始数据传输。显然它的传输效率比NRM有所提高

异步平衡方式(ABM)

  适用于平衡链路结构。链路两端的复合站具有同等的能力,不管哪个复合站均可在任意时间发送命令帧,并且不需要收到对方复合站发出的命令帧就可以发送响应帧。ITU-T X.25建议的数据链路层就采用这种方式

工作过程

建立链路

如果链路属于多点链路,则建立结果如下

1.双方调整参数,准备进行链路搭建

2.主站发送链路请求帧,请求搭建链路

3.次站进行分析做出对应操作,可以接收回复链路确认信息

4.重复2,3部,直到想到目的站点可通

倘若双方都是复合站,那么建立过程如上图所示,仅需1次

传输信息

传输信息,双方通过keeplive报文确认链路存活

断开连接

同理,对于多点链路的链路释放,过程:

1.依次发送断开请求

2.对端收到后回复确认断开链路,释放相关资源

复站间链路释放如图所示

总结

HDLC的可靠传输,透明传输使得ta在历史上发光发热,为许多误码率高的网络贡献自己的力量但随技术发展,技术不断完善的今天,HDLC无法提供认证的缺陷也决定了它的命运

 

 

### HDLC协议详解 HDLC(High-Level Data Link Control)是一种面向比特的数据链路层协议,主要用于在同步串行数据链路上封装和传输数据[^2]。它由国际标准化组织ISO制定,是基于IBM的SDLC(Synchronous Data Link Control)协议发展而来的。HDLC的主要目标是提供一个通用的方法来通过物理层进行点对点的数据传输。 #### 工作原理 HDLC的工作原理主要体现在其帧结构上。HDLC帧包括几个关键部分:标志字段、地址字段、控制字段、信息字段以及帧校验序列(FCS)。每个部分都有特定的功能: - **标志字段**:通常为`01111110`,用来标记帧的开始和结束。 - **地址字段**:包含了目的站或源站的地址信息。 - **控制字段**:用于定义帧的类型,比如信息帧、监控帧或者无编号帧,并且包含必要的流控和差错控制信息。 - **信息字段**:承载用户数据,仅存在于信息帧中。 - **帧校验序列 (FCS)**:用于检测传输过程中可能发生的错误。 在实际操作中,当发送端准备发送数据时,它会构建一个符合HDLC规范的帧,然后通过物理媒介将这个帧传输出去。接收端接收到帧后,首先检查帧头和帧尾的标志位以确定帧的边界,接着验证地址是否匹配自身,再根据控制字段处理数据,并利用FCS进行错误检测。如果一切正常,接收端就会向发送端返回确认信号;如果有错误发生,则可能会请求重传。 #### 应用场景 HDLC因其灵活性和支持多种网络配置的能力,在历史上被广泛应用于各种类型的通信系统中。它可以支持点对点连接或多点配置下的数据传输,适用于如电话线、光纤甚至无线通信等不同的物理媒介。由于这些特性,HDLC成为了许多其他高级网络协议的基础,例如PPP(Point-to-Point Protocol),并且对现代网络技术的发展产生了深远的影响。 此外,HDLC还能够适应不同规模的网络环境,从广域网(WAN)到局域网(LAN)都能见到它的身影。尽管随着TCP/IP协议栈的普及,HDLC的应用有所减少,但在某些特定领域,尤其是在需要可靠数据传输但又不需要复杂IP路由功能的地方,HDLC仍然保持着一定的使用率。 ```python # 示例代码 - 模拟创建一个简单的HDLC帧 def create_hdlc_frame(address, control, data): flag = b'\x7E' # HDLC Flag byte fcs = calculate_fcs(data) # 假设存在计算FCS的函数 frame = flag + address.to_bytes(1, 'big') + control.to_bytes(1, 'big') + data.encode() + fcs return frame def calculate_fcs(data): # 简化版FCS计算逻辑 crc = 0xFFFF for byte in data: crc ^= (byte << 8) for _ in range(8): if crc & 0x8000: crc = (crc << 1) ^ 0x1021 else: crc <<= 1 return crc.to_bytes(2, 'big') ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值