数据链路层之所以要把比特组合成帧为单位传输,是为了在出错时只重发出错的帧,而不必重发全部数据,从而提高了效率。为了使接收方能正确地接受并检查所传输的帧,发送方必须依据一定的规则吧网络层递交的分组封装成帧(称为组帧)。组帧主要解决帧边界、帧同步、透明传输等问题。通常有以下四种方法实现组帧.
注意:组帧时既要加首部,又要加尾部。原因:在网络中是以帧为最小单位进行传输的,所以 接收端要正确地接受帧,必须要清楚该帧在一串比特流中是从哪开始到哪结束(因为接收端收到的是一串比特流,没有首部和尾部是不能正确区分帧的)。而分组(即IP数据报)仅仅包含在帧的数据部分,所以不需要加尾部来定界。
3.2.1字符计数法
字符计数法是在帧头部使用一个计数字段来表明帧内字符数。当目的结点的数据链路层收到字节计数值时就知道后面跟随的字节数,从而可以确定帧结束的位置(计数字段提供的字节数包含自身占用的一个字节)。
这种方法最大的问题在于如果计数字段出错,即失去了帧边界划分的依据,接收方就无法判断所传输帧的结束位和下一个帧的开始位,收发双方就失去同步,从而造成灾难性后果。
3.2.2字符填充的首位定界符法
字符填充法使用一些特定的字符来定界一帧的开始(DLE STX)与结束(DLE ETX)。为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,所以在特殊字符前面填充一个转义字符(DLE)来加以区分( 注意:转移字符是ASCII 中的控制字符,是一个字符,而非“D”,“L”,“E”3个字符的组合 ),以实现数据的透明传输,接收方收到转义字符后会自己删除这个插入的DLE字符,结果仍得到原来的数据,这也是字符填充法的由来。
3.2.3比特填充的首尾标志法
比特填充法允许数据帧包含任何个数的比特,也允许每个字符的编码包含任意个数的比特。它使用一个特定的比特模式,即01111110来标志一帧的开始和结束。为了不使信息位中出现的比特流01111110被误判为帧的首尾标志,发送方的数据链路层在信息位中遇到5个连续的1时,将自动在其后插入一个“0”;而接收方做该过程的逆操作,即每收到5个连续的“1”时,则自动删除后面紧跟的“0”,以恢复原信息。
比特填充很容易由硬件来实现,性能优于字符填充方法。
3.2.4 违规编码法
在物理层比特编码时通常采用违规编码法。例如,曼彻斯特编码方法,将数据比特“1”编码层“高-低”电平对,将数据比特“0”编码成“低-高”电平时。而“高-高”电平对和“地-地”电平对在数据中是违规的(即没有采用)。可以借用这些违规编码序列来定界帧的开始和终止。局域网IEEE 802标准就采用了这种方法。
违规编码法不需要采用任何填充技术,便能实现数据传输的透明性,但它只使用与采用冗余编码的特殊编码环境。
由于字节技术法中计数字段的脆弱性和字符填充法实现上的复杂性和不兼容性,目前较常用的组帧方法是比特填充法和违规编码法。