Alex_McAvoy

想要成为渔夫的猎手

数据链路层组帧

【字符计数法】

字符计数法,就是在帧头部使用一个计数字段,来记录包含该计数字段及其之后的字节数

当目标结点的数据链路层收到字节计数值时,就知道其后面跟随的字节数,从而确定帧结束的位置


举例来说,设字符 $A$ 的二进制编码为 0100 0111,字符 $B$ 的二进制编码为 1110 0011

当发送由 $A$、$B$、这两个字符组成的帧时,若采用字符计数法,加上用于记录字节的计数字段,总共有 $3$ 个字符,$3$ 的二进制编码为 0000 0011

将其放入二进制位序列的首部,其实际发送的二进制序列为:0000 0011 0100 0111 1110 0011

【字符填充的首尾定界符法】

字符填充法使用一些特定的字符来定界一帧的开始与结束,通常采用 DLE STX 来代表帧开始,用 DLE ETX 来代表帧结束

为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,常规在特殊字符前加一个转义字符 DLE,其是 ASCII 码中的控制字符,不是 DLE 三个字符的组合

在接收方收到转义字符后,就知道其后面紧跟的是数据信息,而非控制信息

如图所示,帧的数据段中出现 DLE,发送方会在数据段中每个 DLE 前插入一个 DLE 字符,接收方收到数据后会删除数据段中插入的 DLE 字符,从而得到原来的数据

【零比特填充的首尾标志法】

零比特填充的首尾标志法,容易使用硬件实现,性能优于字符填充的首尾定界符法

其允许数据帧包含任意个数的比特,也允许每个字符的编码包含任意个数的比特,其使用一个特定的比特模式 0111 1110 来标志一帧的开始与结束

为了不让在信息位中出现的 0111 1110 比特流被误判为帧的首尾标志,发送方的数据链路层会在信息位中遇到连续的 $5$ 个 1 时,就自动插入一个 0;接收方的数据链路层会在信息位 中遇到连续的 $5$ 个 1 时,就将其后紧跟的 0 删除

【违规编码法】

在物理层比特编码时,通常采用违规编码法,其不需要采用任何填充技术就能实现数据传输的透明性,但只适用于采用冗余编码的特殊编码环境

以局域网 IEEE 802 标准为例,其物理层采用曼彻斯特编码,将数据比特 1 编码为 高-低 电平对,将数据比特 0 编码为 低-高 电平对,此时 高-高 电平对和 低-低 电平对在数据比特中是违规的,因此可以借助这两个违规的编码来作为帧定界的起始、终止

由于字节计数法中计数字段的脆弱性与字符填充法实现上的复杂性与不兼容性,目前常采用的是比特填充法和违规编码法

感谢您对我的支持,让我继续努力分享有用的技术与知识点!