帧定界的基本方法

帧定界就是标识帧的开始与结束。有4 种常见的定界方法,即字符计数法、带字符
填充的首尾界符法、带位填充的首尾标志法和物理层编码违例法。
(1)字符计数法

 

这种帧同步方法是一种面向字节的同步规程,是利用帧头部中的一个域来指定该帧中的字符数,以一个特殊字符表征一帧的起始,并以一个专门字段来标明帧内的字符数。
1.同步原理
接收方可以通过对该特殊字符的识别从比特流中区分出帧的起始,并从专门字段中获知该帧中随后跟随的数据字符数,从而可确定出帧的终止位置。如图7-1所示的就是标识了4个数据帧的帧格式,它们的大小依次为5、5、8、8个字符。

这种方法最大的问题在于如果标识帧大小的字段出错,即失去了帧边界划分的依据,将造成灾难性的后果。如第二帧中的计数字符由“5”变为“7”,则接收方就会失去帧同步的可能,从而不可能再找到下一帧正确的起始位置。由于第二帧的校验和出现了错误,所以接收方虽然知道该帧已经被损坏,但仍然无法知道下一帧正确的起始位置。在这种情况下,给发送方请示重传都无济于事,因为接收方根本不知道应该跳过多少个字符才能到达重传的开始处。由于这种原因,这种字符计数法目前已很少用。
(2)带字符填充的首尾界符法

 

该同步方法是用一些特定的字符来定界一帧的起始与终止,充分解决了错误发生之后重新同步的问题。
1.同步原理
在这种帧同步方式中,为了不使数据信息位中与特定字符相同的字符被误判为帧的首尾定界符,可以在这种数据帧的帧头填充一个转义控制字符(DLE STX,Data Link Escape – Start of Text),在帧的结尾则以DLE ETX(Data Link Escape-End of Text)结束,以示区别,从而达到数据的透明性。若帧的数据中出现DLE字符,发送方则插入一个“DLE”字符,接收方会删除这个DLE字符。如现在要发送一个如图7-3(a)所示的字符帧,在帧中间有一个“DLE”字符数据,所以发送时会在其前面插入一个“DLE”字符,如图7-3(b)所示。在接收方接收到数据后会自己删除这个插入的“DLE”字符,结果仍得到原来的数据,但帧头和帧尾仍在,予以区别,如图7-3(c)所示。

在以前这种同步方式中,起始和结束字符是不同的(如起始字符为DLE,而结束字符是DLE ETX),但是近几年,绝大多数协议倾向于使用相同的字符来标识起始和结束位置。按这样的做法,在接收方丢失了同步,则只需搜索一下标志符就能找到当前帧的结束位置。两个连接的标志符代表了当前帧的结束和下一帧的开始。
但这种同步方式也不是完美的,也会发生严重的问题。当标志符的位模式出现在数据中时,这时不同步问题就可能发生了,这种位模式往往会干扰正常的帧分界。解决这一问题的办法是在发送方的数据链路层传输的数据中,在与分界标志符位模式一样的字符中插入一个转义字符(如ESC)。接收方的数据链路层在将数据送给网络层前删除这种转义字符。因此,成帧用的标志字符与数据中出现的相同位模式字符就可以分开了,只要看它前面有没有转义字符即可。
如果转义字符出现在数据中间,同样需要用转义字符来填充。因此任何单个转义字符一定是转义序列的一部分,而两个转义字节则代表数据中的自然出现的一个转义字符,具体参见图7-3。
2.示例介绍
这种帧同步方法只能用于较为少用的面向字符型协议,典型代表是IBM公司的二进制同步通信协议(BSC)和PPP协议。它的特点是一次传送由若干个字符组成的数据块,而不是只传送一个字符,并规定了10个字符作为这个数据块的开头与结束标志,以及整个传输过程的控制信息。由于被传送的数据块是由字符组成的,所以也被称之为“面向字符的协议”。
BSC协议用ASCII和EBCDIC字符集定义的传输控制字符来实现相应的功能。这些传输控制字符的标记、名字及ASCII码值和EBCDIC码值见表7-1。


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协议的数据块有如下四种格式。
不带报头的单块报文或分块传输中的最后一块报文
这种报文格式为:SYN | SYN  | STX | 报文 |  ETX |  BCC
带报头的单块报文
这种报文的格式为:SYN | SYN | SOH | 报头 | STX | 报文 | ETX | BCC
分块传输中的第一块报文
这种报文格式为:SYN | SYN | SOH | 报头 | STX | 报文 | ETB | BCC
分块传输中的中间报文
这种报文格式为:SYN | SYN | STX | 报文 | ETB | BCC
从以上数据报文格式可以看出,BSC协议中所有发送的数据均跟在至少两个SYN字符之后,以使接收方能实现字符同步。所有数据块在块终限定符(ETX或ETB)之后还有块校验字符BCC(Block Check Character),BCC可以是垂直奇偶校验或者说16位CRC,校验范围从STX开始到ETX或ETB为止。
当发送的报文是二进制数据库,而不是字符串时,二进制数据中形同传输控制字符的比特串将会引起传输混乱。为使二进制数据中允许出现与传输控制字符相同的数据(即数据的透明性),可在各帧中真正的传输控制字符(SYN除外)前加上DLE转义字符;在发送时,若文本中也出现与DLE字符相同的二进制比特串,则可插入一个标记。在接收端则进行同样的检测,若发现单个的DLE字符,则可知其后为传输控制字符;若发现连续两个DLE字符,则知其后的DLE为数据,在进一步处理前将其中一个删去。

