PPP协议的帧格式
2016-02-04 11:53
190 查看
PPP协议的帧格式
1. PPP帧各字段的意义
PPP帧的首部和尾部分别为四个字段和两个字段。1.1 PPP帧的首部
首部中的标志字段F(Flag),规定为0x7E(符号0x表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110),标志字段表示一个帧的开始。首部中的地址字段A规定为0xFF(即11111111)。
首部中的控制字段C规定为0x03(即00000011)。
首部中的2字节的协议字段:
(1)当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。
(2)当协议字段为0xC021时,PPP帧的信息字段就是PPP链路控制协议LCP的数据。
(3)当协议字段为0x8021时,PPP帧的信息字段就是网络层的控制数据。
1.2 PPP帧的信息字段部分
信息字段的长度是可变的,不超过1500字节。1.3 PPP帧的尾部
尾部中的第一个字段(2个字节)是使用CRC的帧检验序列FCS。尾部中的标志字段F(Flag),规定为0x7E(符号0x表示它后面的字符是用十六进制表示的。十六进制的7E的二进制表示是01111110),标志字段表示一个帧的结束。
注:标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段。如果连续出现两个标志字段,就表示这是一个空帧,应当丢弃。
2. 透明传输的实现方式
当信息字段中出现和标志字段一样的比特(0x7E)组合时,就必须采取一些措施使这种形式上和标志字段一言的比特组合不出现在信息字段中。2.1 字节填充——PPP使用异步传输
当PPP使用异步传输时,它把转移符定义为0x7D,并使用字节填充。RFC1662规定了如下填充方法:
(1)把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)。
(2)若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把转义字符0x7D转变为2字节序列(0x7D,0x5D)。
(3)若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是“传输结束”ETX)就要把它转变为2字节序列的(0x7D,0x31)。
由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数。但接收端在接收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息。
2.2 零比特填充——PPP使用同步传输
当PPP使用同步传输时,使用零比特填充。零比特填充的具体方法:
(1)在发送端先扫描整个信息字段(通常使用硬件实现,但也可以用软件实现,但是会慢一些)。
(2)只要发现有5个连续的1,则立即填入一个0。
(3)接收端在收到一个帧时,先找到标志字段F以确定帧的边界,接着再用硬件对其中的比特流进行扫描,每当发现5个连续1时,就把5个连续1后的一个0删除,以还原成原来的信息比特流。
因此通过这种零比特填充后的数据,就可以保证在信息字段中不会出现连续6个1。
参考文献:
[1]《计算机网络(第5版)》谢希仁——第三章 3.2
相关文章推荐
- 数据库存储过程
- windows操作系统上找不到新建
- 初学HTML 常见的标签(一) 文本标签
- Android滑动优化高仿QQ6.0侧滑菜单(滑动优化)
- 实例讲解如何使用CSS保持页面内容宽高比
- poj_3461 Oulipo(KMP:找出所有模式串)
- 记不住就存下来---- HTML 5 新增常用属性 之 语法相关元素
- lucene各版本jar包下载地址
- EditTextUtil 监听输入字数
- Python类的__getitem__和__setitem__特殊方法
- 二、MongoDB的高级查询(聚合、游标、管道、索引)
- Win10 UWP开发系列:实现Master/Detail布局
- (五)activiti开发的几点思路
- Ubuntu 14.04lts安装vncserver
- ___72___OleDbCommand向Access中插入数据
- 怎样理解阻塞非阻塞与同步异步的区别?
- Git----提交的注意事项及参考资料罗列
- android项目构建过程
- SDK(ios)
- ACM进阶计划