前言
正文
一、PPP
PPP协议是一种点到点链路层协议,主要用于在全双工的同异步链路上进行点到点的数据传输。
1 PPP基本概念
1.1 PPP协议簇
- 点到点链路层协议
- 三个协议族
- 链路控制协议族LCP
- 链路控制协议族(Link Control Protocol),主要用来建立、拆除和监控PPP数据链路。LCP可以自动检测链路环境,如是否存在环路;协商链路参数,如最大数据包长度,使用何种认证协议等等。与其他数据链路层协议相比,PPP协议的一个重要特点是可以提供认证功能,链路两端可以协商使用何种认证协议并实施认证过程,只有认证成功才会建立连接。这个特点使PPP协议很适合被运营商用来接入分散的用户。
- 网络层控制协议族NCP
- 网络层控制协议族(Network Control Protocol),主要用来协商在该数据链路上所传输的数据包的格式与类型。例如IPCP用于协商控制IP,IPXCP用于协商控制IPX协议等。
- 认证协议族CHAP和PAP
- PPP提供了用于网络安全方面的验证协议族(PAP和CHAP)。
1.2 PPP报文结构
PPP报文封转格式
- Flag域
- Flag域标识一个物理帧的起始和结束,该字节为二进制序列01111110 (0x7E)。
- Address域
- Address域可以唯一标识对端。PPP协议是被运用在点对点的链路上,因此,使用PPP协议互连的两个通信设备无须知道对方的数据链路层地址。按照协议的规定将该字节填充为全1的广播地址,对于PPP协议来说,该字段无实际意义。
- Control域
- 该字段默认值为00000011(0x03),表明为无序号帧,PPP默认没有采用序列号和确认号来实现可靠传输。
- Address和Control域一起标识此报文为PPP报文,即PPP报文头为FF03。
- Protocol域
- 协议域可用来区分PPP数据帧中信息域所承载的数据报类型。典型的字段值有:0XC021代表LCP报文,0XC023代表PAP报文,0XC223代表CHAP报文。
- Information域
- 信息字段包含协议字段中指定协议的数据包。数据字段的默认最大长度(不包括协议字段)称为最大接收单元MRU(Maximum Receive Unit),MRU的缺省值为1500字节。
LCP报文封装格式
- Code域
- 代码域的长度为一个字节,主要是用来标识LCP数据报文的类型。1.典型的报文类型有:配置信息报文(Configure Packets: 0x01),配置成功信息报文(Configure-Ack: 0X02),终止请求报文(Terminate-Request:0X05)。
- Identifier域
- 标识域为1个字节,用来匹配请求和响应,当标识域值为非法时,该报文将被丢弃。
- 通常一个配置请求报文的ID是从0x01开始逐步加1的。当对端接收到该配置请求报文后,无论使用何种报文回应对方,但必须要求回应报文中的ID要与接收报文中的ID一致。
- Length域
- 长度域的值就是该LCP报文的总字节数据。它是代码域、标志域、长度域和数据域四个域长度的总和。
- 长度域所指示字节数之外的字节将被当作填充字节而忽略掉,而且该域的内容不能超过MRU的值。
- Data域
- 4.承载各种TLV(Type/Length/Value)参数用于协商配置选项,包括最大接收单元,认证协议等等。
- Type为协商选项类型。
- Length为协商选项长度,它是指Data域的总长度,也就是包含Type、Length和Data。
- Data为协商的选项具体内容。
1.3 PPP建链过程
- 建链过程
- Dead:这是PPP工作开始和结束的阶段。当物理层变为可用状态(UP)之后,PPP进入Establish阶段。
- Establish:PPP在此阶段使用LCP协商链路层参数。如果链路层参数协商不成功(FAIL),则PPP连接建立不成功,PPP退回到Dead阶段。如果链路层参数协商成功(OPENED),则PPP进入Authenticate阶段。
- Authenticate:PPP在此阶段认证对端,如果认证失败(FAIL),则PPP进入Terminate阶段;如果认证成功(SUCCESS)或者没配置认证(NONE),则PPP进入Network阶段。
- Network:PPP在此阶段使用NCP进行网络层参数协商,协商成功则PPP连接建立成功,开始传输网络层数据包。当上层协议认为应当关闭此连接(例如按需电路)或者管理员手工关闭PPP连接(CLOSING),则PPP进入Terminate阶段。
- Terminate:PPP在此阶段使用LCP关闭PPP连接。PPP连接关闭(Down)后,PPP进入Dead阶段。
注意:此处列出的是PPP的工作阶段,并非PPP的协议状态。由于PPP是由一组协议组成的,因此PPP本身没有协议状态。只有特定的的协议如LCP和NCP等才有协议状态和状态转换(协议状态机)。
2 LCP协议
2.1 LCP报文类型
报文类型 | 功能描述 |
---|---|
Configure-Request | 包含发送者试图使用的、没有使用默认值的参数列表 |
Configure-Ack | 表示完全接受对端发送的Configure-Request的参数取值 |
Configure-Nak | 表示对端发送的Configure-Request中的参数取值在本地不合法 |
Configure-Reject | 表示对端发送的Configure-Request中的参数本地不能识别 |
- LCP协议有3大类报文:
- 链路配置包,用于建立和配置链路:Configure-Request(匹配请求),Configure-Ack(匹配确认),Configure-Nak(匹配否认),和Configure-Reject(匹配拒绝)。
- 链路结束包,用于结束一个链路:Terminate-Request(终止请求) 和 Terminate-Ack(终止确认)。
- 链路维修包,用于管理和调试一个链路:Code-Reject(代码拒绝), Protocol-Reject(协议拒绝), Echo-Request(回波请求), Echo-Reply(回波应答), 和 Discard-Request(抛弃请求)。
2.2 LCP用于协商的参数
- 在VRP平台上,MRU参数使用接口上配置的最大传输单元(MTU)值来表示的。
- 常用的PPP认证协议有PAP和CHAP(后续章节介绍),一条PPP链路的两端可以使用不同的认证协议认证对端,但是被认证方必须支持认证方使用的认证协议并正确配置用户名和密码等认证信息。
- LCP使用魔术字(Magic-Number)检测链路环路和其它异常情况。魔术字为随机产生的一个数字,随机机制需要保证两端产生相同魔术字的可能性几乎为0。
- 收到一个Configure-Reques