(3)带位填充的首尾标志法
7.2.3  比特填充的首尾定界符法
在前面介绍的字符分界法中存在一个大的不足,那就是它仅依靠8位模式。而事实上,并不是所有的字符编码都使用8位模式,如UNICODE编码就使用了16位编码方式。而且随着网络技术的发展,在成帧机制中内含字符码长度的缺点越来越明显,所以有必要开发一种新的同步技术,以便允许任意长度的字符编码方式。本节所介绍的"比特填充的首尾界定符法"就是这样一种新型的同步方式。
"比特填充的首尾界定符法"是以一组特定的比特模式(如01111110)来标志一帧的起始与终止,它允许任意长度的位码,也允许任意每个字符有任意长度的位。它的工作原理是在每一帧的开始和结束位置都加上一个特殊的位模式,如01111110。当发送方的数据链路层传到数据中5个"1" (因为特定模式中是有5个连续"1")时,自动在输出位流中填充一个"0"。在接收方,当收到连续5个"1",并且后面位是"0"时,自动删除该"0"位。就好像字节填充过程对于双方计算机中的网络层是完全透明的一样。如要传输的数据帧为"0110111111011111001",采用比特填充后,在网络中传送时表示为"0111111001101111101011111000101111110"。
上述结果是在原信息("0110111111011111001")的基础上两端各加一个特定模式来标示数据帧的起始与终止,另外,因为在原信息中,有一段比特流与特定模式类似,为了与用于标识帧头和帧尾的特定模式字符区别,在有5个连续"1"的比特位后面加插入一个"0"(斜体"0")。而接收方在收到上述最终数据后进行发送方的逆操作,首先去掉两端的特定模式字符,然后在每收到连续5个"1"的比特位后自动删去其后所跟的"0",以此恢复原始信息,实现数据传输的透明性。
比特填充帧同步方式很容易由硬件来实现,性能优于字符填充方式。所有面向比特的同步控制协议采用统一的帧格式,不论是数据,还是单独的控制信息均以帧为单位传送,其典型代表是ISO的HDLC协议。在此仅说明在HDLC的帧格式中也采用比特填充的帧同步方式,在它的首尾均有标志字段(Flag,8位,即01111110),如图7-4所示。


(4)物理层编码违例法

 

该法在物理层采用特定的比特编码方法时采用。例如,曼彻斯特编码方法,是将数据比特“1”编码成“高—低”电平对,将数据比特“0”编码成“低—高”电平对。而“高—高”电平对和“低—低”电平对在数据比特中是违法的。可以借用这些违法编码序列来界定帧的起始与终止。局域网IEEE 802标准中就采用了这种方法。违法编码法不需要任何填充技术,便能实现数据的透明性,但它只适于采用冗余编码的特殊编码环境。因为“曼彻斯特编码方法”已在第3章进行了详细介绍,所以在此不再赘述。
由于字节计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充法和违法编码法。


你可能感兴趣的:(通讯协议设计)