点对点协议PPP
点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。
PPP协议是因特网工程任务组IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]。
用户连接到ISP就是通过PPP协议。
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成:
-
对各种协议数据报的封装方法(封装成帧)
-
链路控制协议LCP,用于建立、配置以及测试数据链路的连接
-
一套网络控制协议NCPs,其中的每一个协议支持不同的网络层协议
帧格式
标志(Flag)字段: PPP帧的定界符,取值为0x7E
地址(Address)字段:取值为OxFF,预留(目前没有什么作用)
控制(Control)字段:取值为Ox03,预留(目前没有什么作用)
协议(Protocol)字段:指明帧的数据部分送交哪个协议处理
-
取值Ox0021表示:帧的数据部分为IP数据报
-
取值OxC021表示:帧的数据部分为LCP分组
-
取值0x8021表示:帧的数据部分为NCP分组
帧检验序列(Frame Check Sequence)字段:CRC计算出的校验位
透明传输
面向字节的异步链路采用插入转义字符的字节填充法
发送方的处理:
-
出现的每一个7E(PPP帧的定界符)字节转变成2字节序列(7D,5E)。
-
出现的每一个7D(转义字符)字节转变成2字节序列(7D,5D)。
-
出现的每一个ASCII码控制字符(数值小于0x20的字符),则在该字符前面插入一个7D字节,同时将该字符的编码加上0x20。
接收方的处理:进行反变换即可恢复出原来的帧的数据部分。
面向比特的同步链路采用插入比特0的比特填充法
发送方的处理:
对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0。
接收方的处理:
对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除。
差错检测
RFC 1662的附录部分给出了FCS的计算方法的C语言实现(查表法)
接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务。
工作状态
PPP链路的两端互相交换网络层特定的NCP分组。
如果在PPP链路上运行的是IP,则使用IP控制协议IPCP来对PPP链路的每一端配置P模块(如分配IP地址)。