https://juejin.im/post/6844904084525301773

点对点协议

PPP(Point to Point Protocol)即点对点协议,运行在数据链路层,为在点对点连接上传输多协议数据包提供了一个标准方法。PPP将IP数据报封装成帧并以帧为单位串行传输。

考虑这种情况:

发送方向接收方传递了两个帧,但我们知道,实际上传递过去的是比特——即一堆1和0,作为接收方要怎么知道这堆1和0到底是一个还是两个或者三个甚至四个帧呢?

使用定界符

为了解决这个情况,我们需要在帧与帧之间使用定界符以区分不同的帧,PPP使用0x7E(01111110)作为这个定界符,即路由器检测到某个字节为0x7E就说明上个帧传输结束,开始下个帧的传输。但如果就这样的话似乎又会引起新的问题呢?

考虑这种情况:

我们的数据中存在0x7E,路由器就会把它误认为定界符,那岂不是会导致帧传输出现错误吗?

字节填充和零比特填充

要解决这个问题,最容易想到的方法就是对传输的数据进行“转义”——传输时发送方按规则对数据(如0x7E)进行修改,接收方反规则将数据恢复原样并交给网络层。而针对异步传输和同步传输,我们分别使用字节填充和零比特填充来修改数据。不过异步传输和同步传输又是什么呢?

异步传输和同步传输

异步传输将帧分成小组(如一个字节作为一个小组),以小组为单位进行传输,在小组与小组之间可以传递其他数据。同步传输则一口气将整个帧发送过去。

字节填充

当PPP使用异步传输时,我们使用0x7D(01111101)作为转义符,转义的规则如下:

  • 把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)。
  • 若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把转义字符0x7D转变为2字节序列(0x7D,0x5D)。
  • 若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把它转变为2字节序列的(0x7D,0x31)。

其中一二点很好理解,分别对定界符和转义符进行修改(如果不理解第二点,考虑数据中出现0x7D,0x5E的情况),但为什么要对ASCII码中的控制字符也进行修改呢?

这是因为异步链路中,有些串行接口驱动程序或MODEM需要使用ASCII码中的控制字符,所以需要对这些字符进行转义处理。

不过大多数情况下并不是这个范围内的所有字符都作为控制字符,因此可以通过LCP(Link Control Protocol)与对端协商,本端将哪些字符作为控制字符处理,请对端将这些字符转义后发送。

LCP —— Link Control Protocol,一个用来建立、配置和测试数据链路链接的链路控制协议,非本篇介绍重点,详情请参阅书籍。

零比特填充

当PPP使用同步传输时(这种情况在SONET/SDH链路上使用PPP时出现),使用零比特填充来实现透明传输。

零比特填充相较字节填充要简单得多,0x7E的二进制表示是01111110,因此只要在每出现5个1时插入一个0就可以避免在数据中出现0x7E.

参考文献
  • 谢希仁. 计算机网络(第7版). 电子工业出版社. 2017

  • PPP协议0x7d用作转义字符时的过程

