💡 低优先级
较少考查,了解下几种组帧方法的原理即可。
数据链路层的主要功能之一就是 组帧 。
帧(frame)代表数据链路层的数据发送单位,在接收到来自于网络层的报文(packet)时如何为其添加帧头和帧尾,并且以何种方式进行 帧定界 (接收方区别连续不同的帧)。
组帧 的关键就在于 帧定界 ,也就是对于接收方来说,它能够以某种方式区分连续收到的不同帧。
从这个角度出发,组帧 方式可以被分为以下几种:
字符计数法
字符计数法 是在帧的首部设置一个计数字段,用来指示该帧中包含的字符(或字节)数量。
当接收方开始读取一帧时,首先读取位于 帧首部的计数字段 。通过该字段的数值,接收方即可知道该 帧的总长度 (即后续应读取的字符数)。随后,接收方按照得到的长度继续读取剩余的数据,直至完整地接收完本帧。

首位定界字符法
首位定界字符法即 使用特殊控制字符标志帧的开始和结束 。
但是使用这种方式可能出现如下问题:就是 首位定界字符 可能会在帧内部出现,这个时候就会造成歧义。
所以当特殊字符出现在帧的数据部分时,需要用 转义字符 ESC 来对特殊字符进行转义,同样,ESC 出现在数据部分同样需要转义。

以上图为例,假设我们使用 FLAG 作为 首位定界字符 的话(注意这里 FLAG 只是字符名称,不是表示字符是 FLAG),那么当 FLAG 出现在数据部分时,我们需要对 FLAG 进行转义,需要注意的是,因为我们使用 ESC 作为转义字符,所以当数据中出现 ESC 时,我们也需要对转义字符自己进行转义。
零比特填充法
零比特填充法 (Bit Stuffing)与首位定界字符法思路类似。
用 01111110 作为一个新的数据帧的开头,这里的关键在于要对数据帧内容中与 01111110 相同的部分进行转义,转义的方式如下:
在 发送方 :
每当数据中出现 连续 5 个
'1'时,就自动插入一个
'0',避免形成 6 个连续的'1'(即避免形成01111110)。- 在 接收方 :
每当检测到 连续 5 个
'1'后跟着一个'0',就去掉这个'0',还原原始数据。在传送的比特流中可以传送任意比特组合,而不会引起对帧边界的判断错误。零比特填充法 很容易由硬件来实现, 性能优于字符填充法 。
对于 零比特填充法 ,需要记住 01111110 这种开头的比特填充方式以及具体如何进行转义。

违规编码法
违规编码法 (Physcial Layer Coding Violations)使用特殊电平进行定界。比如,曼彻斯特编码 将数据比特“1”编码为“高 - 低”电平,将比特“0”编码为 “低-高” 电平对,而 “高-高” 电平对和 “低-低” 电平对是没有被使用的,所以可以用这两个电平进行帧定界。
违规编码法 - 曼彻斯特编码帧定界时钟数据位1010正常编码高低1: 高→低0: 低→高1: 高→低0: 低→高违规编码(帧定界)高低高-高(帧开始)低-低(帧结束)正常数据: 0 1 0 1违规编码法原理• 正常编码:- 数据"1": 高→低电平- 数据"0": 低→高电平• 违规编码(帧定界):- 高→高: 帧开始标记- 低→低: 帧结束标记利用未使用的电平组合进行帧定界,避免了额外开销
相关笔记
- 通信概念
- 物理层设备
- 编码与调制
- 物理层
- 交换方式