【计算机网络】数据链路层 : 封装数据帧 ( 附加信息 | 帧长度 | 透明传输 | 字符计数法 | 字符填充法 | 零比特填充法 | 违规编码法 )

文章目录

一、 封装数据帧

封装数据帧 :

① 发送端封装数据帧 :网络层 下发的 IP 数据报 信息基础上 , IP 数据报 的 前面 加上 帧首部 , IP 数据报 的后面 加上 帧尾部 ;

② 接收端识别数据帧 : 接收端 收到 物理层 上交的 比特流 之后 , 根据 数据帧 的首部 , 尾部 标记 , 从连续的比特流中 , 识别出 数据帧的 开始 和 结束位置 ;

二、 “数据帧” 附加信息

“数据帧” 附加信息 :

① 帧界定符 : 首部 和 尾部 包含 很多控制信息 , 其中的一种控制信息 帧定界符 , 用于确定 数据帧的界限 ;

② 其它信息 : 除了 帧定界符 之外 , 还包括 差错控制信息 , 流量控制信息 , 物理地址信息 ;

三、 “数据帧” 帧同步

“数据帧” 帧同步 :

① 帧界定符 : 在 首部 和 尾部 添加的 字段 中有 帧定界符 , 根据 帧定界符 可以确定数据帧的开始 , 结束位置 ;

② 帧同步 : 接收方 从 接收到的 二进制 比特流中 , 识别出 数据帧的 其实位置 和 终止位置 ;

③ 数据帧 发送 与 接收 : 发送方 从 帧首部 开始发送 , 到 帧尾部 发送完毕 , 接收方 首先从 帧首部 判断数据帧的开始 , 直到 接收到帧尾部 帧定界符 , 确定收到了一个完整的数据帧 ;

四、 “数据帧” 长度

数据链路层 帧长 :

① 数据帧组成部分 : 帧首部 , 帧数据部分 , 帧尾部 ;

② 数据帧帧长 : 帧首部长度 + 帧数据长度 + 帧尾部长度 之和 , 就是数据帧 帧长 ;

③ 帧的数据部分长度 限制 : 帧数据部分的 数据长度要 小于等于 最大传送单元 MTU ;

《【计算机网络】数据链路层 : 封装数据帧 ( 附加信息 | 帧长度 | 透明传输 | 字符计数法 | 字符填充法 | 零比特填充法 | 违规编码法 )》

五、 “数据帧” 组装方法

数据帧 组装方法 :

  • 字符计数法
  • 字符填充法
  • 零比特填充法
  • 违规编码法

六、 透明传输

“透明传输” 概念 : 不管传输什么样的比特组合 , 都能够在链路上传输 ;

数据信息 与 控制信息 区分问题 : 数据中的比特组合 恰好 与 某个控制信息 完全一样 , 此时就需要采取一些措施 , 能够使接收方认为这是数据信息 , 不是控制信息 , 这样才能保证 数据链路层 传输的透明性 ;

七、 字符计数法

字符计数法 : 数据帧 首部 的 计数字段 , 表明 数据帧 字符数 ;

  • 计数字段 : 1 Byte ( 字节 ) , 8 bit ( 位 ) ;

《【计算机网络】数据链路层 : 封装数据帧 ( 附加信息 | 帧长度 | 透明传输 | 字符计数法 | 字符填充法 | 零比特填充法 | 违规编码法 )》

缺点 : 所有的数据帧都连续存放 , 如果其中有一个数据帧出错了 , 那么后续所有的数据帧都会出错 ;

八、 字符填充法 ( 加转义字符 )

数据帧透明传输需求 :

① 数据帧封装 : 数据帧 添加 帧首部 , 和 帧尾部 ; 帧首部 和 帧尾部 之间的部分就是实际的数据 ;

② 传输 文本文件 : 数据帧 的数据 是 文本文件组成时 , 数据都是 ASCII 码 , 键盘上传输的任何字符 , 都 可以透明传输 ;

③ 传输 非文本文件 : 如果传输的文件是 非 文本文件 , 如 图像 , 音频 , 视频 等 , 此时 文件中的数据可能是任意值 , 就有可能与 帧尾部 或 帧首部 相同 , 此时就需要 采用 字符填充法实现 透明传输 ;

字符填充法 :

① 数据的随机性 : 原始数据中 , 存在 与 帧首部 , 帧尾部 相同的数据 ;

② 发送端填充转义字符 : 在这些 数据中的 帧首部 / 帧尾部 相同的数据前 , 填充一个转义字符 , 告诉接收端 , 转义字符后的后续数据作为帧数据 , 不当做 帧首部 / 帧尾部 使用 ;

③ 接收端接收数据 : 接收端 接收到的数据中有 转义字符 + 帧首部 / 尾部 样式的信息时 , 将转义字符后的数据当做帧数据 ; 当接收到 单独的 帧首部 / 尾部 时 ( 没有转义字符 ) , 才将其当做数据帧的首部 / 尾部 ;

九、 零比特填充法 ( 5 “1” 1 “0” )

零比特填充法 :

① “数据帧” 首部尾部设定 : 数据帧首部尾部 都设定成 01111110 01111110 01111110 , 解决 数据中出现 01111110 01111110 01111110 数据的情况 , 实现透明传输 ;

② 发送端 : 扫描发送数据 , 发现有连续的 5 5 5 1 1 1 , 就在后面加上一个 0 0 0 ; 这样 帧数据 永远不会出现 6 6 6 1 1 1 的数据 ;

③ 接收端 : 扫描接收数据 , 发现有连续的 5 5 5 1 1 1 , 就将后面的 0 0 0 删除 ; 对应 发送端的操作 ;

这样在比特流中可以传输任意比特组合 , 不会引起 数据帧 边界判定错误的问题 , 实现了透明传输 ;

十、 违规编码法

正常编码 : 曼彻斯特编码 / 差分曼彻斯特编码 中 , 不管是 0 0 0 , 还是 1 1 1 , 在码元 中肯定会跳变一次 , 要么是 高-低 跳变 , 要么是 低-高 跳变 ;

违规编码 : 使用 “高-高” , “低-低” 码元 来作为 数据帧 的 起始 和 终止 边界 ;

十一、 透明传输常用方法

字符计数法 中如果出现差错 , 导致后果太严重 , 一般情况下不使用该方法 ;

字符填充法 实现复杂 , 兼容性差 , 一般情况下也不使用 ;

常用的透明传输实现方法是 零比特填充法 和 违规编码法 ;

    原文作者:韩曙亮
    原文地址: https://blog.csdn.net/han1202012/article/details/108042771
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