理解字节填充和零比特填充相关推荐

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

    文章目录 一. 封装数据帧 二. "数据帧" 附加信息 三. "数据帧" 帧同步 四. "数据帧" 长度 五. "数据帧" ...

  2. 数据链路层 功能 封装成帧 透明传输 字符计数法 字符填充法 零比特填充法 违规编码法 传输中的差错 差错控制 冗余编码 奇偶校验码 CRC循环冗余码 检错过程 细解 图解 通俗易懂

    粉丝不过W 数据链路层: 结点:主机.路由器 链路:网络中两个结点之间的物理通道,链路的传输介质:双绞线.光纤和微波,分为有线链路.无线链路 数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输 ...

  3. 模拟计算机网络中的零比特填充

    概述: 学网络的时候,学到一个零比特填充法.是用来保证数据在网络中传输的时候有一个比较稳妥的方式不产生错误.用零比特填充是因为我们要让7EH(01111110)这个16进制数据表示数据的结尾,正因为如 ...

  4. 3.2.1 封装成帧、帧定界、帧同步、透明传输(字符计数法、字符串的首尾填充法、零比特填充的首尾标志法、违规编码法)(转载)

    原文链接:https://blog.csdn.net/weixin_43914604/article/details/104779973 本博客为个人学习.研究或者欣赏用,如有侵权,请与我联系删除,谢 ...

  5. PPP协议使用同步传输技术传送比特串0110111111111100。试问经过零比特填充后变成怎样的比特串?若接收端收到的PPP帧的数据部分是0001110111110111110110,问删除发送端

    比特填充法的具体做法是:在发送端,当一串比特流尚未加上标志字段时,先用硬件扫描整个帧.只要发现5个连续1,则立即填入一个0.因此经过这种零比特填充后的数据,就可以保证不会出现6个连续1.在接收一个帧时 ...

  6. 用c语言实现ppp协议,PPP协议对同步传输方式采用了()实现透明传输。A.字符填充法B.比特填充法C.PPP帧D.广播信道...

    PPP协议对同步传输方式采用了()实现透明传输.A.字符填充法B.比特填充法C.PPP帧D.广播信道 更多相关问题 [单选] 在知识深刻内化的过程中,学生的()水平始终是影响该进程的关键之一,也是制约 ...

  7. 零比特填充算法 HUSTOJ-1076 21.1.7

    javas输入输出.String类 public class test1 {     public static void main(String[] args){         Scanner s ...

  8. 顶级c程序员之路 选学篇-1 深入理解字节,字节序与字节对齐

     深入理解字节,字节序与字节对齐 一 总述 作为一个职业的coder玩家,首先应该对计算机的字节有所了解. 我们经常谈到的2进制流,字节(字符)流,数据类型流(针对编程),结构流等说法,2进制流,0和 ...

  9. 理解Netty中的零拷贝(Zero-Copy)机制

    理解Netty中的零拷贝(Zero-Copy)机制 发表于2年前(2014-01-13 15:11)   阅读(10209) | 评论(12) 164人收藏此文章,我要收藏 赞29 12月12日北京O ...

最新文章

  1. [Logstash-input-redis] 使用详解
  2. 前端处理跨域的几种方式
  3. 服务器win2008 R2 x64 部署ASP.net core到IIS 并解决 HTTP Error 502.5 的问题
  4. 知识图谱开发实战案例剖析_我从剖析Web开发人员路线图中学到的知识
  5. Office web apps 服务器运行一段时间之后CPU就是达到100%
  6. Tiny Jpeg Decoder (JPEG解码程序) 源代码分析 2:解码数据
  7. Say“No”,你学会了吗?
  8. Final Cut Pro X for Mac(fcpx视频剪辑)中文版
  9. 完整的连接器设计手册_连接器退化机理(二)—腐蚀
  10. 如何生成SSH KEY及查看SSH KEY
  11. 【前端知识之JS】reduce()方法与使用
  12. 老男孩之《生日快乐》
  13. 你也可以找到好工作(三)大结局
  14. qq邮箱 实现邮件的发送
  15. java 颜色板_java-RGB调色面板的实现(事件监听器之匿名内部类)
  16. 基于51单片机定时器计数+2片74HC595联级+8位数码管时钟+按键修改时间
  17. 读我(Readme)
  18. flv怎么转换成mp4?这3种方法总有适合你的
  19. Form derives from Form
  20. 仿win7 aero_如何禁用Windows 7的Aero性能警告?

热门文章

  1. WEBPACK DEV SERVER
  2. Operator介绍
  3. 从蚂蚁金服裸辞,京东三面遭调优猛击,闭关俩月啃完653页性能调优实战手册,拿到京东offer
  4. 解决VM 15.5.5ubuntu虚拟机键盘失灵、大小写失灵、caps lock失灵问题
  5. JavaScript中的骚操作
  6. 我的世界服务器物品无法合成,《我的世界》MC玩家无法合成的五大物品,最后一个已经被移除了!...
  7. Yolov1-v4学习笔记
  8. FZU 1980 AbOr's story
  9. 模拟信号或数字(4-20MA或485)转PWM频率可选、可达5A
  10. macOS 误删除 /private/var/folders 导致无法启动的解决方案