标题：HDLC
来源
七十年代初，IBM公司率先提出了面向比特的同步数据链路控制规程SDLC（Synchronous Data Link Control）。随后，ANSI和ISO均采纳并发展了SDLC，并分别提出了自己的标准：ANSI的高级通信控制过程ADCP（Advanced Data Control Procedure），ISO的高级数据链路控制规程HDLC（High-level Data Link Control）。
作用
链路控制协议着重于对分段成物理块或包的数据的逻辑传输，块或包由起始标志引导并由终止标志结束，也称为帧。帧是每个控制、每个响应以及用协议传输的所有信息的媒体的工具。所有面向比特的数据链路控制协议均采用统一的帧格式，不论是数据还是单独的控制信息均以帧为单位传送。  hdlc执行数据传输控制功能每个帧前、后均有一标志码01111110,用作帧的起始、终止指示及帧的同步。标志码不允许在帧的内部出现，以免引起歧义。为保证标志码的唯一性但又兼顾帧内数据的透明性，可以采用“0比特插入法”来解决。该法在发送端监视除标志码以外的所有字段，当发现有连续5个“1”出现时，便在其后添插一个“0”，然后继续发后继的比特流。在接收端，同样监除起始标志码以外的所有字段。当连续发现5个“1”出现后，若其后一个比特“0”则自动删除它，以恢复原来的比特流；若发现连续6个“1”，则可能是插入的“0”发生差错变成的“1”，也可能是收到了帧的终止标志码。后两种情况，可以进一步通过帧中的帧检验序列来加以区分。“0比特插入法”原理简单，很适合于硬件实现。
在面向比特的协议的帧格式中，有一个8比特的控制字段，可以用它以编码方式定义丰富的控制命令和应答，相当于起到了BSC协议中众多传输控制 字符和转义序列的功能。
作为面向比特的数据链路控制协议的典型，HDLC具有如下特点：协议不依赖于任何一种字符编码集；数据报文可透明传输，用于实现透明传输的“0比特插入法”易于硬件实现；全双工通信，不必等待确认便可连续发送数据，有较高的数据链路传输效率；所有帧均采用CRC校验，对信息帧进行编号，可防止漏收或重份，传输可靠性高；传输控制功能与处理功能分离，具有较大灵活性和较完善的控制功能。由于以上特点，目前网络设计普遍使用HDLC作为数据链路管制协议。
特点
1.HDLC是面向比特的数据链路控制协议的典型代表，该协议不依赖于任何一种字符编码集；
2.数据报文可透明传输，用于实现透明传输的“0比特插入法”易于硬件实现；
3.全双工通信，有较高的数据链路传输效率；
4.所有帧采用CRC检验，对信息帧进行顺序编号，可防止漏收或重发，传输可靠性高；
5.传输控制功能与处理功能分离，具有较大灵活性。
高级数据链路规程(HDLC)，是位于数据链路层的协议之一，其工作方式可以支持半双工、全双工传送，支持点到点、多点结构，支持交换型、非交换型信道，它的主要特点包括以下几个方面：
1.透明性：为实现透明传输，HDLC定义了一个特殊标志，这个标志是一个8位的比特序列，(01111110)，用它来指明帧的开始和结束。同时，为保证标志的唯一性，在数据传送时，除标志位外，采取了0比特插入法，以区别标志符，即发送端监视比特流，每当发送了连续5个1时，就插入一个附加的0，接收站同样按此方法监视接收的比特流，当发现连续5个1时而第六位为0时，即删除这位0。
2.帧格式：HDLC帧格式包括地址域、控制域、信息域和帧校验序列。
3.规程种类：HDLC支持的规程种类包括异步响应方式下的不平衡操作、正常响应方式下的不平衡操作、异步响应方式下的平衡操作。
操作方式
HDLC是通用的数据链路控制协议，当开始建立数据链路时，允许选用特定的操作方式。所谓链路操作方式，通俗地讲就是某站点以主站方式操作，还是以从站方式操作，或者是二者兼备。
在链路上用于控制目的站称为主站，其它的受主站控制的站称为从站。主站负责对数据流进行组织，并且对链路上的差错实施恢复。由主站发往从站的帧称为命令帧，而由从站返回主站的帧称响应帧。
连有多个站点的链路通常使用轮询技术，轮询其它站的站称为主站，而在点到点链路中每个站均可为主站。主站需要比从站有更多的逻辑功能，所以当终端与主机相连时，主机一般总是主站。
在一个站连接多条链中的情况下，该站对于一些链路而言可能是主站，而对另外一些链路而言又可能是从站。
有些可兼备主站和从站的功能，这站称为组合站，用于组合站之间信息传输的协议是对称的，即在链路上主、从站具有同样的传输控制功能，这又称作平衡操作，在计算机网络中这是一个非常重要的概念。相对的，那种操作时有主站、从站之分的，且各自功能不同的操作，称非平衡操作。
HDLC中常用的操作方式有以下三种：（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）是一种允许任何节点来启动传输的操作方式。为了提高链路传输效率，节点之间在两个方向上都需要的较高的信息传输量。在这种操作方式下任何时候任何站都能启动传输操作，每个站既可作为主站又可作为从站，每个站都是组合站。各站都有相同的一组协议，任何站都可以发送或接收命令，也可以给出应答，并且各站对差错恢复过程都负有相同的责任。
帧格式
  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）信息字段(C)信息字段可以是任意的二进制比特串。比特串长度未作限定，其上限由FCS字段或通信站的缓冲器容量来决定，目前国际上用得较多的是1000~2000比特；而下限可以为0，即无信息字段。但是，监控帧（S帧）中规定不可有信息字段。（5）帧校验序列字段(FCS)帧校验序列字段可以使用16位CRC，对两个标志字段之间的整个帧的内容进行校验。FCS的生成多项式CCITT V4.1建议规定的X16+X12+X5+1。
帧类型
（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比特插入法”来保证数据的透明传输。即：在发  数据传输HDLC送端，只要发现有5个连续“1”，便在其后插入一个“0”。在接收一个帧时，每当发现5个连续“1”后是“0”，则将其删除以恢复比特流的原貌。
常见问题
1）什么是HDLC封装？高级数据链路控制（High-Level Data Link Control或简称HDLC），是一个在同步网上传输数据、面向比特的数据链路层协议。思科路由器上的默认WAN接口封装协议，是思科私有协议，如果同不同厂商的设备连接需要改成其他的封装协议进行通信。2) 什么是 DCE？Data Communications Equipment(数据通信设备)的首字母缩略词。它在DTE和传输线路之间提供信号变换和编码功能，并负责建立、保持和释放链路的连接，如Modem。在思科路由器上作为DCE端的接口需要提供时钟，才能使两端协议协商成功。使用show controller 命令可以查看接口是否属于DCE3) clock rate 命令作用？如果本端口连接的是DCE线缆，则要设同步时钟，单位bps ，默认情况下接口上不配置 clock rate 。
eg. Router# configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)# interface serial 5/0
Router(config-if)# clock rate 1234567
%clock rate rounded to nearest value that your hardware can support.
%Use Exec Command 'more system:running-config' to see the value rounded to.
Router(config-if)# exit
Router(config)#
Router# more system:running-config
Building configuration...
...
!
interface Serial5/0
no ip address
clock rate 1151526
!
...