第3章 计算机网络体系结构及协议
3.3 数据链路层
数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层提供的服务的基础上向网络层提供服务。数据链路层的作用是对物理层传输原始比特流的功能的加强,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,即使之对网络层表现为一条无差错的链路。数据链路层的基本功能是想网络层提供透明的和可靠的数据传送服务。透明性是指该层上传输的数据的内容、格式及编码没有限制,也没有必要解释信息结构的意义;可靠的传输使用户免去对丢失信息、干扰信息及顺序不正确等的担心。
3.3.1 数据链路层功能
数据链路层最基本的服务是将源机网络层来的数据可靠的传输到相邻节点的目标机网络层。为达到这一目的,数据链路层必须具备一系列相应的功能,它们主要有:如何将数据组合成数据块,在数据链路层中将这种数据块称为帧,帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使之与接收方相匹配;在两个网路实体之间提供数据链路通路的建立、维持和释放管理。
1.帧同步功能
为了使传输中发生差错后只将出错的有限数据进行重发,数据链路层将比特流组织成以帧为单位传送。帧的组织结构必须设计成使接收方法能够明确的从物理层收到比特流中对其进行识别,也即能从比特流中区分出帧的起始与终止,这就是帧同步要解决的问题。由于网络传输中很难保证计时的正确和一致,所以不能采用依靠时间间隔关系来确定一帧的起始与终止的方法。下面介绍几种常用的帧同步方法。
(1)字节计数法。这种帧同步方法以一个特殊字符表征一帧的起始,并以一个专门字段来标明帧内的字节数。接受方可以通过对该特殊字符的识别从比特流中区分出帧的起始,并从专门字段中获知该帧中随后跟随的数据字节数,从而可确定出帧的终止位置。
面向字节计数的同步规程的典型实例是DEC公司的数字数据通信报协议DDCMP(Digital
DataCommunications Message Protocol)。DDCMP采用的帧格式如下:
| 8 | 14 | 2 | 8 | 8 | 8 | 16 | 8-131064 |
16(位) |
|||||||||
|
|||||||||||||||||
格式中控制字符SOH标志数据帧的起始。Count字段共有14位,用以指示帧中数据段中数据的字节数,数据段最大长度为8×(214-1)=131064位,长度必须为字节(即8位)的整倍数,DDCMP协议就是靠这个字节计数来确定帧的终止位置的。DDCMP帧格式中的Ask、Seg、Addr及Flag中的第2位。它们的功能分别类似于本节稍后要详细介绍的HDLC中的N(S)、N(S)、Addr字段及P/F位。CRC1、CRC2分别对标题部分和数据部分进行双重校验,强调标题部分单独校验的原因是,一旦标题部分中的Count字段出错,即失却了帧边界划分的依据,将造成灾难性的后果。
由于采用字段计数方法来确定帧的终止边界不会引起数据及其它信息的混淆,因而不必采用任何措施便可实现数据的透明性,即任何数据均可不受限制地传输。
(2)使用字符填充的首尾定界符法。该法用一些特定的字符来定界一帧的起始与终止,本节稍后要介绍的BSC规程便是典型例子。为了不使数据信息位中出现的与特定字符相同的字符被误判为帧的首尾定界符,可以在这种数据字符前填充一个转义控制字符(DLE)以示区别,从而达到数据的透明性。
(3)使用比特填充的首尾定界符法。该法以一组特定的比特模式(如01111110)来标志一帧的起始与终止。本节稍后要详细介绍的HDLC规程即采用该法。为了不使信息位中出现的与该特定模式相似的比特串被误判为帧的首尾标志,可以采用比特填充的方法。比如,采用特定模式01111110,则对信息位中的任何连续出现的5个“1”,发送方自动在其后插入一个“0”,而接受方则做该过程的逆操作,即每收到连续5个“1”,则自动删去其后所跟的“0”,以此恢复原始信息,实现数据传输的透明性。比特填充很容易由硬件来实现,性能优于字符填充方法。
(4)违法编码法。该法在物理层采用特定的比特编码方法时采用。例如,曼彻斯特编码方法,是将数据比特“1”编码成“高-低”电平对,将数据比特“0”编码成“低-高”电平对。而“高-高”电平对和“低-低”电平对在数据比特中是违法的。可以借用这些违法编码序列来定界帧的起始与终止。局域网IEEE
802标准中就采用了这种方法。违法编码法不需要任何填充技术,便能实现数据的透明性,但它只适用采用冗余编码的特殊编码环境。
由于字节计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)以及字符填充实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充法和违法编码法。
2.差错控制功能
通信系统必须具备发现(即检测)差错的能力,并采取措施纠正之,使差错控制在所能允许的尽可能小的范围内,这就是差错控制过程,也是数据链路层的主要功能之一。
接收方通过对差错编码(奇偶校验码或CRC码)的检查,可以判定一帧在传输过程中是否发生了差错。一旦发现差错,一般可以采用反馈重发的方法来纠正。这就要求接受方收完一帧后,向发送方反柜一个接收是否正确的信息,使发送方据此做出是否需要重新发送的决定。发送方仅当收到接收方以正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需要重发直至正确为止。
物理信道的突发噪声可能完全“淹没”一帧,即使得整个数据帧或反馈信息帧丢失,这将导致发送方永远收不到接受方发来的信息,从而使传输过程停滞。为了避免出现这种情况,通常引入计时器(Timer)来限定接收方发回方反柜消息的时间间隔,当发送方发送一帧的同时也启动计时器,若在限定时间间隔内未能收到接收方的反柜信息,即计时器超时(Timeout),则可认为传出的帧以出错或丢失,就要重新发送。
由于同一帧数据可能被重复发送多次,就可能引起接收方多次收到同一帧并将其递交给网络层的危险。为了防止防止发生这种危险,可以采用对发送的帧编号的方法,即赋予每帧一个序号,从而使接收方能从该序号来区分是新发送来的帧还是已经接受但又重发来的帧,以此来确定要不要将接收到的帧递交给网络层。数据链路层通过使用计数器和序号来保证每帧最终都能被正确地递交给目标网络层一次。
有关差错控制的详细内容,将在本节稍后再做介绍。
3.流量控制功能
首先需要说明一下,流量控制并不是数据链路层特有的功能,许多高层协议中也提供流量控制功能,只不过流量控制的对象不同而已。比如,对于数据链路层来说,控制的是相邻两节点这间数据链路上的流量,而对于运输层来说,控制的则是从源到最终目的之间端对端的流量。
由于收发双方各自使用的设备工作速率和缓冲存储空间的差异,可能出现发送方发送能力大于接收方接收能力的现象,若此时不对发送方的发送速率(也即链路上的信息流量)做适当的限制,前面来不及接收的帧将被后面不断发送来的帧“淹没”,从而造成帧的丢失而出错。由此可见,流量控制实际上是对发送方数据流量的控制,使其发送速率不致超过接收方的速率。也即需要有一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后再继续发送。本节稍后将要介绍的XON/XOFF方案和窗口机制就是两种常用的流量控制方法。
4.链路管理功能
链路管理功能主要用于面向连接的服务。在链路两端的节点要进行通信前,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接。在传输过程中则要维持该连接。如果出现差错,需要重新初始化,重新自动建立连接。传输完毕后则要释放连接。数据链路层连接的建立,维持和释放就称做链路管理。
在多个站点共享同一物理信道的情况下(例如在局域网中),如何在要求通信的站点间分配和管理信道也属于数据层链路管理的范畴。
3.3.2 差错控制
用以使发送方确认接收方是否正确收到了由它发送的数据信息的方法称为反馈差错控制。通常采用反馈检测和自动重发请求(ARQ)两种基本方法来实现。
1.反馈检测法
反馈检测法也称回送校检法或“回声”法,主要用于面向字符的异步传输中,如终端与远程计算机间的通信。这是一种无须使用任何特殊代码的差错检测法。双方进行数据传输时,接收方将接收到的数据(可以是一个字符,也可以是一帧)重新发回发送方,由发送方检查是否与原始数据完全相符。若不相符,则发送方发送一个控制字符(如
DEL)通知接收方删去出错的数据,并重新发送该数据;若相符,则发送下一个数据。
反馈检测法原理简单,实现容易,也有较高的可靠性。但每个数据均被传输两次,信道利用率很低。这种差错控制方法一般用于面向字符的异步传输中,因为这种场合下信道效率并不是主要矛盾。
2.自动重发请求法(ARQ法)
实用的差错控制方法,既要传达室输可靠性高,又要信道利用率高。为此可使发送方将要发送的数据帧附加一定的冗余检错码一并发送,接收方则根据检错码对数据帧进行差错检测,若发现错误,就返回请求重发的应答,发送方收到请求重发的应答后,便重新传送该数据帧。这种差错控制方法就称为自动重发请求法(Automatic
Repeat reQuest),简称ARQ法。
ARQ法仅需返回少量控制信息,便可有效地确认所发数据帧是否正确被接收。ARQ法有几种实现方案,空闲重发请求(Idle
RQ)和连续重发请求(Continuous RQ)是其中最基本的两种方案。
(1)空闲重发请求(Idle RQ)。空闲重发请求方案也称停等(Stop
and Wait)法,该方案规定发送方每发送一帧后就要停下来等待接收方的确认返回,仅当接收方确认正确接收后再继续发送下一帧
。空闲重发请求方案的实现过程如下:
①发送方每次仅将当前信息帧作为待确认帧保留在缓冲存储器中;
②当发送方开始发送信息帧时,随即启动计时器;
③当接收方收到无差错信息帧后,即向发送方返回一个确认帧;
④当接收方检测到一个含有差错的信息帧时,便舍弃该帧;
⑤若发送方在规定时间内收到确认帧,即将计时器清零,继而开始下一帧的发送;
⑥若发送方在规定时间内未收到确认帧,(即计时器超时),则应重发存于缓冲器中的侍确认信息帧。
从以上过程可以看出,空闲RQ方案的收、发送方仅需设置一个帧的缓冲存储空间,便可有效地实现数据重发并确保接收方接收的数据不会重份。空闲RQ方案最主要的优点就是所需的缓冲存储空间最小,因此在链路端使用简单终端的环境中被广泛采用。
(2)连续重发请求(Continuous RQ)。连续重发请求方案是指发送方可以连续发送一系列信息帧,即不用等前一帧被确认便可发送下一帧。这就需要在发送方设置一个较大的缓冲存储空间(称作重发表),用以存放若干待确认的信息帧。当发送方到对某信息帧的确认帧后便可从重发表中将该信息帧删除。所以,连续RQ方案的链路传输效率大大提高,但相应地需要更大的缓冲存储空间。连续RQ方案的实现过程如下:
①发送方连续发送信息帧而不必等待确认帧的返回;
②发送方在重发表中保存所发送的每个帧的备份;
③重发表按先进先出(FIFO)队列规则操作;
④接收方对每一个正确收到的信息帧返回一个确认帧;
⑤每一个确认帧包含一个惟一的序号,随相应的确认帧返回;
⑥接收方保存一个接收次序表,它包含最后正确收到的信息帧的序号;
⑦当发送方收到相应信息帧的确认后,从重发表中删除该信息帧的备份;
⑧当发送方检测出失序的确认帧(即第N号信息帧和第N+2号信息帧的确认帧已返回,而N+1号的确认帧未返回)后,便重发未被确认的信息帧。
上面连续RQ过程是假定在不发生传输差错的情况下描述的,如果差错出现,如何进一步处理还可以有两种策略,即GO-DACK-N策略和选择重发策略。
GO-DACK-N策略的基本原理是,当接收方检测出失序的信息帧后,要求发送方重发最后一个正确接收的信息帧之后的所有未被确认的帧;或者当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重新发送出错帧及其后的N帧。这就是GO-DACK-N(退回N)法名称的由来。因为,对接收方来说,由于这一帧出错,就不能以正常的序号向它的高层递交数据,对其后发送来的N帧也可能都不能接收而丢弃。GO-DACK-N法操作过程如图3.13所示。图中假定发送完8号帧后,发现2号帧的确认返回在计时器超时后还未收到,则发送方只能退回从2号帧开始重发。

