标题：hldc
协议结构
链路控制协议着重于对分段成物理块或包的数据的逻辑传输，块或包由起始标志引导并由终止标志结束，也称为帧。帧是每个控制、每个响应以及用协议传输的所有信息的媒体的工具。所有面向比特的数据链路控制协议均采用统一的帧格式，不论是数据还是单独的控制信息均以帧为单位传送。
每个帧前、后均有一标志码01111110,用作帧的起始、终止指示及帧的同步。标志码不允许在帧的内部出现，以免引起畸意。为保证标志码的唯一性但又兼顾帧内数据的透明性，可以采用“0比特插入法”来解决。该法在发送端监视除标志码以外的所有字段，当发现有连续5个“1”出现时，便在其后添插一个“0”，然后继续发后继的比特流。在接收端，同样监除起始标志码以外的所有字段。当连续发现5个“1”出现后，若其后一个比特“0”则自动删除它，以恢复原来的比特流；若发现连续6个“1”，则可能是插入的“0”发生差错变成的“1”，也可能是收到了帧的终止标志码。后两种情况，可以进一步通过帧中的帧检验序列来加以区分。“0比特插入法”原理简单，很适合于硬件实现。
在面向比特的协议的帧格式中，有一个8比特的控制字段，可以用它以编码方式定义丰富的控制命令和应答，相当于起到了BSC协议中众多传输控制 字符和转义序列的功能。
HDLC的特点
HDLC是面向比特的数据链路控制协议的典型代表，该协议不依赖于任何一种字符编码集；数据报文可透明传输，用于实现透明传输的“0比特插入法”易于硬件实现；全双工通信，有较高的数据链路传输效率；所有帧采用CRC检验，对信息帧进行顺序编号，可防止漏收或重份，传输可靠性高；传输控制功能与处理功能分离，具有较大灵活性。
1.HDLC的操作方式
HCLC是通用的数据链路控制协议，当开始建立数据链路时，允许选用特定的操作方式。所谓链路操作方式，通俗地讲就是某站点以主站方式操作，还是以从站方式操作，或者是二者兼备。
在链路上用于控制目的站称为主站，其它的受主站控制的站称为从站。主站负责对数据流进行组织，并且对链路上的差错实施恢复。由主站发往从站的帧称为命令帧，而由从站返回主站的帧称响应帧。
连有多个站点的链路通常使用轮询技术，轮询其它站的站称为主站，而在点到点链路中每个站均可为主站。主站需要比从站有更多的逻辑功能，所以当终端与主机相连时，主机一般总是主站。
在一个站连接多条链中的情况下，该站对于一些链路而言可能是主站，而对另外一些链路而言又可能是从站。
有些可兼备主站和从站的功能，这站称为组合站，用于组合站之间信息传输的协议是对称的，即在链路上主、从站具有同样的传输控制功能，这又称作平衡操作，在计算机网络中这是一个非常重要的概念。相对的，那种操作时有主站、从站之分的，且各自功能不同的操作，称非平衡操作。
HDL C中常用的操作方式有以下三种：
（1）正常响应方式NRM（Normal Responses Mode）是一种非平衡数据链路操作方式，有时也称非平衡正常响应方式。该操作方式适用于面向终端的点到点或一点与多点的链路。在这种操作方式，传输过程由主站启动，从站只有收到主站某个命令帧后，才能作为响应向主站传输信息。响应信息可以由一个或多个帧组成，若信息 由多个帧组成，则应指出哪一个是最后一帧。主站负责管理整个链路，且具有轮询、选择从站及向从站发送命令的权利，同时也负责对超时、重发及各类恢复 操作的控制。NRM操作方式见图3.7(a)。
（2）异步响应方式ARM
异步响应方式ARM（Asynchronous Responses Mode）也是一种非平衡数据链路操作方式，与NRM不同的是，ARM下的传输过程由从站启动。从站主动发送给主站的一个或一组帧中可包含有信息，也可以是仅以控制为目的而发的帧。在这种操作方式下，由从站来控制超时和重发。该方式对采用轮询方式的多站链路来说是必不可少的。ARM操作方式见图3.7(b)。
（3）异步平衡方式ABM
异步平衡方式ABM（Asynchronous Balanced Mode）是一种允许任何节点来启动传输的操作方式。为了提高链路传输效率，节点之间在两个方向上都需要的较高的信息传输量。在这种操作方式下任何时候任何站都能启动传输操作，每个站既可作为主站又可作为从站，每个站都是组合站。各站都有相同的一组协议，任何站都可以发送或接收命令，也可以给出应答，并且各站对差错恢复过程都负有相同的责任。
2.HDLC的帧格式
在HDLC中，数据和控制报文均以帧的标准格式传送。HDLC中的帧类似于BSC的字符块，但BSC协议中的数据报文和控制报文是独立传输的，而HDLC中的命令应以统一的格式按帧传输。HDLC的完整的帧由标志字段（F）、地址字段（A）、控制字段（C）、信息字段（I）、帧校验序列字段（FCS）等组成.
（1）标志字段（F）
标志字段为01111110的比特模式，用以标志帧的起始和前一帧的终止。标志字段也可以作为帧与帧之间的填充字符。通常，在不进行帧传送的时刻，信道仍处于激活状态，在这种状态下，发方不断地发送标志字段，便可认为一个新的帧传送已经开始。采用“0比特插入法”可以实现数据的透明传输。
（2）地址字段（A）
地址字段的内容取决于所采用的操作方式。在操作方式中，有主站、从站、组合站之分。每一个从站和组合站都被分配一个唯一的地址。命令帧中的地址字段携带的是对方站的地址，而响应帧中的地址字段所携带的地址是本站的地址。某一地址也可分配给不止一个站，这种地址称为组地址，利用一个组地址传输的帧能被组内所有拥有该组一一的站接收。但当一个站或组合站发送响应时，它仍应当用它唯一的地址。还可用全“1”地址来表示包含所有站的地址，称为广播地址，含有广播地址的帧传送给链路上所有的站。另外，还规定全“0”地址为无站地址，这种地址不分配给任何站，仅作作测试。
（3）控制字段（C）
控制字段用于构成各种命令和响应，以便对链路进行监视和控制。发送方主站或组合站利用控制字段来通知被寻址的从站或组合站执行约定的操作；相反，从站用该字段作对命令的响应，报告已完成的操作或状态的变化。该字段是HDLC的关键。控制字段中的第一位或第一、第二位表示传送帧的类型，HDLC中有信息帧（I帧）、监控帧（S帧）和无编号帧（U帧）三种不同类型的帧。控制字段的第五位是P/F位，即轮询/终止（Poll/Final）位。
控制字段中第1或第1、2们表示传送帧的类型，第1位为“0”表示是信息帧，第1、2位为“10”是监控帧，“11”是无编号帧。
信息帧中，234位为存放发送帧序号，5位为轮询位，当为1时，要求被轮询的从站给出响应，678位为下个预期要接收的帧的序号。
监控帧中，34位为S帧类型编码。第5位为轮询/终止位，当为1时，表示接收方确认结束。
无编号帧，提供对链路的建立、拆除以及多种控制功能，，用34678这五个M位来定义，可以定义32种附加的命令或应答功能。
（4）信息字段（I）
信息字段可以是任意的二进制比特串。比特串长度未作限定，其上限由FCS字段或通信站的缓冲器容量来决定，目前国际上用得较多的是1000~2000比特；而下限可以为0，即无信息字段。但是，监控帧（S帧）中规定不可有信息字段。
（5）帧校验序列字段（FCS）
帧校验序列字段可以使用16位CRC，对两个标志字段之间的整个帧的内容进行校验。FCS的生成多项式CCITT V4.1建议规定的X16+X12+X5+1。
3.HDLC的帧类型
（1）信息帧（I帧）
信息帧用于传送有效信息或数据，通常简称I帧。I帧以控制字第一位为“0”来标志。
信息帧的控制字段中的N（S）用于存放发送帧序号，以使发送方不必等待确认而连续发送多帧。N（R）用于存放接收方下一个预期要接收的帧的序号，N（R）=5，即表示接收方下一帧要接收5号帧，换言之，5号帧前的各帧接收到。N（S）和N（R）均为3位二进制编码，可取值0～7。
（2）监控帧（S帧）
监控帧用于差错控制和流量控制，通常简称S帧。S帧以控制字段第一、二位为“10”来标志。S帧带信息字段，只有6个字节即48个比特。S帧的控制字段的第三、四位为S帧类型编码，共有四种不同编码，分别表示： 
00——接收就绪（RR），由主站或从站发送。主站可以使用RR型S帧来轮询从站，即希望从站传输编号为N（R）的I帧，若存在这样的帧，便进行传输；从站也可用RR型S帧来作响应，表示从站希望从主站那里接收的下一个I帧的编号是N（R）。 
01——拒绝（REJ），由主站或从站发送，用以要求发送方对从编号为N（R）开始的帧及其以后所有的帧进行重发，这也暗示N（R）以前的I帧已被正确接收。 
10——接收未就绪（RNR），表示编号小于N（R）的I帧已被收到，但目前正处于忙状态，尚未准备好接收编号为N（R）的I帧，这可用来对链路流量进行控制。 
11——选择拒绝（SREJ），它要求发送方发送编号为N（R）单个I帧，并暗示它编号的I帧已全部确认。 
可以看出，接收就绪RR型S帧和接收未就绪RNR型S帧有两个主要功能：首先，这两种类型的S帧用来表示从站已准备好或未准备好接收信息；其次，确认编号小于N（R）的所有接收到的I帧。拒绝REJ和选择拒绝SREJ型S帧，用于向对方站指出发生了差错。REJ帧用于GO-back-N策略，用以请求重发N（R）以前的帧已被确认，当收到一个N（S）等于REJ型S帧的N（R）的I帧后,REJ状态即可清除。SREJ帧用于选择重发策略，当收到一个N（S）等SREJ帧的N（R）的I帧时，SREJ状态即应消除。
（3）无编号帧（U帧）
无编号帧因其控制字段中不包含编号N（S）和N（R）而得名，简称U帧。U帧用于提供对链路的建立、拆除以及多种控制功能，但是当要求提供不可靠的无连接服务时，它有时也可以承载数据。这些控制功能5个M位（M1、M2、M3、M4、M5，也称修正位）来定义。5个M位可以定义32种附加的命令功能或32种应答功能，但目前许多是空缺的。 
HDLC如何保证数据的透明传输
HDLC通过采用“0比特插入法”来保证数据的透明传输。即：在发送端，只要发现有5个连续“1”，便在其后插入一个“0”。在接收一个帧时，每当发现5个连续“1”后是“0”，则将其删除以恢复比特流的原貌。