为了理解网络是如何定义帧格式的,下面考虑一个简单的例子。假设某人需要使用面向字符传输方式把一个数据块从一台计算机发送到另一台计算机。
帧定界(framing)是指将物理线路上的比特串划分为一个个的帧。帧定界是数据链路层的一个基本功能。下面主要讨论两种最常用的帧定界方法。
第一种帧定界方法是字符填充帧定界法,这种方法只适用于面向字符的链路层协议,如20世纪60年代末由IBM公司开发的二进制同步通信(BInary SYNchronous Communication,BISYNC)协议。字符填充帧定界法采取的措施是每个帧以ASCII字符序列DLE STX开头、以DLE ETX结束(DLE、STX和ETX分别为ASCII字符集里的控制字符,其含义分别为Data Link Escape、Start of TeXt、End of TeXt)。用这种方法,接收端通过扫描输入线路上的DLE STX和DLE ETX就能确定帧的起始和结束。
字符填充帧定界法带来的一个问题是,当用户数据中含有DLE STX或DLE ETX字符序列时,将严重干扰帧的定界。解决的办法是让发送端在发送数据的每个DLE字符前面再插入一个DLE字符,接收端在接收数据时删除插入的DLE字符,这种方法叫作字符填充(character stuffing)技术。这样,接收端在扫描物理线路的字符序列时,如果发现只是单个DLE出现,就可以断定是帧的起始或结束标识符DLE STX或DLE ETX,而不是数据DLE,因为后者总是成对出现的。图3-1给出了用户数据在进行字符填充前、填充后以及去掉填充字符后的情况。
图3-1 字符填充帧定界法
第二种帧定界方法是比特填充帧定界法。比特填充帧定界法克服了字符填充帧定界法的缺点,因为它不依赖特定的字符集,允许发送的数据为任意的比特组合。该方法可以用于面向比特的链路层协议,如IBM的同步数据链路控制(Synchronous Data Link Control,SDLC)协议和ISO的高级数据链路控制(High-level Data Link Control,HDLC)协议。
比特填充帧定界法是在每一帧的头和尾各引入一个特殊的比特组合作为帧的起始和结束标识符,如01111110(十六进制为0x7E)。当接收端扫描到01111110时就知道是一帧的开头,接收端开始扫描并接收比特串,直到扫描到下一个01111110标识符为止。
比特填充帧定界法带来一个同样的问题,即当发送的数据中含有01111110比特组合时,也将严重干扰正常的帧定界。为保证标识符的唯一性但又兼顾帧内数据的透明性,可以采用“0比特插入法”来解决。也就是说,在发送端发送用户数据,当发现有连续的5个“1”出现时便在其后添加一个“0”,然后继续发送后续的用户数据。在接收端接收用户数据除标识符以外的所有字段,当发现有连续5个“1”出现后,若其后一个比特为“0”则自动删除它以恢复原来的比特流。图3-2给出了一个比特填充的例子。
图3-2 比特填充帧定界法