图3.13 Go-back-N 法举例
GO-DACK-N可能将已正确传送到目的方的帧再重传一遍,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICE REPEAT),其工作过程如图3.14所示。图中2号帧的否认返回信息NAK2要求发送方选择重发2号帧。显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。

图3.14 选择重发举例法
3.3.3 流量控制
流量控制涉及链路上字符或帧的发送速率的控制,
以使接收方在接收前的足够的缓冲存储空间来接收每一个字符或帧。例如,在面向字符的终端——计算机链路中,若远程计算机为许多台终端服务,它就有可能因不能在高峰时按预定速率传输全部字符而暂时过载。同样,在面向帧的自动重发请求系统中,当待确认帧数量增加时,有可能超出缓冲器存储空间,也会造成过载。下面介绍两种常用的流量控制方案:XON/XOFF方案和窗口机制。
1.XON/XOFF方案
增加缓冲存储空间在某种程度上可以缓解收、发双方在传输速率上的差异,但这是一种被动、消极的方法。因为,一方面系统不允许开设过大的缓冲空间,另一方面对于速率显著失配并且又传送大量数据的场合,仍会出现缓冲空间不够的现象。XON/XOFF方案方案则是一种相比之下更主动、更积极的流量控制方法。
XON/XOFF方案中使用一对控制字符来实现流量控制,其中XON采用ASCII字符集中的控制字符DC1,XOFF采用ASCII字符集中的控制字符DC3。当通信路上的接收方发生过载时,便向发送方发送一个XOFF字符,发送方接收XOFF字符后便暂停发送数据;等接收方处理完缓冲器中的数据,过载恢复后,再向发送方发送一个XON字符,以通知发送方恢复数据发送。在一次数据传输过程中,XOFF、XON的周期可重复多次,但这些操作对用户来说是透明的。
许多异步数据通信软件包均支持XON/XOFF协议。这种方案也可用于计算机向打印机或其它终端设备发送字符,在这种情况下,打印机或终端设备中的控制部件用以控制字符流量。
2.窗口机制
为了提高信道的有效利用率,如前所述采用了不等待确认帧返回就连续发送若干帧的方案。由于允许连续发送多个未被确认的帧
,帧号就需采用多位二进制才能加以区分。因为凡被发出去蛤尚未被确认的帧都可能出错或丢失而要求重发,因而这些帧都要保留下来。这就要求发送方有较大的发送缓冲区保留可能要求重发的未被确认的帧。
但是缓冲区容量总是有限的,如果接收方不能以发送方的发送速率处理接收到的帧,则还是可能用完缓冲容量而暂时过载。为此,可引入类似于空闲RQ控制方案的调整措施,其本质是在收到一确定帧之前,对发送方可发送的帧的数目加以限制。这是由发送方调整保留在重发表中的待确认帧的数目来实现的。如果接收方来不及时对心到的帧进行处理,则便停发确认信息,此时发送方的重发送方的重发表就会增长,当达到重发表限度时,发送方就不再发送新帧,直至再次收到确认信息为止。
不了实现此方案,发送方存放待确认帧的重发表中,应设置待确认帧数目的最大限度,这一限度被称为链路的发送窗口。显然,如果窗口设置为1,即发送方缓冲能力仅为一个帧,则传输控制方案就回到了空闲RQ方案,此时传输效率很低。故窗口限度应选为使接收方尽量能处理或接受收到的所有帧。当然选择时还必须考虑诸如帧的最大长度、可使用的缓冲存空间以及传输速率等因素。
重发表是一个连续序号的列表,对应发送方已发送但尚未确认的那些帧。这些帧的序号有一个最大值,这个最大值即发送窗口的限度。所谓发送窗口就是指示发送方已发送但尚未确认的帧序号队列的界,其上、下界分别称为发送窗口的上、下沿,上、下沿的部距称为窗口尺寸。接收方类似地也有接收窗口,它批示允许接收和帧的序号。
发送方每次发送一帧后,待确认帧的数目便增1,每收到一个确认信息后,待确认帧的数目便减1。当重发表长度计数值,即待确认帧的数目等于发送窗口尺寸时,便停止发送新的帧。
一般帧号只取有限位二进制数,到一定时间后就又反复循环。若帧号配3位二进制数,则帧号在0~7间循环。如果发送窗口尺寸取值为2。则发送如图3.15所示。图中发送方阴影部分表示打开的发送窗口,接收方阴影部分则表示打开的接收窗口。当传送过程进行时,打开的窗口位置一直在滑动,所以也称为滑动窗口(Slidding
Window),或简称为滑窗。

