https://blog.csdn.net/cainv89/article/details/50614218
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帧的信息字段部分
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。
--将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列 (0x7D, 0x5E)
--若信息字段中出现一个 0x7D 的字节, 则将其变成为 2 字节序列 (0x7D, 0x5D)
--若信息字段中出现 ASCII 码的(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变
阅读(5384) | 评论(0) | 转发(0) |