3.4.1 数据链路层概述
数据链路层负责网络中相邻节点间的帧的传输,通过数据链路层的协议完成帧的同步、节点间传输链路的管理、传输控制以及实现节点间传输的差错控制和流量控制,在不太可靠的物理链路上实现了数据帧可靠地传输。
数据链路层负责网络中两个节点间的数据链路上数据帧的传输,传输节点设备的软硬件和传输链路构成数据链路。数据链路层将物理层传送的比特流组织成数据链路层的协议数据单元帧进行传送,负责建立、维持和释放数据链路的链路管理任务,通过校验、确认和反馈重发等手段进行帧传输的差错控制和流量控制,实现将原始的物理链路改造成无差错的数据链路。
数据链路层的协议数据单元为帧,帧是将上层网络层的数据单元——分组作为数据链路层的数据,加上数据链路层的帧头和帧尾构成数据链路层的帧(打包)。帧头和帧尾的信息有地址信息、控制信息以及实现差错控制的校验码,这些信息与数据信息一起构成帧。数据链路层的发送节点需要将上层网络层的数据单元分组作为数据链路层的数据打包成帧,以帧的数据格式向接收节点发送。在接收节点根据帧帧头和帧尾的信息完成数据帧的接收,然后将帧头、帧尾的这些信息取出,还原回分组交给网络层,这个过程为解包。所以打包和解包是数据链路层的功能之一,数据链路层传输示意如图3-18所示。
图3-18 数据链路层传输示意
数据链路层的另一个功能为链路管理。链路管理就是数据链路建立、维持和拆除的操作。当网络中两个节点要进行数据帧的传输时,数据传输的两个节点要事前交换一些信息,让发送节点和接收节点以及传输链路都处于准备好数据发送和数据接收的状态,网络中这个工作阶段被称为数据链路层的建立连接。完成数据链路的建立连接后,可以进入数据传输,在数据传输阶段,两个节点需要一直处于能够发送数据和接收数据的状态,网络中这个工作阶段被称为维持连接。在数据结束,2个节点可以不在处于以上状态,可以释放建立连接阶段占有的资源,网络中这个工作阶段被称为拆除连接。
数据链路原始的物理链路,由于噪声干扰等因素,在传输比特流时可能发生差错。所以数据链路层要采取差错控制发现差错,并通过纠错、重发等手段使接收端最终得到无差错的数据帧,实现将原始的物理链路改造成无差错的数据链路。另外相邻节点之间的数据传输还要防止发送数据过快使来不及接收和处理数据帧,从而发生数据丢失,所以数据链路层要采取流量控制,保证数据在数据链路层的可靠接收。所以,数据链路层承担着相邻节点传输的差错控制和流量控制。
此外数据链路还要约定采用什么样的帧格式进行传输,即定义帧格式,决定如何识别一个帧的到来和帧的结束,即实现帧同步。
数据链路层涉及的帧格式,帧同步方法,链路管理、差错控制和流量控制方式。这一切在数据链路层的传输双方都要事前有一致的约定,并在传输过程中遵循这些事前约定的规则,这些双方事前约定并遵循的这些约定的一切规则构成数据链路层协议的内容。
3.4.2 帧同步方式
数据链路层负责网络中2个节点间的数据链路上数据帧的传输,数据帧从发送节点传输到接收节点,接收节点要准确地接收数据帧,首先要解决数据帧的同步问题。数据帧的同步问题就是准确识别一个帧的到来(开始)和结束,从而实现帧的准确接收。数据链路层协议的帧同步一般有2种方式,即采用特殊控制字符实现帧同步实现帧同步和采用比特串实现帧同步。
(1)采用特殊控制字符实现帧同步
采用特殊控制字符实现帧同步方式的帧格式如图3-19所示。在发送帧时,在帧的前面上特殊的控制字符SYN(00010110)来启动帧的传输,在其后加上表示帧开始的控制字符SOH(00000001),再加上包含地址、控制信息的报头以及传输的数据块和块校验码BCC等,最后在校验码BCC后加上表示帧结束的控制字符ETX(00000011)等。
图3-19 采用特殊控制字符实现帧同步方式的帧格式
数据传输时,数据帧达到接收节点,接收节点只要检测到连续两个以上的SYN字符就确认已进人同步状态,在检测到SOH,就确认数据帧开始,并在SOH结束时,开始接收数据。随后的数据块传送过程中双方以同一频率工作(同步),一直进行数据的接收,直到收到指示数据结束的ETX控制字符到来时,传输结束。以这种方式,接收节点能准确地识别出数据帧何时到来,数据字段何时开始,何时结束,准确地完成数据帧的接收。
(2)采用特殊比特串实现帧同步
采用特殊比特串实现帧同步方式的帧格式如图3-20所示。发送节点在发送帧时,在帧的前面加上特殊比特串01111110来启动帧的传输,再加上报头以及传输的数据块和校验码FCS等,最后在校验码FCS后同样加上特殊比特串01111110表示帧结束。
图3-20 采用特殊比特串实现帧同步方式的帧格式
接收节点只要检测到特殊比特串01111110就确认帧到来,进入同步状态,开始接收数据帧,直到特殊比特串01111110再次来到时,传输结束。
采用特殊比特串01111110实现帧同步的方式存在透明传输问题。由于该方式以特殊比特串01111110识别帧起始和结束,在数据帧的数据字段如果出现01111110比特串也会被误认为是帧的结束标志到来,做出帧结束处理的动作,这显然导致错误发生。要避免这种情况发生,就必须规定数据段不允许出现特殊比特串01111110。这种规定将使数据发送带来障碍,网络中称这种情况为不能支持透明传输。
为了支持透明传输,对这种采用特殊比特串01111110 l作为帧起始、结束标志的协议中,必须采取比特填充法对数据段的信息作处理,比特填充法的具体操作如下:
在发送数据时先对数据段的数据位进行检查,当数据位中出现连续5个“1”时,则自动在其后插入一个“0”,而接受方则做该过程的逆操作,即每当接受到的数据段的数据位中出现连续5个“1”时,将跟在后面的“0”自动删去,以此恢复原始数据信息。这样做保证了发送出来的数据流不会出现连续6个“1”,如果收到连续6个1,则一定是用于帧同步的特殊比特串01111110。这种连续5个“1”插“0”的方法使得数据段的数据传输不再受限制,实现了数据的透明传输。“0比特插入”方法,简单易行,容易用硬件实现,对传输速度几乎不受影响,在网络中得到普遍的使用。
3.4.3 差错控制
从前面的讨论我们知道,网络需要通过差错控制来提高传输的可靠性,差错控制方式可以采用前向纠错FEC方式和自动请求重发ARQ方式。自动请求重发ARQ由于算法简单,实现容易,是目前数据链路层协议实现差错控制的主要方式。
在ARQ方式中,发送数据的成功与否通过接收端向发送端返回应答来确认,即接收端收到数据帧后经过校验根据校验结果向发送端返回肯定应答ACK或否定应答NAK。当接收端返回的应答为否定应答时,说明收到的数据帧出错,发送端需要重新发送。通过出错重新发送的处理,使得最终收到的是正确的数据帧,实现了差错控制,提高了传输的可靠性。
ARQ方式的应答情况如下:
①肯定应答ACK(Acknowledgement):接收端对收到的帧进行校验无误后向发送端返回肯定应答ACK,发送端收到此应答后知道发送成功。
②否定应答NAK(Negative Acknowledgement):接收端对收到的帧进行校验发现有错误后向发送端返回否定应答NAK,发送端收到此应答后知道发送失败,需要重新发送该数据帧,重新发送该数据帧。
③超时控制:应答是建立在发送的帧没有丢失的情况下的,如果发送的帧在传输过程中发生丢失,接收端永远收不到该帧,也不会返回该帧的应答,于是将出现发送端永远收不到应答的情况,此时发送端将处于无意义的等待状态,这种情况在网络中是需要避免的。网络中采用超时控制来避免这种情况,在发出一个帧后启动一个计数器开始计时,在设定的时间到达时,还没有收到应答帧,则认为该帧已经丢失并重新发送该帧。
网络的数据链路层协议差错控制经常使用的ARQ技术有3种:停等法、GO-back-N和选择性重发。
(1)停等法
停等法的工作方式是发送端每发送完一帧后就要停止发送,一直等到该帧的应答帧返回,才能发下一帧,停等法的工作原理示意如图3-21所示。
发送端每次将当前信息帧作为待确认帧保留在缓冲器中,当发送端开始发送该帧时,随即启动计时器,当接收端收到无差错的帧时,即向发送端返回一个肯定应答帧ACK,发送端收到该肯定应答帧ACK后,知道发送成功,可以将保留在缓冲器中的帧清除,腾出缓冲器存储其他帧。
若接收端收到的是有差错的帧时,即向发送端返回一个否定应答帧NAK,同时将收到的错误帧丢弃。
在收到的是NAK帧时,则需要重发该帧,发送端将保留在缓冲器中的该帧重新发送;在收到的是ACK帧时,则清除缓冲区中的帧,同时将计数器清零,开始下一帧的发送。
如果在发出一个帧后在设定的时间还未收到应答帧,则认为该帧已经丢失并重新发送,需要重发该帧,发送端将保留在缓冲器中的该帧重新发送。
停等法的工作方式,每发送一帧就要进入等待,直到应答帧返回才能继续发送下一帧,使得线路利用率不高,实际网络中用得不多,实际网络中一般多使用连续重发方式。
连续重发方式:发送端在发送数据时,可以连续发送一系列数据帧,即不用等待前一帧被确认就可以发送下一帧,连续重发方式需要一个较大的缓冲空间,存放若干待确认的数据帧。GO-back-N和选择重发就是2种常用的连续重发方式。
图3-21 停等法的工作原理示意
(2)GO-back-N
在GO-back-N方式中,发送端可以连续发送一系列数据帧,然后进入等待应答,当返回的应答有对某一帧的否定应答NAK时,无论发送端已经发出多少帧,发送端都需要退回到该帧,从该帧起重新发送该帧以及下面的各帧。GO-back-N差错控制策略示意如图3-22所示。
在图2-22中,发送端连续发送了F0、F1、F2、F3帧,正确收到F0、F1、返回ACK0、ACK1,但F2有差错发生,返回NAK2,发送端收到NAK2时,将退回到从F2帧开始新重发送。
GO-back-N策略可能会将已经发送到的帧再传在送一遍,这显然是一种浪费。在以上例子中,F2有差错发生,返回NAK2,收到NAK2时退回到F2帧重新发送。此时可能已经发送过去的F3帧也是正确的,但是按照GO-back-N策略,还是得退回到从F2帧开始新重发,并重复发送已经发送到接收端的F3帧,这势必造成线路资源的浪费,针对这个问题选择性重发应该是一种更好的策略。
(3)选择性重发
选择性重发采用哪一帧出错,重发哪一帧的办法。选择性重发的工作原理示意如图2-23所示。在图2-23中,发送端连续发送了F0、F1、F2、F3帧,正确收到F0、F1、返回ACK0、ACK1,但F2有差错发生,返回NAK2,收到NAK2时,将F2帧新重发送,然后接着可以继续发F4帧、F5帧。显然选择性重发克服了对已经正确达到的帧的再次传送,提高了线路线路利用率。
图3-22 GO-back-N差错控制策略示意
3.4.4 流量控制
流量控制是数据链路层的重要功能,数据链路层的流量控制是限制链路上的帧的传输速率,使发送速率不超过接收速率,保证接收端的正确接收。在数据帧传输过程中,当发送速率超过的接收速率时,会发生帧的丢失,导致差错发生。数据链路层的流量控制避免了这种情况的发生,进一步提高了数据链路层传输的可靠性。数据链路协议常用的流量控制方案主要有XON、XOFF方案和滑动窗口协议。
(1)XON、XOFF方案
数据链路层发生发送速率超过接收速率时,会发生帧的丢失,导致差错发生。发生这种问题的主要原因是缓冲区容量有限,当发送端发送过来的帧的数目已经超过接收端缓冲区能够接受的帧的数目时,会发生帧的丢失,从而发生差错。
XON、XOFF方案使用一对控制字符来实现流量控制。当通信链路上的发现接收端缓冲区已满,不能继续接收发送来的数据帧时,便向发送端发送一个要求暂停发送的控制字符XOFF(00010011),意思关闭发送链路,发送端收到此控制字符便停止发送信息帧,进入等待状态。等缓冲器区的帧已处理完毕,腾出了缓冲空间可以继续接收新的信息帧时,接收端向发送方返回一个可以继续接收信息帧的控制字符XON(00010001),意思开启发送链路,通知可以继续发送信息帧。
图3-23 选择性重发的工作原理示意
XON、XOFF方案的工作原理示意如图3-24所示。发送端连续发生了F0、F1、F2、F3、F4 5个帧,此时接收端缓冲区已满,不能继续接收新的帧,接收端向发送端返回XOFF,要求发送端暂停发送,发送端收到XOFF后,暂停发送。直到当接收端缓冲区中的帧已经处理完毕,转发到其他节点,缓冲区又可以接收新的数据帧,接收端向发送端返回控制字符XON,通知发送端可以继续发送,发送端又开始发送新的帧F5。
(2)滑动窗口协议
图3-24 XON、XOFF方案的工作原理示意
在使用连续ARQ协议时,如果发送端一直没有收到接收端的确认应答信息,不能无限制地继续发送数据帧,因为当未被确认的帧太多时,只要有一帧出错,就要有许多帧需要重传(GO-back-N策略),这必然会白白花去很多时间。如果要能够发送大量的帧,缓冲区的大小也需要有一定的大小,否则无法接收数量较大的帧的数目,这两种情况都需要增加一些不必要的开销。
因此,在连续ARQ协议中,必须将已经发送出去但未被确认的数据帧的数目加以限制,这就是滑动窗口协议的思想。
滑动窗口协议的思想是对发送出去但未被确认的帧数目加以限制,发送窗口通过在发送方设置一定大小的发送窗口和接收窗口,到达限制发送帧的数量,实现流量控制的目的。
发送窗口:发送窗口用来控制发送方发送数据帧的数量,发送窗口的大小WT表示在还没有接收到对方确认应答的条件下发送方最多可以发送的数据帧数目。如设定WT=4,则发送方发出4个数据帧后如果没有应答回来,则发送端就不可以继续发送,必须等待应答回来后,根据应答情况再决定可以发送的帧数目。
滑动窗口的概念示意如图3-25所示。在数据链路层,数据帧传输时,必须指示出发送数据帧的序号,数据帧的序号是在数据帧中用专门的序号字段来进行描述的。设发送帧的顺序字段为3比特,则一共可以表示8个顺序号(0、1、2、3、4、5、6、7),发送窗口WT=4。在初始情况下,由于WT=4,可以发送的帧为F0、F1、F2、F3这4个帧发出后,发送方将不能再发送其余帧,进入等待应答回来,如图3-25(1)所示。
图3-25 滑动窗口的概念示意
当返回对第一个帧的确认ACK0后,由于WT=4,在还没有接收到对方确认应答的条件下发送方最多可以发送的数据帧数目为4,现在由于返回了对第一个帧F0的确认应答,意味着发送方又可以发送一个帧F4。所以现在可以送的帧为F1、F2、F3、F4,如图3-25(2)所示。按照示意图,相当于发送窗口的前沿、后沿向前滑动了一格(所以称为滑动窗口协议)。同样,当接收端又返回了ACK1、ACK2、ACK3后,发送方可以发送的帧变为F4、F5,F6、F7,如图3-25(3)所示。
接收窗口:设置接收窗口是为了指示当前将接收哪些数据帧,接收窗口的控制机理是只有当接收到的数据帧的序号落在接收窗口内才允许将该帧收下。若接收到的数据帧落在接收窗口之外,则一律认为异常,将其丢弃。
接收窗口的概念示意如图3-26所示。在连续发送协议中,WR=1,初始状态,接收窗口处于F0帧的位置,准备接收F0帧,如图3-26(1)所示。在收到F0帧后,接收窗口向前滑动一格,准备接收F1帧,同时向发送方发送对F0帧的确认,如图3-26(2)所示。在收到F1帧后,接收窗口向前滑动一格,准备接收F2帧,同时向发送方发送对F1帧的确认,如图3-26(3)所示。
可以看出,在接收窗口不滑动时,发送窗口无论如何也不会滑动,只有在接收窗口发生了滑动,发送窗口才会发生滑动。通过滑动窗口协议,达到了控制发送出去的信息帧的数量,使得发送出去没有收到应答的帧的数目始终控制在发送窗口的大小范围,达到流量控制的目的。
图3-26 接收窗口的概念示意
滑动窗口协议可以在收到确认信息之前发送多个数据帧,这种机制使得网络通信处于忙碌状态,提高了整个网络的吞吐率。滑动窗口协议不但可以用于数据链路层的流量控制,还可以用于网络层通信子网的流量控制,它解决了端到端的通信流量控制问题。
3.4.5 数据链路层协议
在数据链路层中,数据帧的传输通过数据链路层协议实现。对于数据链路层协议,OSI也采用当前流行的协议,其中包括BSC、HDLC、LAPB以及局域网IEEE802标准的数据链路层协议IEEE802.2。BSC、HDLC是面向字符传输协议和比特传输协议的两个经典的数据链路层协议,这里将它们作为数据链路层的协议实例加以介绍。
(1)二进制同步传输协议BSC
二进制同步传输协议BSC(Binary Synchronous Communication)是IBM公司提出的数据链路层传输协议,该协议采用特殊的帧格式及控制字符实现传输控制。图3-27为一个BSC协议的数据帧格式。
图3-27 BSC协议的数据帧格式
在BSC协议的帧格式中,第一字段和第二字段是两个同步字符SYN,然后是指示报头开始的控制字符SOH,然后是报头部分,报头结束后是指示数据报文开始的控制字符STX,之后是数据报文部分,数据部分结束后是指示数据报文结束的控制字符ETX,最后是16位的块校验码BCC。
BSC协议采用特殊同步字符方式实现帧同步,SYN(Synchronous)是帧同步控制字符,当连续出现2个SYN表示一个帧的开始;SOH(Start of Head)是报头开始控制字符,它出现表示报头开始,它的后面就是报头信息;STX(Start of Text)是报文开始控制字符,它出现表示数据报文开始,它的后面就是数据报文;ETX(End of Text)是报文结束控制字符,它出现表示数据报文结束。通过这样的方式,可以识别什么时候发送的帧来到,什么时候发送的帧结束,实现帧同步的目的。
BSC帧分为数据帧和控制帧,数据帧用于数据发送,控制帧主要用于差错控制和流量控制。用于控制目的的肯定应答帧和否定应答帧的帧格式以及应答关系如图3-28所示。
图3-28 ACK、NAK帧格式及应答关系
BSC协议的差错控制的示例如图3-29所示:
发送端的数据帧达到接收端后,接收端使用BCC字段的校验码对该数据帧进行校验,若收到的数据帧正确,则向发送端返回ACK帧,发送端收到ACK帧后,发送方可以继续发送下一个数据帧。若收到的数据帧出错,则向发送端返回NAK帧,发送端收到NAK帧后,将预留在缓冲区的该帧取出,重新进行发送。
BSC协议的流量控制采用停等法实现,即每发送完帧后就要停止发送,一直等到该帧的应答帧返回,才能发下一帧。由于必须等到应答回来才能继续发送,控制应答的发出时间就可以实现流量控制。
图3-29 BSC协议的差错控制
二进制同步传输协议BSC是面向字符型的传输控制协议,它采用特殊控制字符实现传输控制,数据报文中的数据也只能是完整的字符,所以它不支持不是完整字符的任意比特串。面向字符的传输使得传输与字符编码关系过于密切,不利于兼容,为了实现透明传输需采用字符填充法,实现起来比较复杂,BSC仅支持半双工方式,传输效率较低。目前在网络设计中已经很少使用BSC传输协议,而是普遍使用后来发展起来的高级数据链路控制传输协议HDLC。
(2)高级数据链路控制传输协议HDLC
高级数据链路控制传输协议HDLC(High-Level Data Link Control)是一种面向比特的数据链路层的传输控制协议,它是由国际标准化组织ISO根据IBM公司的SDLC(Synchronous Data Link Control)协议扩展开发而成的。
①HDLC的特点:
a.HDLC是一种面向比特的数据链路层的传输控制协议,可以支持任意比特串的数据传输,数据以帧的形式传输,协议不依赖于任何一种字符编码集(面向比特),帧中的数据可以是任意比特值,对于任何一种比特流都可以实现透明传输;
b.使用特殊比特串01111110实现帧同步,即通过特殊比特串01111110来标识一个帧起始和结束,通过“0比特插入法”实现透明传输;
c.无论是数据帧、控制帧都采用统一的帧格式,并且都采用循环校验码CRC进行差错校验,提高帧传输的可靠性。
d.HDLC是一种通用的数据链路控制协议,无论是点对点、点对多点链路以及平衡结构和非平衡结构都能采用HDLC协议实现数据传输。
②站点关系:
由于能支持多种站点结构,采用HDLC协议进行数据传输时,要事先定义链路上站点的操作方式。所谓链路操作方式,就是链路上的工作站是以主站方式操作,还是以从站方式操作,或者是主从站兼备的复合站操作。
在链路上用于控制目的站称为主站,其他的受主站控制的站称为从站。主站负责组织数据传输,负责链路管理控制,并且对链路上的差错实施恢复,主站可以主动发起数据传输。而从站是从属于主站的站,不能进行链路管理控制,也不能主动向主站发起数据传输,从站只有在得到主站的命令后,才能以响应方式向主站发送数据。由主站发往从站的帧称为命令帧,而由从站返回主站的帧称为响应帧,主从站以命令和响应的方式进行数据传输,具有主从站关系的站点结构为非平衡结构。
除了主从站关系,链路上的站关系还有复合站关系。复合站关系是指链路上的站点既可以作为主站,也可以作为从站,即链路上需要传输数据的两个站中,任何一个站都可以作为主站,也可以作为从站,既可以主动发起数据传输,以命令方式要求对方响应传输,也可以以响应方式向对方发送数据,这样的站点关系称为复合站关系。复合站兼备了主站和从站的功能,具有复合站关系的站点结构为平衡结构。点对点、点对多点、平衡结构、非平衡结构站点关系示意如图3-30所示。
图3-30 点对点、点对多点、平衡结构、非平衡结构站丫关系示意
点对多点的方式:链路上连有多个站点,为了实现有序的传输,有多个站点的链路控制通常使用轮询技术,在这多个站中,其中有一个站是主站,其他站为从站,主站轮流询问每一个从站是否需要传输,有传输需要时,将链路分配给其使用。显然轮询其他站的站称为主站,被轮询的站称为从站,主站需要比从站有更多的逻辑功能。在一个站连接多条链路的情况下,该站对于一些链路而言可能是主站,而对另外一些链路而言又可能是从站。
③三种操作方式:
为了适应不同的站点关系,HDLC协议定义了三种操作方式,分别是正常响应方式NRM(Normal Responses Mode)、异步响应方式ARM(Asynchronous Responses Mode)和异步平衡方式ABM(Asynchronous Balanced Mode)。
正常响应方式NRM(Normal Responses Mode)是一种用于主从站关系、非平衡结构的数据链路操作方式,有时也称非平衡正常响应方式。在这种操作方式,传输过程由主站启动,并控制控制超时和重发,从站只有收到主站某个命令帧后,才能作为响应向主站传输信息,整个链路的建立、维持、拆除等链路管理由主站负责。
异步响应方式ARM(Asynchronous Responses Mode)也是一种用于主从站关系、非平衡结构的数据链路操作方式,与NRM不同的是,ARM方式中,从站可以主动发起数据传输,并负责控制超时和重发,但链路的建立、维持、拆除等链路管理仍然由主站负责。与NRM比较,ARM可以认为是一种准NRM方式。
异步平衡方式ABM(Asynchronous Balanced Mode)是一种用于复合站关系、平衡结构的数据链路操作方式。由于链路上的站点时复合站,在任何时候,任何站都能主动发起传输,每个站既可作为主站又可作为从站。各站都有相同的一组协议,任何站都可以发送或接收命令,也可以给出应答,并且各站对差错恢复过程都负有相同的责任。
④HDLC的帧格式:
在BSC协议中的数据报文和控制报文是以不同的帧独立传输的,而在HDLC协议中,无论是数据帧、控制帧都采用统一的帧格式进行传输,并且都采用循环校验码CRC进行差错校验,提高帧传输的可靠性。
HDLC帧由帧标志字段(F)、地址字段(A)、控制字段(C)、信息字段(I)、帧校验序列字段(FCS)等组成(如图3-31所示)。
图3-31 HDLC帧格式
a.标志字段F:标志字段为01111110的比特系列,用以标志一个帧的起始和终止,实现帧的同步。HDLC帧采用“0比特插入法”可以实现数据的透明传输。
b.地址字段A:地址字段指示出发送站地址或接收站地址。在HDLC中,每一个从站和复合站都被分配一个唯一的地址。地址字段的内容取决于所采用的操作方式,有时是主站地址,有时是从站地址。
在非平衡操作中,主站发给从站的帧是以命令方式发给从站,所以地址字段A是从站的地址,表示该命令是给从站的;而从站发给主站的帧是以响应方式发给主站,所以地址字段A是从站自己的地址,表示该帧是该从站响应命令返回的帧。
地址也可分配给不止一个站,这种地址称为组地址,利用一个组地址传输的帧可以被组内所有的站接收。还可用全“1”地址来表示包含所有站的地址,称为广播地址,含有广播地址的帧传送给链路上所有的站。另外,还规定全“0”地址为无站地址,这种地址不分配给任何站,仅作测试使用。
c.控制字段C:控制字段用于构成各种命令和响应,以便对链路进行监视和控制。主站或复合站利用控制字段来通知被寻址的从站或复合站执行约定的操作;相反,从站用该字段作对命令的响应,报告已完成的操作或状态的变化。
d.信息字段I:信息字段可以是任意的二进制比特串。HDLC协议对信息字段的比特串长度未作限定,其上限由FCS字段或通信站的缓冲器容量来决定,目前国际上用得较多的是1000~2000比特;而下限可以为0,即无信息字段。在监控帧(S帧)中规定不可有信息字段。
e.帧校验序列字段FCS:帧校验序列字段可以使用16位循环校验码CRC,对两个帧同步标志字段F之间的整个帧的内容进行校验。FCS的生成多项式为X16+X12+X5+1。
⑤控制字段:
控制字段共有8位,其中的第一位或第1、第2位表示传送帧的类型。HDLC中有信息帧(I帧)、监控帧(S帧)和无编号帧(U帧)三种不同类型的帧。控制字段中第1位为“0”表示是信息帧,第1、2位为“10”是监控帧,第1、2位为“11”是无编号帧。
三种帧在控制字段的8位的格式如表3-1所示。
表3-1 3种帧在控制字段的8位的格式
信息帧中的第2、3、4位为发送帧序号N(S),第5位为轮询/终止位P/F,6、7、8位为下个预期要接收的帧的序号N(R)。第5位为轮询/终止位P/F。
监控帧的第3、4位为监控位,具有00、01、10、11四种编码,分别用于差错控制和流量控制。6、7、8位为下个预期要接收的帧的序号N(R)。
无编号帧提供对链路的建立、拆除以及多种控制功能。无编号帧的第3、4位M和6、7、8位M共5位M组成32种编码,用于定义32种附加的命令或应答功能,用于建立连接时设置链路操作方式,拆除连接等命令。
HDLC具有简单的探测链路以及对方站点状态的功能,使用轮询/终止位P/F实现探测链路和确认对方站点设备状态。在链路物理层就绪后,HDLC设备以论询方式向对方设备发送信息,确认链路和对方设备是否可用。当P/为1时,要求被轮询的从站给出响应。
⑥三种帧的类型:
信息帧:信息帧用于传送数据,通常简称I帧。I帧以控制字第一位为“0”来标志。信息帧的控制字段中的N(S)用于指示所发送帧的序号。HDLC采用连续发送方式,一次可以连续发送多个帧,通过序号来指示当前发送的帧是第几个帧。
N(R)用于存放下一个预期要接收的帧的序号,同时,N(R)还具有对前面收到的帧进行应答的功能。N(R)=5,即表示下一帧要接收5号帧,换言之,5号帧前的各帧已经正确接收到。可以看出,实际上N(R)是应答信息。HDLC通过向对方发送数据帧的时刻,将给对方的应答信息填入发送帧的N(R)字段将应答捎带到对方。
N(S)和N(R)均为3位二进制编码,可取值0~7。
监控帧:监控帧用于差错控制和流量控制,通常简称S帧。S帧以控制字段第一、二位为“10”来标志。S帧不带信息字段,只有6个字节,即48个比特。S帧的控制字段的第三、四位为S帧类型编码,共有四种不同编码。四种不同的编码表示不同的控制功能。
00——接收就绪(RR),该帧表示接收端在就绪状态,可以接收对方发来的数据帧。帧中的N(R)表示从对方发来编号小于N(R)的I帧已经被正确接收,期望接收的下一个I帧的编号是N(R)。
10——接收未就绪(RNR),该帧表示在未就绪状态,当前不可以接收对方发来的数据帧。帧中的N(R)表示从对方发来编号小于N(R)的I帧已被收到,但接收端目前正处于忙状态,尚未准备好接收编号为N(R)的I帧,要求对方停止发送。
01——拒绝(REJ),该帧表示从对方发来编号为N(R)的I帧出错,需要对方将从编号为N(R)开始的帧及其以后所有的帧进行重发。
11——选择拒绝(SREJ),该帧表示从对方发来编号为N(R)的I帧出错,需要对方将编号为N(R)进行重发。
可以看出,接收就绪RR帧和接收未就绪RNR帧有两个主要功能:首先,RR被用于差错控制的应答帧,同时RR帧和RNR帧构成一对流量控制帧。RR帧和RNR帧用来表示接收站已准备好或未准备好接收信息,希望对方继续发送或停止发送。当接收站接收到的帧太多,来不及处理时,接收站向发送站发送RNR帧,希望发送站暂停发送。当又开始具备处理能力时,接收站再发一个RR帧给发送站,通知发送站可以继续发送。流量控制的示意如图3-32所示。
拒绝REJ帧和选择拒绝SREJ帧,主要用于差错控制。REJ帧用以指示N(R)帧出错,请求重发从N(R)序号开始的所有帧。显然,这是采用了GO-back-N的差错控制方式(如图3-33所示)。SREJ帧用以指示N(R)帧出错,请求重发序号为N(R)的单个帧。显然,这是采用了选择性重发的差错控制方式。两种工作方式的示意如图3-34所示。
图3-32 流量控制的示意
图3-33 GO-back-N的差错控制方式
图3-34 两种工作方式的示意
无编号帧:无编号帧提供对链路的建立、维持和拆除链路管理以及多种控制功能,链路管理及控制的各种功能通过3、4、6、7、8这5个M位来定义,可以定义32种附加的命令或应答功能。由于32种命令都与帧序列编号无关,每一个命令帧都无信息帧序列编号,故该帧称为无编号帧。
无编号帧主要用来设置操作方式、建立、拆除连接等操作。其中,主站采用无编号帧发送除信息帧以外的各种命令,从站用无编号帧发送对主站响应的命令。表3-2给出了无编号帧的名称、类型和M位编码。
表3-2 无编号帧的名称、类型和M位编码
图3-35 HDLC协议的通信过程
⑦HDLC协议的通信过程举例:
HDLC协议的通信过程示例如图3-35所示。设通信为主从站关系,工作在正常响应方式。HDLC协议要完成数据传输,先要进行初始化,设置操作方式。设置操作方式在建立连接阶段完成。建立连接完成后进入数据传输,数据传输完毕拆除连接,结束本次传输,具体工作过程示例如下。
a.建立连接阶段:
主站通过发SRNM命令给从站,通知从站工作在正常响应方式。从站收到该命令后,如果同意建立连接,就完成操作方式设置,并以UA返回给主站,表示同意建立连接,并已完成建立连接。
b.数据传输阶段:
主站连续发送数据帧给从站。从站在接收帧时,按不同情况进行不同处理:
如果收到的帧正确,并且从站的缓冲区空可以继续接收新的帧,则从站返回RR帧,一方面应答前面发来的帧已经正确收到,一方面通知对方可以继续发送。
如果收到的帧正确,但从站的缓冲区满,不可以继续接收新的帧,则从站返回RNR帧,一方面应答前面发来的帧已经正确收到,一方面通知对方暂停发送。
如果收到的帧不正确,从站将收到的帧的序号N(R)装入REJ帧,删除收到的错误帧,向主站返回REJ帧,请求主站重新发送N(R)开始的其他帧。
c.拆除连接阶段:
当数据帧传输完毕,主站将要拆除已经建立的链路连接。主站通过发DISC命令给从站,通知从站拆除连接,从站收到该命令后,如果同意拆除连接,就完成拆除连接,并以UA返回给主站,表示同意拆除连接,并已完成拆除连接。
高级数据链路控制传输协议HDLC由于采用特殊字段的特殊比特位实现传输控制,数据报文中的数据可以是任意比特串,没有任何限制,不需要一定是完整的字符串,这在网络传输中是一个重要的特性。HDLC实现透明传输采用比特填充法,实现起来容易,还可以通过硬件来实现,从而得到较高的处理速率。这些优点使得HDLC协议在网络中得到普遍的应用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。