图3.15 滑动窗口状态变化过程
图3.15中的滑动窗口变化过程可叙述如下(假设发送窗口尺寸为2,接收窗口尺寸为1):
①初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,表示等待接收0号帧;
②发送方已发送0号帧,此时发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态同前,仍等待接收0号帧;
③发送方在未收到0号帧的确认返器信息前,继续发送1号帧。此时,1号窗口打开,表示1号帧也属等待确认之列。至昆,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;
④接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;
⑤发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;
⑥发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;
⑦接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;
⑧发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。
一般来说,凡是在一定范围内到达的帧,即使它们不按顺序,接收方也要接收下来。若把这个范围看成是接收窗口的话,由接收窗口的大小也应该是大于1的。而Go-back-N正是接收窗口等于1的一个特例,选择重发也可以看做是一种滑动窗口协议,只不过其发送窗口和接收窗口都大于1。若从滑动窗口的观点来统一看待空闲RQ、Go-back-N及选择重发三种协议,它们的差别仅在于各自窗口尺寸的大小不同而已:
空闲RQ: 发送窗口=1,接收窗口=1;
Go-back-N: 发窗口>1,接收窗口>1;
选择重发: 发送窗口>1,接收窗口>1。
若帧序号采用3位二进制编码,由最大序号为Smax=2^3-1=7。对于有序接收方式,发送窗口最大尺寸选为Smax;对于无序接收方式,发送窗口最大尺寸至多是序号范围的一半。发送方管理超时控制的计时器数应等于缓冲器数,而不是序号空间的大小。
3.3.4 数据链路控制协议举例
数据链路控制协议也称链路通信规程,也就是OSI参考模型中的数据链路层协议。链路控制协议可分为异步协议和同步协议两大类。
异步协议以字符为独立的信息传输单位,在每个字符的起始处开始对字符内的比特实现同步,但字符与字符之间的间隔时间是不固定的(即字符之间是异步的)。由于发送器和接收器中近似于同一频率的两个约定时钟,能够在一段较短的时间内保持同步,所以可以用字符起始处同步的时钟来采样该字符中的各比特,而不需要每个比特再用其他方法同步。前面介绍过的“起—止”式通信规程便是异步协议的典型,它是靠起始为(逻辑0)和停止位(逻辑1)来实现字符的定界及字符内比特的同步的。异步协议中由于每个传输字符都要添加诸如起始位、校验位、停止位等冗余位,故信道利用率很低,一般用于数据速率较低的场合。
同步协议是以许多字符或许多比特组织成的数据块——帧为传输单位,在帧的起始处同步,使帧内维持固定的时钟。由于采用帧为传输单位,所以同步协议能更有效地利用信道,也便于实现差错控制、流量控制等功能。
同步协议又可分为面向字符的同步协议、面向比特的同步协议及面向字节计数的同步协议三种类型。其中面向字节计数的同步协议在本节前面的帧同步功能中已做了较详细的介绍,下面介绍另两种同步协议。
1.面向字符的同步控制协议
面向字符的同步协议是最早提出的同步协议,其典型代表是IBM的二进同步通信BSC(Binary
Synchronous Communication)协议。随后ANSI和ISO都提出了类似的相应标准。
任何链路层协议均可由链路建立、数据传输和链路拆除三部分组成。位实现建链、拆链等链路管理以及同步等各种功能,除了正常传输的数据块和报文外,还需要一些控制字符。BSC协议用ASCII和EBCDIC字符集定义的传输控制字符来实现相应的功能。这些传输控制字符的标记、名字及ASCII码值和EBCDIC码值见表3.3。
|
表3.3 |
传输控制字符 |
| 标记 | SOH | STX | ETX | EOT | ENQ | ACK | DEL | NAK | SYN | ETB |
| 名称 | 序始 | 文始 | 文终 | 送毕 | 询问 | 确认 | 转义 | 否认 | 同步 | 块终 |
| ASCII码值 | 01H | 02H | 03H | 04H | 05H | 06H | 10H | 15H | 16H | 17H |
| EBCDIC码值 | 01H | 02H | 03H | 37H | 2DH | 2EH | 10H | 3DH | 32H | 26H |
各传输控制字符的功能如下:
SOH(START OF hEAD):序始,用于表示报文的标题信息或报头的开始。
STX(Start of test):文始,标志标题信息的结束和报关文本的开始。
ETX(End of Text):文终,标志报文文本的结束。
EOT(End of Transmission):送毕,用以表示一个或多个文本的结束,并拆除链路。
ENQ(Enquire):询问,用以请求远程站给出响应,响应可能包括站的身份或状态。
ACK(Acknowledge):确认,由接收方发出的作为对正确接收到报文的响应。
DLE(Data Link Escape):转义,用以修改紧跟其后的有限个字符的意义。在BSC中
实现透明方式的数据传输,或者当10个传输控制字符不够用时提供新的转义伟输控制字符。
NAK(Negative Acknowledge):否认,由接收方发出的作为对未正确接收的报文的响应。
SYN(Synchronous):同步字符,在同步协议中,用以实现节点之间的字符同步,或用于
在无数据传输时保持该同步。
ETB(End of transmission Block):块终或组终,用以表示当报文分成多个数据块的结束。
BSC协议将在链路上传输的信息分为数据和监控报文两类。监控报文又可分为正向监控和反向监控两种。每一种报文中至少包括一个传输控制字符,用以确定报文中信息的性质或实现某种控制作用。
数据报文一般由报头和文本组成。文本是要传送的有效数据信息,而报头是与文本传送及处理有关的辅助信息,报头有时也可不用。对于不超过长度限制的报文可只用一个数据块发送,对较长的报文则分作多块发送,对较长的报文则分作多块发送,每一个数据块作为一个传输单位。接收方对于每一个收到的数据块都要给以确认,发送方收到反回的确认后,才能发送下一个数据块。
BSC协议的数据块有如下四种格式:
| (1)不带报头的单块报文或分块传输中的最后一块报文: | |||||||||
| ┈┈ |
|
||||||||
| (2)带报头的单块报文: | |||||||||
| ┈┈ |
|
||||||||
| (3)分块传输中的第一块报文: | |||||||||
| ┈┈ |
|
||||||||
| (4)分块传输中的中间报文: | |||||||||
| ┈┈ |
|
||||||||
BSC协议中所有发送的数据均跟在至少两个SYN字符之后,发使接收方能实现字符同步。报头字段的包识别符及地址。所有数据块在块终限定符(ETX或ETB)之后还有块校验字符BCC(block
check character),bcc可以是垂直奇偶校验或者说16位CRC,校验范围从STX开始到ETX或ETB为止。
当发送的报文是二进制数据库而不是字符串时,二进制数据中形同传输控制字符的比特串将会引起传输混乱。为使二进制数据中允许出现与传输控制字符相同的数据(即数据的透明性),可在各帧中真正的传输控制字符(SYN除外)前加上DLE转义字符,在发送时,若文本中也出现与DLE字符相同的二进制比特串,则可插入一个外加以标记。在接收端则进行同样的检测,若发现单个的DLE字符,则可知其后为传输控制字符;若发现连续两个DLE字符,则知其后的DLE为数据,在进一步处理前将其中一个删去。
正、反向监控报文有如下四种:
| (1)肯定确认和选择响应: | (2)否定确认和选择响应: | |||||||||
|
|
|||||||||
| (3)轮询/选择请求: | (4)拆链: | |||||||||
|
|
监控报文一般由单个传输控制字符或由若干个其它字符引导的单个传输控制字符组成。引导字符统称为前缀,它包含识别符(序号)、地址信息、状态信息以及其它所需信息。ACK和NAK监控报文的作用,首先是作为对先前所发数据块是否正确接收的响应,因而包含识别符(序号);其次,用做对选择监控信息的响应,以ACK表示所选站能接收数据块,而NAK不能接收。ENQ用作轮询和选择监控报文,在多站结构中,轮询或选择的地址在ENQ字符前。EOT监控报文用以标志报文交换的结束,并在两站点间拆除逻辑链路。
由于BSC协议与特定的字符编码集关系过于密切,故兼容性较差。为满足数据透明性而采用的字符填充法,实现起来比较麻烦,且依赖于所采用的字符编码集。另外,由于BSC是一个半双工协议,它的链路伟传输效率很低。不过,由于BSC协议需要的缓冲存储空间较小,因而在面向终端的网络系统中仍然被广泛使用。
2、面向比特的同步协议
这里以ISO的高级数据链路控制规程HDLC协议为例,来讨论面向比特的同步控制协议的一般原理与操作过程。面向比特的数据链路控制协议的典型,HDLC具有发以下特点:协议不依赖于任何一种字符编码集;数据报文可透明传输,用于实现透明传输的“0比特插入法”易于硬件实现;全双工通信,不必等待确认便可连续发送数据,有较高的数据链路传输效率;所有帧均采用CRC校验,对信息帧进行顺序编号,可防止漏收或重份,传输可靠性高;传输控制功能与处理功能分离,具有较大的灵活性。由于以上特点,目前网络设计普遍使用HDLC数据链路控制协议。
(1)HDLC的操作方式。HDLC是通用的数据链路控制协议,在开始建立数据链路时,允许选用特定的操作方式。所谓操作方式,通俗地讲就是某站点是以主站点方式操作还是以从站方式操作,或者是二者兼备。
链路上用于控制目的的站称为主站,其它的受主站控制的站称为从站。主站对数据流进行组织,并且对链路上的差错实施恢复。由主站发往从站的帧称为命令帧,而从从站返回主站的帧称为响应帧。连有多个站点的链路通常使用轮询技术,轮询其它站的站称为主站,而在点-点链路中每个站均可为主站。主站需要比从站有更多的逻辑功能,所以当终端与主机相连时,主机一般总是主站。在一个站连接多个链路的情况下,该站对于一些链路而言可能是主站,而对于一些链路而言又可能是从站。有些站可兼备主站和从站的功能,这种站称为组合站,用于组合站之间信息传输的协议是对称的,即在链路上主、从站具有同样的传输控制功能,这又称作平衡操作。相对的,那种操作时有主站、从站之分的,且各自功能不同的操作,称为非平衡操作。
HDLC中常有的操作方式有以下三种:
①正常响应方式NRM(Norma Responses Model)
。这是一非平衡数据链路方式,有时也称非平衡正常响应方式。该操作方式适用于面向终端的点—点或一点与多点的链路。在这种操作方式中,传输过程由主站启动,从站只有收到主站某个命令帧后,才能作出响应向主站传输信息。响应信息可以由一个或多个帧组成,若信息由多个帧组成,则应指出哪一个是最后一帧
。主站负责整个链路,且具有轮询、选择从站及向从站发送命令的权利,同时也负责对超时、重发及各类恢复操作的控制。
②异步响应方式ARM Asynchronous
Responses Mode)这也是一种非平衡数据链路操作方式,与NRM不同的是,ARM下的传输过程由从站启动。从站主的动发送给主站的一个或一组帧中可包含有信息,也可以是仅以控制为目的而发的帧。在这种操作方式,与NRM不同的是,ARM下的传输过程由从站启动。从站主的动发送给主站的一个或一组帧中可包含有信息,也可以是仅以控制为目的而发的帧。在这种操作方式下,由从站来控制超时和重发。该方式对采用轮询方式的多站链路来说是必不可少的。
③异步平衡方式ABM(Asynchronous Balanced Mode).这是一种允许任何节点来启动传输的操作方式。为了提高链路传输效率,节点之间在两个方向上都需要有较高的信息传输量。在这种操作方式下,任何时候任何站点都能启动传输操作,每个站点既可作为主站又可作为从站,即每个站都是组合站。各站都有相同的一组协议,任何站点都可以发送或接收命令,也可以给出应答,并且各站对差错恢复过程都负有相同的责任。
(2)HDLC的帧格式。在HDLC中,数据和控制报文均以帧的标准格式传送。HDLC中的帧类似于BSC字符块,但BSC协议中的数据报文和控制报文是独立传输的,而HDLC中命令和响应以统一的格式按帧传输。完整的HDLC帧由标志字段(F)、地址字段(A)、控制字段(C)、信息字段(I)、帧校验序列字段(FCS)等组成,其格式如下:
|
标志 |
地址 | 控制 | 信息 | 帧校验序列 | 标志 | ||||||
|
|||||||||||
①标志字段(F):标志字段01111110的比特模式,用以标志帧的起始和前一帧的终止。通常,在不进行帧传送的时刻,信道仍处于激活状态。标志字段也可以作为帧与帧之间的填充字符。在这种状态下,发送方不断地发送标志字段,而接收方则检测每一个收到的标志字段,一旦发现某个标志字段后面不再是一个标志字段,便可认为一个新的帧传送已经开始。采用“0比特插入法”可以实现数据的透明传输,该法在发送端检测除标志码以外的所有字段,若发现连续5个“1”出现时,便在其后添插1个“0”,然后继续发送后面的比特流;在接收端同样检测除标志码以外所有字段,若发现连续5个“1”后是“0”,则将其删除以恢复比特流的原貌。
②地址字段(A):地址字段的内容取决于所采用的操作方式。在操作方式中,有主站、从站、组合站之分,每一个从站和组合站都被分配一个惟一的地址。命令帧中的地址字段携带的地址是对方站的地址,而响应帧中的地址字段所携带的地址是本站的地址。某一地址也可分配给不止一个站,这种地址称为组地址,利用一个组地址传输的帧能被组内所有拥有该组地址的站接收,但当一个从站或组合站发送响应时,它仍应当用它惟一的地址。还可以用全“1”地址来表示包含所有站的地址,这种地址称为广播地址,含有广播地址的帧传送给链路上所有的站。另外,还规定全“1”地址为无站地址,这种地址不分配给任何站,仅用做测试。
③控制字段(C):控制字段用于构成各种命令和响应,以便对链路进行监视和控制。发送方主站或组合站利用控制字段来通知被寻址的从站或组合站执行约定的操作;相反,从站用该字段作为对命令的响应,报告已完成的操作或状态的变化。该字段是HDLC的关键,下面还将详细介绍。
④信息字段(I):信息字段可以是任意的二进制比特串。比特串长度未做严格限定,其上限由FCS字段或站点的缓冲器容量来确定,目前用得最较多的是1000~2000比特;而下限可以为0
,即无信息字段。但是,监控帧(S帧)中规定不可有信息字段。
⑤帧校验序列字段(FCS):帧校验序列字段可以使用16位CRC,对两个标志字段之间的整个帧的内容进行校验。FCS的生成多项式由CCITT
V.41建议规定为 X16+X12+X5+1。
(3)HDLC的帧类型。HDLC有信息帧(I帧)、监控帧(S帧)和无编号帧(U帧)三种不同类型的帧,各类帧中控制字段的格式及比特定义如下表3.4:
| 控制字段位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| I格式 | 0 | N(S) | P | N(R) | ||||
| S格式 | 1 0 | S1 S2 | P/F | N(R) | ||||
| U格式 | 1 1 | M1 M2 | P/F | M3 M4 M5 | ||||
控制字段中的第1位或第1、第2位表示传送帧的类型。第七位是P/K位,即轮询/终止(Poll/Final)位。当P/F位用于命令帧(由主站发出)时,起轮询的作用,即当该位为“1”时,要求被轮询的从站给出响应,所以此时P/F位可称轮询位(或P);当P/F位用于响应帧(由从站发出)时,称为终止位(或F位),当其为“1”时,表示接收方确认的结束。为了进行连续传输,需要对帧进行编号,所以控制字段中严寒包括了帧的编号。
①信息帧(I帧):信息帧用于传送有效信息或数据,通常简称I帧。I帧以控制字段第三者位为“0”来标志。信息帧控制字段宫的N(S)用于存放发送帧序号,以使发送方不必等待确认而连续发送多帧。N(R)用于存放接收方下一个预期要接收的帧的序号,如N(R)=5,即表示接收方下一帧要接收5号帧,换言之,5号帧前的各帧接收方都已正确接收到。N(S)和N(R)均为3位二进制编码,可取值0~7。
②临控帧(S帧):监控帧
用于差错控制和流量控制,通常简称S帧。S帧以控制字段第1、2位为“10”来标志。S帧不带信息字段,帧长只有6个字节即使8个比特。S帧的控
制字段的第3、4位为S帧类型编码,共有四种不同组合,分别表示:
“00”—接收就绪(RR),由主站可以使用RR型S帧来轮询从站,即希望从站传输编号为N(R)的I帧,若存在这样的帧,便进行传输;从站也可用RR型S帧来做响应,表示从站期望接收的下一帧的编号是N(S)。
“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(R)以前的帧已被确认,当收到一个N(S)等于REJ型S帧的N(R)的I帧后,REJ状态即可清除。SREJ帧对应选择重发策略,当收到一个N(S)等于SREJ帧的N(R)的I帧时,SREJ状态即应消除。
③无编号帧(U帧):无编号帧因其控制字段中不包含编号N(S)和N(R)而得名,简称U帧。U帧用于提供对链路的建立、拆除以及多种控制功能,这些控制功能用于个M位(M1~M5,也称修正位)来定义,可以定义气32种附加的命令或应答功能。