介绍PPP特性的定义和目的。
定义
PPP(Point-to-Point Protocol)协议是一种点到点链路层协议,主要用于在全双工的同异步链路上进行点到点的数据传输。
目的
PPP协议是在串行线IP协议SLIP(Serial Line Internet Protocol)的基础上发展起来的。由于SLIP协议具有只支持异步传输方式、无协商过程(尤其不能协商如双方IP地址等网络层属性)、只能承载IP一种网络层报文等缺陷,在发展过程中,逐步被PPP协议所替代。
PPP协议有如下优点:
- 对物理层而言,PPP既支持同步链路又支持异步链路,而X.25、FR(Frame Relay)等数据链路层协议仅支持同步链路,SLIP仅支持异步链路。
- PPP协议具有良好的扩展性,例如,当需要在以太网链路上承载PPP协议时,PPP可以扩展为PPPoE。
- 提供LCP(Link Control Protocol)协议,用于各种链路层参数的协商。
- 提供各种NCP(Network Control Protocol)协议(如IPCP、IPXCP),用于各网络层参数的协商,更好地支持了网络层协议。
- 提供认证协议CHAP(Challenge-Handshake Authentication Protocol)、PAP(Password Authentication Protocol),更好的保证了网络的安全性。
- 无重传机制,网络开销小,速度快。
PPP报文格式
PPP的基本构架
PPP协议处于TCP/IP协议栈的数据链路层,主要用在支持全双工的同异步链路上,进行点到点之间的数据传输。
图1 PPP在协议栈中的位置
PPP主要由三类协议族组成:
-
链路控制协议族(Link Control Protocol),主要用来建立、拆除和监控PPP数据链路。
-
网络层控制协议族(Network Control Protocol),主要用来协商在该数据链路上所传输的数据包的格式与类型。
-
扩展协议族CHAP(Challenge-Handshake Authentication Protocol)和PAP(Password Authentication Protocol),主要用于网络安全方面的验证。
PPP报文封装的帧格式
PPP报文封装格式如图2所示。
各字段的含义如下:
-
Flag域
Flag域标识一个物理帧的起始和结束,该字节为0x7E。
-
Address域
Address域可以唯一标识对端。PPP协议是被运用在点对点的链路上,因此,使用PPP协议互连的两个通信设备无须知道对方的数据链路层地址。按照协议的规定将该字节填充为全1的广播地址,对于PPP协议来说,该字段无实际意义。
-
Control域
该字段默认值为0x03,表明为无序号帧,PPP默认没有采用序列号和确认应答来实现可靠传输。
Address和Control域一起标识此报文为PPP报文,即PPP报文头为FF03。
-
Protocol域
Protocol域可用来区分PPP数据帧中信息域所承载的数据包类型。
Protocol域的内容必须依据ISO 3309的地址扩展机制所给出的规定。该机制规定协议域所填充的内容必须为奇数,也就是要求最低有效字节的最低有效位为“1”。
如果当发送端发送的PPP数据帧的协议域字段不符合上述规定,接收端则会认为此数据帧是不可识别的。接收端向发送端发送一个Protocol-Reject报文,在该报文尾部将填充被拒绝报文的协议号。
表1 常见的协议代码 协议代码
协议类型
0021
Internet Protocol
002b
Novell IPX
002d
Van Jacobson Compressed TCP/IP
002f
Van Jacobson Uncompressed TCP/IP
8021
Internet Protocol Control Protocol
802b
Novell IPX Control Protocol
8031
Bridging NC
C021
Link Control Protocol
C023
Password Authentication Protocol
C223
Challenge Handshake Authentication Protocol
-
Information域
Information域最大长度是1500字节,其中包括填充域的内容。Information域的最大长度称为最大接收单元MRU(Maximum Receive Unit)。MRU的缺省值为1500字节,在实际应用当中可根据实际需要进行MRU的协商。
如果Information域长度不足,可被填充,但不是必须的。如果填充则需通信双方的两端能辨认出填充信息和真正需要传送的信息,方可正常通信。
-
FCS域
FCS域的功能主要对PPP数据帧传输的正确性进行检测。
在数据帧中引入了一些传输的保证机制,会引入更多的开销,这样可能会增加应用层交互的延迟。
LCP报文封装的帧格式
LCP报文封装格式请参见图2。
在链路建立阶段,PPP协议通过LCP报文进行链路的建立和协商。此时LCP报文作为PPP的净载荷被封装在PPP数据帧的Information域中,PPP数据帧的协议域的值固定填充0xC021。
在链路建立阶段的整个过程中信息域的内容是变化的,它包括很多种类型的报文,所以这些报文也要通过相应的字段来区分。
-
Code域
Code域的长度为一个字节,主要是用来标识LCP数据报文的类型。
在链路建立阶段,接收方接收到LCP数据报文。当其Code域的值无效时,就会向对端发送一个LCP的代码拒绝报文(Code-Reject报文)。
表2 常见code值 code值
报文类型
0x01
Configure-Request
0x02
Configure-Ack
0x03
Configure-Nak
0x04
Configure-Reject
0x05
Terminate-Request
0x06
Terminate-Ack
0x07
Code-Reject
0x08
Protocol-Reject
0x09
Echo-Request
0x0A
Echo-Reply
0x0B
Discard-Request
0x0C
Reserved
-
Identifier域
Identifier域为1个字节,用来匹配请求和响应,当Identifier域值为非法时,该报文将被丢弃。
通常一个配置请求报文的ID是从0x01开始逐步加1的。当对端接收到该配置请求报文后,无论使用何种报文回应对方,但必须要求回应报文中的ID要与接收报文中的ID一致。
-
Length域
Length域的值就是该LCP报文的总字节数据。它是Code域、Identifier域、Length域和Data域四个域长度的总和。
Length域所指示字节数之外的字节将被当作填充字节而忽略掉,而且该域的内容不能超过MRU的值。
-
Data域
Data域所包含的是协商报文的内容,这个内容包含以下字段。
-
Type为协商选项类型。
-
Length为协商选项长度,它是指Data域的总长度,也就是包含Type、Length和Data。
-
Data为协商选项的详细信息。
表3 常见Type中的协商类型值 协商类型值
协商报文类型
0x01
Maximum-Receive-Unit
0x02
Async-Control-Character-Map
0x03
Authentication-Protocol
0x04
Quality-Protocol
0x05
Magic-Number
0x06
RESERVED
0x07
Protocol-Field-Compression
0x08
Address-and-Control-Field-Compression
-