1.什么是PPP
PPP协议是在串行线IP协议SLIP(Serial Line Internet Protocol)的基础上发展起来的。由于SLIP协议具有只支持异步传输方式、无协商过程(尤其不能协商如双方IP地址等网络层属性)、只能承载IP一种网络层报文等缺陷,在发展过程中,逐步被PPP协议所替代。
2.优点
对物理层而言,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),更好的保证了网络的安全性。
无重传机制,网络开销小,速度快。
3.协议族组成
链路控制协议族(Link Control Protocol),主要用来建立、拆除和监控PPP数据链路。
网络层控制协议族(Network Control Protocol),主要用来协商在该数据链路上所传输的数据包的格式与类型。
扩展协议族CHAP(Challenge-Handshake Authentication Protocol)和PAP(Password Authentication Protocol),主要用于网络安全方面的验证。
4.PPP帧格式
4.1.Flag域
Flag域标识一个物理帧的起始和结束,该字节为0x7E。
4.2.Address域
Address域可以唯一标识对端。PPP协议是被运用在点对点的链路上,因此,使用PPP协议互连的两个通信设备无须知道对方的数据链路层地址。按照协议的规定将该字节填充为全1的广播地址,对于PPP协议来说,该字段无实际意义。
4.3.Control域
该字段默认值为0x03,表明为无序号帧,PPP默认没有采用序列号和确认应答来实现可靠传输。
Address和Control域一起标识此报文为PPP报文,即PPP报文头为FF03。
4.4.Protocol域
Protocol域可用来区分PPP数据帧中信息域所承载的数据包类型。
4.5.Information域
Information域最大长度是1500字节,其中包括填充域的内容。Information域的最大长度称为最大接收单元MRU。MRU的缺省值为1500字节,在实际应用当中可根据实际需要进行MRU的协商。
如果Information域长度不足,可被填充,但不是必须的。如果填充则需通信双方的两端能辨认出填充信息和真正需要传送的信息,方可正常通信。
4.6.FCS域
FCS域的功能主要对PPP数据帧传输的正确性进行检测。
在数据帧中引入了一些传输的保证机制,会引入更多的开销,这样可能会增加应用层交互的延迟。
4.7.PPP建链过程
1)通信双方开始建立PPP链路时,先进入到Establish阶段。
2)在Establish阶段,PPP链路进行LCP协商。协商内容包括工作方式是SP(Single-link PPP)还是MP(Multilink PPP)、最大接收单元MRU(Maximum Receive Unit)、验证方式和魔术字(magic number)等选项。LCP协商成功后进入Opened状态,表示底层链路已经建立。
3)如果配置了验证,将进入Authenticate阶段,开始CHAP或PAP验证。如果没有配置验证,则直接进入Network阶段。
4)在Authenticate阶段,如果验证失败,进入Terminate阶段,拆除链路,LCP状态转为Down。如果验证成功,进入Network阶段,此时LCP状态仍为Opened。
5)在Network阶段,PPP链路进行NCP协商。通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。只有相应的网络层协议协商成功后,该网络层协议才可以通过这条PPP链路发送报文。
NCP协商包括IPCP(IP Control Protocol)、MPLSCP(MPLS Control Protocol)等协商。IPCP协商内容主要包括双方的IP地址。
6)NCP协商成功后,PPP链路将一直保持通信。PPP运行过程中,可以随时中断连接,物理链路断开、认证失败、超时定时器时间到、管理员通过配置关闭连接等动作都可能导致链路进入Terminate阶段。
7)在Terminate阶段,如果所有的资源都被释放,通信双方将回到Dead阶段,直到通信双方重新建立PPP连接,开始新的PPP链路建立。
5.LCP协商过程
5.1.LCP报文类型
用于建立和配置链路:Configure-Request,Configure-Ack,Configure-Nak,和Configure-Reject。
1)链路结束包
用于结束一个链路:Terminate-Request和 Terminate-Ack。
2)链路维修包
用于管理和调试一个链路:Code-Reject, Protocol-Reject, Echo-Request, Echo-Reply, 和 Discard-Request。
5.2.参数协商
1)链路协商成功
R1和R2使用串行链路相连,运行PPP。当物理层链路变为可用状态之后,R1和R2使用LCP协商链路参数。
R1向R2发送Configure-Request报文,此报文包含在发送者(R1)上配置的链路层参数,每个链路层参数使用“类型,长度,取值”的结构表示。
当R2收到此Configure-Request报文之后,如果R2能识别此报文中的所有链路层参数,并且认为每个参数的取值都是可以接受的,则向R1回应一个Configure-Ack报文。
在没有收到Configure-Ack报文的情况下,每隔3秒重传一次Configure-Request报文,如果连续10次发送Configure-Request报文仍然没有收到Configure-Ack报文,则认为对端不可用,停止发送Configure-Request报文。
注:完成上述过程仅表明R2认为R1上的链路参数配置是可接受的。R2也需要向R1发送Configure-Request报文,使R1检测R2上的参数配置是不是可接受的。
2)链路协商参数不成功
当R2收到R1发送的Configure-Request报文之后,如果R2能识别此报文中携带的所有链路层参数,但是认为部分或全部参数的取值不能接受,即参数的取值协商不成功,则R2需要向R1回应一个Configure-Nak报文。
在这个Configure-Nak报文中,只包含不能接受的那部分链路层参数列表,每一个包含在此报文中链路层参数的取值均被修改为此报文的发送者(R2)上可以接受的取值(或取值范围)。
在收到Configure-Nak报文之后,R1需要根据此报文中的链路层参数重新选择本地使用的相关参数,并重新发送一个Configure-Request。
连续五次协商仍然不成功的参数将被禁用,不再继续协商。
3)链路参数协商参数不能识别
当R2收到R1发送的Configure-Request报文之后,如果R2不能识别此报文中携带的部分或全部链路层参数,则R2需要向R1回应一个Configure-Reject报文。
在此Configure-Reject报文中,只包含不被识别的那部分链路层参数列表。
在收到Configure-Reject报文之后,R1需要向R2重新发送一个Configure-Request报文,在新的Configure-Request报文中,不再包含不被对端(R2)识别的参数。
4)链路状态检测
LCP建立连接之后,可以使用Echo-Request报文和Echo-Reply报文检测链路状态,收到一个Echo-Request报文之后应当回应一个Echo-Reply报文,表示链路状态正常。
VRP平台默认每隔10秒发送一次Echo-Request报文。
5)连接关闭
认证不成功或者管理员手工关闭等原因可以使LCP关闭已经建立的连接。
LCP关闭连接使用Terminate-Request报文和Terminate-Ack报文,Terminate-Request报文用于请求对端关闭连接,一旦收到一个Terminate-Request报文,LCP必须回应一个Terminate-Ack报文确认连接关闭。
在没有收到Terminate-Ack报文的情况下,每隔3秒重传一次Terminate-Request报文,连续两次重传没有收到Terminate-Ack报文,则认为对端不可用,连接关闭。
6.认证过程
6.1.PAP
工作原理
被认证方将配置的用户名和密码信息使用Authenticate-Request报文以明文方式发送给认证方,如图,用户名为“huawei”,密码为“hello”;
认证方收到被认证方发送的用户名和密码信息之后,根据本地配置的用户名和密码数据库检查用户名和密码信息是否正确匹配,如果正确,则返回Authenticate-Ack报文,表示认证成功,如果不能正确匹配,则返回Authenticate-Nak报文,表示认证失败。
6.2.CHAP
报文
使用Challenge对密码做加密运算的算法为MD5{ Identifier+密码+Challenge },意思是将Identifier、密码和Challenge三部分连成一个字符串整体,然后对此字符串做MD5运算,得到一个16字节长的摘要信息,在Response报文中Data字段包含的加密运算之后的密码信息就是此摘要信息。
工作原理
CHAP的认证过程需要三次报文的交互。为了匹配请求报文和回应报文,报文中含有Identifier字段,一次认证过程所使用的报文均使用相同的Identifier信息。CHAP单向验证过程分为两种情况:验证方配置了用户名和验证方没有配置用户名。推荐使用验证方配置用户名的方式,这样可以对验证方的用户名进行确认。
验证方配置了用户名的验证过程(即接口配置命令ppp chap user username):
验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge),并同时将本端的用户名附带上一起发送给被验证方。
被验证方接到验证方的验证请求后,先检查本端接口上是否配置了ppp chap password命令,如果配置了该命令,则被验证方将生成的密文((Identifier+密码+随机数)的MD5)和自己的用户名发回验证方(Response)。如果接口上未配置ppp chap password命令,则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,将密文((Identifier+密码+随机数)的MD5)和被验证方自己的用户名发回验证方(Response)。
验证方将自己本身保存的密码、Identifier和随机数进行MD5算法,和收到respone中的密文进行比较,以验证认证是否正确。
验证方没有配置用户名(即接口没有配置命令ppp chap user username):
验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge)。
被验证方接到验证方的验证请求后,利用Identifier、ppp chap password命令配置的CHAP密码和随机数进行MD5算法,将生成的密文和自己的用户名发回验证方(Response)。
验证方将自己本身保存的密码、Identifier和随机数进行MD5算法,和收到respone中的密文进行比较,以验证认证是否正确。
7.NCP协商过程
IPCP,用于协商控制IP参数,使PPP可用于传输IP数据包。
IPCP使用和LCP相同的协商机制、报文类型,但IPCP并非调用LCP,只是工作过程、报文等和LCP相同。
PPP链路不封装MAC地址,因此不需要ARP,所以也就不要求两端地址在同一网段。
IPCP静态协商
两端配置的IP地址分别为12.1.1.1/24和12.1.1.2/24(两端IP地址即使不在同一网段也会通过IPCP协商)。
两端静态配置IP地址的时候协商过程如下:
R1和R2都要发送Configure-Request报文,在此报文中包含本地配置的IP地址。
R1和R2接收到对端的Configure-Request报文之后,检查其中的IP地址,如果IP地址是一个合法的单播IP地址,而且和本地配置的IP地址不同(没有IP冲突),则认为对端可以使用该地址,回应一个Configure-Ack报文。
通过IPCP发送的信息,PPP链路的两端都可以知道对端使用的32位IP地址。
8.IPCP动态协商
如图,R1配置为请求对端分配IP地址,R2配置静态IP地址12.1.1.2/24,并且启用R2给对端分配IP地址的能力,给R1分配IP地址12.1.1.1。
两端动态协商IP地址的过程如下:
R1向R2发送一个Configure-Request报文,此报文中含有IP地址0.0.0.0,一个含有0.0.0.0的IP地址的Configure-Request报文表示向对端请求IP地址;
R2收到上述Configure-Request报文后,认为其中包含的地址(0.0.0.0)不合法,使用Configure-Nak回应一个新的IP地址12.1.1.1;
R1收到此Configure-Nak报文之后,更新本地IP地址,并重新发送一个Configure-Request报文,包含新的IP地址12.1.1.1;
R2收到Configure-Request报文后,认为其中包含的IP地址为合法地址,回应一个Configure-Ack报文;
同时,R2也要向R1发送Configure-Request报文请求使用地址12.1.1.2,R1认为此地址合法,回应Configure-Ack报文。
9.MP
定义
MP(MultiLink PPP)是出于增加带宽和可靠性的考虑,将多个PPP链路捆绑使用的技术。
作用
增加带宽、负载分担、链路备份、利用分片降低时延
实现方式
虚拟接口模板方式。
MP-Group方式。
区别
9.1.Establish阶段
两端进行LCP协商时,除了协商一般LCP参数外,还要检查对端接口是否也工作在MP方式下。如果两端工作方式不同,LCP协商将不成功。LCP协议Up后,有验证的话进入Authenticate阶段,验证通过后进入Network阶段;没有验证的话直接进入Network阶段。
9.2.Authenticate阶段
无论是VT接口还是MP-Group接口都不支持验证,只能在物理接口下进行验证配置。
9.3.Network阶段
开始根据相应捆绑方式寻找对应MP Bundle,MP Bundle找不到时,开始创建一个新的MP Bundle(对应一个MP链路);如果找到MP Bundle,则该通道绑定到这个MP Bundle。然后在这个MP Bundle上进行IPCP协商,IPCP协商通过后,则MP链路便可以正式使用,在上面传送IP报文。