本地资料组帧
SCHEDULE LOCAL低优先级4 个小节
暂无关联题目选中文字可高亮或加下划线
选中文字高亮 · 下划线

组帧

较少考查,了解下几种组帧方法的原理即可。

数据链路层的主要功能之一就是 组帧

帧(frame)代表数据链路层的数据发送单位,在接收到来自于网络层的报文(packet)时如何为其添加帧头和帧尾,并且以何种方式进行 帧定界(接收方区别连续不同的帧)。

网络层分组添加帧首部和帧尾形成链路层帧

组帧的关键就在于 帧定界,也就是对于接收方来说,它能够以某种方式区分连续收到的不同帧。 从这个角度出发,组帧 方式可以被分为以下几种:

字符计数法

字符计数法 是在帧的首部设置一个计数字段,用来指示该帧中包含的字符(或字节)数量。

当接收方开始读取一帧时,首先读取位于 帧首部的计数字段。通过该字段的数值,接收方即可知道该 帧的总长度(即后续应读取的字符数)。随后,接收方按照得到的长度继续读取剩余的数据,直至完整地接收完本帧。

字符计数法用帧首部长度字段确定当前帧边界

若计数字段在传输中出错,接收方会错误定位本帧结尾,并可能继续误判后续帧边界,因此这种方法对计数字段差错较敏感。

首尾定界字符法

首尾定界字符法(字符填充法)即 使用特殊控制字符标志帧的开始和结束

但是使用这种方式可能出现如下问题:就是 首位定界字符 可能会在帧内部出现,这个时候就会造成歧义。

所以当特殊字符出现在帧的数据部分时,需要用 转义字符 ESC 来对特殊字符进行转义,同样,ESC 出现在数据部分同样需要转义。

字符填充法在数据中的 FLAG 与 ESC 前插入 ESC 转义

以上图为例,假设我们使用 FLAG 作为 首位定界字符 的话(注意这里 FLAG 只是字符名称,不是表示字符是 FLAG),那么当 FLAG 出现在数据部分时,我们需要对 FLAG 进行转义,需要注意的是,因为我们使用 ESC 作为转义字符,所以当数据中出现 ESC 时,我们也需要对转义字符自己进行转义。

零比特填充法

零比特填充法(Bit Stuffing)与首位定界字符法思路类似。

01111110 作为一个新的数据帧的开头,这里的关键在于要对数据帧内容中与 01111110 相同的部分进行转义,转义的方式如下:

  • 发送方
    • 每当数据中出现 连续 5 个 '1' 时,
    • 就自动插入一个 '0',避免形成 6 个连续的 '1'(即避免形成 01111110)。
  • 接收方
    • 每当检测到 连续 5 个 '1' 后跟着一个 '0',就去掉这个 '0',还原原始数据。
    • 在传送的比特流中可以传送任意比特组合,而不会引起对帧边界的判断错误。零比特填充法 很容易由硬件来实现,性能优于字符填充法

对于 零比特填充法,需要记住 01111110 这种开头的比特填充方式以及具体如何进行转义。

零比特填充在连续五个 1 后插入 0 并由接收端删除

违规编码法

违规编码法(Physical Layer Coding Violations)使用正常数据编码中不会出现的信号模式进行定界。比如,按本教材约定,曼彻斯特编码 将数据比特 1 编码为“高→低”、0 编码为“低→高”,而“高→高”和“低→低”在正常码元中不会出现,因此可用作特殊边界信号。若题目采用其他编码约定,应以“正常数据中未使用的码型”为判断标准。

违规编码法用正常曼彻斯特码中不会出现的同电平码型定界