1 HDLC协议概述
1.1 HDLC协议产生背景
七十年代初,IBM公司率先提出了面向比特的同步数据控制规程SDLC(SynchronousData Link Control)。随后,ANSI和ISO均采纳并发展了SDLC,并分别提出了自己的标准:ANSI的高级通讯控制过程ADCCP(Advanced Data Communication Control Procedure),ISO的高级数据链路控制规程————HDLC(High_level Data Link Control)。
HDLC是面向比特的数据链路控制协议的典型代表,该协议不依赖于任何一种字符编码集;数据报文可透明传输,用于实现透明传输的“0比特插入法”易于硬件实现;全双工通信,有较高的数据链路传输效率;所有帧采用CRC检验,对信息帧进行顺序编号,可防止漏收或重份,传输可靠性高;传输控制功能与处理功能分离,具有较大灵活性。
1.2 HDLC协议特点和格式
链路控制协议着重于对分段成物理块或包的数据的逻辑传输,块或包由起始标志引导并由终止标志结束,也称为帧。帧是每个控制、每个响应以及用协议传输的所有信息的媒体和工具。所有面向比特的数据链路控制协议均采用统一的帧格式,不论是数据还是单独的控制信息均以帧为单位传送。
每个帧前、后均有一标志码01111110,用作帧的起始、终止指示帧的同步。标志码不允许在帧的内部出现,以免引起畸意。为保证标志码的唯一性但又兼顾帧内数据的透明性,可以采用“0比特插入法”来解决。该法在发送端监视除标志码以外的所有字段,当发现有连续的5个“1”出现时,便在其后添加一个“0”,然后继续发送后继的比特流。在接收端,同样监视除除标志码以外的所有字段。当连续发现5个“1”出现后,若其后一个比特为“0”,则自动删除它,以恢复原来的比特流;若发现连续6个连“1”,则可能是插入的“0”发生错误,也可能是收到了终止标志码。
作为面向比特的同步数据控制协议的典型,HDLC协议具有如下特点:
1、协议不依赖于任何一种字符编码集;
2、数据报文可透明传输,用于透明传输的“0比特插入法”易于硬件实现;
3、全双工通讯,不必等待确认可连续发送数据,有较高的数据链路传输效率;
4、所有帧均采用CRC校验,对信息帧进行顺序编号,可防止漏收或重收,传输可靠性高;
5、传输控制功能与处理功能分离,具有较大的灵活性和较完善的控制功能。
由于以上特点,目前网络设计及整机内部通讯设计普遍使用HDLC数据链路控制协议。
2 HDLC协议的操作方式
HDLC是通用的数据链路控制协议,当开始建立数据链路时,允许选用特定的操作方式。所谓链路操作方式,通俗地讲就是以主节点方式操作,还是以从节点方式操作,或者是二者兼备。
在链路上用于控制目的的节点称为主节点,其他的受主节点控制的节点称为从节点。主节点负责对数据流进行组织,并且对数据上的差错实施恢复。由主节点发往从节点的帧称为命令帧,而由从节点返回主节点的帧称为响应帧。连有多个节点的链路通常使用轮询技术,轮询其他节点的节点为主节点,而在点到点链路中每个节点均可为主节点。在一个节点点连接多条链路的情况下,该节点对于一些链路而言可能是主节点,而对另外一些链路而言有可能是从节点。
HDLC中常用的操作方式有3种:
(1)正常响应方式 NRM
正常响应方式 NRM(Normal Response Mode)一种非平衡数据链路操作方式,有时也称为非平衡正常响应方式。该操作方式使用于面向终端的点到点或一点到多点的链路。在这种操作方式下,传输过程由主节点启动,从节点只有收到主节点某个命令帧后,才能作为响应向主节点传输信息。响应信息可以由一个或多个帧组成,若信息由多个帧组成,则应指出哪一帧是最后一帧。主节点负责管理整个链路,且具有轮询、选择从节点及及向从节点发送命令的权利,同时也负责对超时、重发及各类恢复操作的控制。
(2)异步响应方式 ARM
异步响应方式 ARM(Asynchronous Response Mode)也是一种非平衡数据链路操作方式,与NRM不同的是,ARM下的传输过程由从节点启动。从节点主动发送给主节点的一个或一组帧中可包含有信息,
也可以是仅以控制为目的而发的帧。在这种操作方式下,由从节点来控制超时和重发。该方式对采用轮询方式的多节点点链路来说是比不可少的。
(3)异步平衡方式ABM
异步平衡方式ABM(Asynchronous Balanced Mode)是一种允许任何节点来启动传输的操作方式。为了提高链路传输效率,节点之间在两个方向上都需要有较高的信息传输量。在这种操作方式下,
任何时候任何节点都能启动传输操作,每个节点点即可以作为主节点又可以作为从节点,即每个节点都是组合节点。各个节点都有相同的一组协议,任何节点都可以发送或接受命令,也可以给出应答,并且各节点对差错恢复过程都负有相同的责任。
3 HDLC协议的帧格式
在HDLC中,数据和控制报文均以帧的标准格式传送。HDLC中的帧类似于BSC的字符块,但不是独立传输的。HDLC的完整的帧由标志字段(F)、地址字段(A)、控制字段(C)、信息字段(I)、帧校验序列字段(FCS)等组成。HDLC帧数据结构如图1所示:
图1:HDLC帧数据结构图
3.1 标志字段(F)
标志字段为01111110的比特模式,用以标志帧的开始与结束,也可以作为帧与帧之间的填充字符。通常,在不进行帧传送的时刻,信道仍处于激活状态,在这种状态下,发送方不断地发送标志字段,而接收方则检测每一个收到的标志字段,一旦发现某个标志字段后面不再是一个标志字段,便可认为新的帧传动已经开始。采用“0比特插入法”可以实现数据的透明传输。
发送端在两个标志字段之间的比特序列中,如果检查出连续的5个1,不管它后面的比特位是0或1,都增加1个0;在接收端,在2个标志字段之间的比特序列中检查出连续的5个1之后就删除1个0。
3.2 地址段(A)
当地址字段的首位为1时表示地址字段为8位;当首位为0时表示地址字段为16位。
地址字段的内容取决于所采用的操作方式,有主节点、从节点、组合节点之分。每个从节点与组合节点都被分配一个唯一的地址,命令帧中的地址字段携带的是对方节点的地址,而响应帧中的地址字段所携带的地址是本节点的地址。某一地址也可分配给不止一个节点,这种地址称为组地址,利用一个组地址传输的帧能被组内所有拥有该地址的节点接收。但当一个节点或组合节点发送响应时,它仍应当用它唯一的地址。
还可以用全“1”地址来表示包含所有节点的地址,称为广播地址,含有广播地址的帧传送给链路上所有的节点。
另外还规定全0的地址为无节点地址,不分配给任何节点,仅作为测试用。
3.3 控制字段(C)
控制字段用于构成各种命令及响应,以便对链路进行监视与控制。发送方主节点或组合节点利用控制字段来通知被寻址的从节点或组合节点执行约定的操作;相反,从节点用该字段作为对命令的响应,报告已经完成的操作或状态的变化。
该字段是HDLC的关键。控制字段中的第一位或第一位、第二位表示传送帧的类型即信息帧(I帧)、监控帧(S帧)和无编号帧(U帧)3种不同类型的帧。控制字段的第五位是P/F位,即轮询/终止位(POLL/Final)位。
控制字段中第1或第1、2位表示传送帧的类型,第1位为“0”表示是信息帧,第1、2位为“10”是监控帧,“11”是无编号帧。
信息帧中,2、3、4位为存放发送帧序号,5位为轮询位,当为1时,要求被轮询的从站给出响应,6、7、8位为下个预期要接收的帧的序号。
监控帧中,3、4位为S帧类型编码。第5位为轮询/终止位,当为1时,表示接收方确认结束。
无编号帧,提供对链路的建立、拆除以及多种控制功能,用3、4、6、7、8这五个M位来定义,可以定义32种附加的命令或应答功能。
3.4 信息字段(I)
信息字段是网络层的用户数据,可以是任意的二进制比特串,长度未作限定,其上限由FCS字段或通讯节点的缓冲容量来决定,目前国际上用得较多的是1000-2000比特,而下限可以是0,即无信息字段。但是监控帧中不可有信息字段。
3.5 帧校验序列字段
帧检验序列字段可以使用16位CRC,对两个标志字段之间的整个帧的内容进行校验。FCS的生成多项式是CCITT V.41建议的X'16+X'12+X'5+1。
4 HDLC协议控制字段帧类型
HDLC有信息帧(I帧)、监控帧(S帧)和无编号帧(U帧)3种不同类型的帧。每一种帧中的控制字段的格式及比特定义如下:
4.1 信息帧(I帧)
信息帧用于传送有效信息或数据,通常简称为I帧。I帧以控制字段第一位为0为标志。控制字段中的N(S)用于存放发送帧序列,以便发送方不必等待确认而连续发送多帧。N(R)用于存放接收方下一个预期要接收的帧的序号。N(S)与N(R)均为3位二进制编码,可取值0-7。
N(S):b1、b2和b3,表示当前发送的信息帧的序号
N(R):b5、b6和b7,表示一个站已正确接收序号N
P/F位:b4,探寻/终止位
n 0表示没有意义
n P=1(询问),如果从站有帧要发送,则可以向主站发送
n F=1(终止),发送的最后一帧,表示从站已经发送结束。
P=1和F=1在帧交换过程中成对出现。例如目前发送的帧序号为3,在已经正确接收序号为3及以前的各帧,要求对方下一次发送序号为4的帧时,可使用探询位P=1去询问对方
4.2 监控帧(S帧)
监控帧用于差错控制和流量控制,通常称为S帧。S帧以控制字段第一位、二位为“10”来标志。S帧不带信息字段,只有6个字节即48个比特。S帧的控制字段的第三、四位为S帧类型编码,共有4种不同的编码,分别是:
n 00--接受就绪(RR),由主节点或从节点发送。主节点可以使用RR型S帧来轮询从节点,即希望从节点传输编号为N(R)的I帧,若存在这样的帧,便可以进行传输,从节点也可以用RR型S帧来作响应,表示从节点希望从主节点那里接收的下一个I帧的编号是N(R)。
n 01--拒绝(REJ),由主节点或从节点发送,用以要求发送方从编号为N(R)开始的帧及其后所有的帧进行重发,着也暗示N(R)以前的I帧以被正确接收。
n 10--接收未就绪(RNR), 表示编号小于N(R)的I帧已被收到,但目前正处于忙状态,尚未准备好接受编号为N(R)的I帧,这可用来对链路进行流量控制。
n 11--选择拒绝(SREJ), 它要求发送方发送编号为N(R)的单个I帧,并暗示其他编号的I帧已经全部确认。
接收就绪RR型S帧和接收未就绪型S帧有两个主要功能:首先,这两种类型的S帧用来表示从站已经准备好或未准备好信息;其次,确认编号小于N(R)的所有接收到的I帧。拒绝REJ和选择拒绝SREJ的S帧用于向对方节点指出发生了差错。 REJ帧用于GO-BACK-N策略,用以请求重发N(R)起始的所有帧,而N(R)以前的帧已被确认,当收到一个N(S)等于REJ型S帧的N(R)的I帧后,REJ状态即可清除。SREJ帧用于选择重发策略,当收到一个N(S)等于SREJ型帧的N(R)的I帧后,SREJ状态即可清除。
4.3 无编号帧(U帧)
无编号帧因其控制字段中不包含编号N(S)和N(R)而得名,简称U帧。U帧用于提供对链路的建立、拆除以及多种控制功能,这些控制功能用5个M位(M1,M2,M3,M4,M5)也称修正位来定义。5个M位可以定义32种附加的命令功能或32种应答功能,但目前有许多是空缺的。
5 HDLC协议的应用特点
5.1 应用场合
就系统结构而言,HDLC适用于点到点或点到多点式的结构;就工作方式而言,HDLC适用于半双工或全双工;就传输方式而言,HDLC只用于同步传输;在传输速率方面考虑,HDLC常用于中高速传输。
5.2 传输效率
HDLC开始发送一帧后,就要连续不断地发完该帧;HDLC可以同时确认几个帧;HDLC中的每个帧含有地址字段A,在多点结构中,每个从节点只接收含有本节点地址的帧,因此主节点在选中一个从节点并与之通讯的同时,不用拆链,便可以选择其他的节点通讯,即可以同时与多个节点建立链路。
由于以上特点,HDLC具有较高的传输效率。
5.3 传输可靠性
HDLC中所有的帧(包括响应帧)都有FCS,I帧按窗口序号顺序编号,传输可靠性比异步通讯高。
5.4 数据透明性
HDLC采用“0比特插入法”对数据进行透明传输,传输信息的比特组合模式无任何限制,处理简单。
5.5 信息传输格式
HDLC采用统一的帧格式来实现数据、命令、响应的传输,实现起来方便。
5.6 链路控制
HDLC利用改变一帧中的控制字段的编码格式来完成各种规定的链路操作功能,提供的是面向比特的传输功能。