PPP协议0x7d用作转义字符时的过程
2018-09-12 20:08阅读:
from:https://blog.csdn.net/weixin_36678772/article/details/78475493
ACCM(Async-Control-Character-Map
异步控制字符映射)选项是在异步链路上用来通知对端哪些字符被本端用于控制,必须被转义(映射)。
PPP帧中FLAG字段的值是0X7E(实际上大多链路层协议帧中FLAG字段都是这个值)。当这个值出现在帧内容中时需对它进行转义,同步链路中,这个过程是通过位比特填充的技术完成的(即在第5个1与第6个1之间填充0)。异步链路中,特殊字符0X7D被用做转义字符,对一些字符进行转义。由于异步链路中,有些串行接口驱动程序或MODEM需要用一些字符作为控制字符使用,字符的范围是0X00-0X1F(
0-31)所以需要对这些字符进行转义处理,大多数情况下并不是这个范围内的所有字符都作为控制字符,因此PPP
LCP提供这个选项用来告诉对端,本端将哪些字符作为控制字符处理,请对端将这些字符转义后发送。
ACCM选项用一个32位整数的位的值来表示哪些字符用作控制字符,譬如0X000A0000,第17位与第19位为1,说明字符17(XON)与字符19(XOFF)作为控制字符使用,需要进行转义。
在异步链路上,尤其是低带宽、高时延的异步线路(例如无线)上合理设置ACCM值可以有效避免在数据传输过程中引入额外时延。
异步链路上的LCP协商,这个选项是必要选项,必须协商成功。
from:https://blog.csdn.net/shenwansangz/article/details/61615040
PPP协议是在ATM网络里常用的链路协议,基于PPP协议的PPPoA,PPPoE在xDSL调制解调器中不可或缺。本文简单描述PPP协议的帧封装格式,并给出了一个简单的PPP编码与解码算法,以期望能对需要者有所帮助。
二、PPP协议简介
PPP数据帧的格式看上去很像ISO的HDLC(高层数据链路控制)标准。如图是PPP数据
帧的格式。
每一帧都以标志字符0x7e开始和结束。紧接着是一个地址字节,值始终是0xff,然后是一
个值为0x03的控制字节。
接下来是协议字段,类似于以太网中类型字段的功能。当它的值为0x0021时,表示信息
字段是一个IP数据报;值为0xc021时,表示信息字段是链路控制数据;值为0x8021时,表示
信息字段是网络控制数据。
CRC字段(或FCS,帧检验序列)是一个循环冗余检验码,以检测数据帧中的错误。
由于标志字符的值是0x7e,因此当该字符出现在信息字段中时, PPP需要对它进行转义。
在同步链路中,该过程是通过一种称作比特填充(bit stuffing )的硬件技术来完成的[
Tanenbaum
1989 ]。在异步链路中,特殊字符0x7d用作转义字符。当它出现在PPP数据帧中时,那么紧接
着的字符的第6个比特要取其补码,具体实现过程如下:
1) 当遇到字符0x7e时,需连续传送两个字符:
0x7d和0x5e,以实现标志字符的转义。
2) 当遇到转义字符0x7d时,需连续传送两个字符:
0x7d和0x5d,以实现转义字符的转义。
3 )
默认情况下,如果字符的值小于0x20(比如,一个ASCII控制字符),一般都要进行转
义。例如,遇到字符0x01时需连续传送0x7d和0x21两个字符,并且要将该字符减去0X20进行的结果(这时,第6个比特取补码后变为
1,而前面两种情况均把它变为0)。
这样做的原因是防止它们出现在双方主机的串行接口驱动程序或调制解调器中,因为有
时它们会把这些控制字符解释成特殊的含义。另一种可能是用链路控制协议来指定是否需要
对这32个字符中的某一些值进行转义。默认情况下是对所有的32个字符都进行转义