目录
PPP协议位于数据链路层,目前应用最广泛的点到点链路层协议
1、三大组件
- 数据封装方式:定义封装多协议数据包的方法。
- 链路控制协议(LCP):定义建立、协商、和测试数据链路层连接的方法。
- 网络层控制协议(NCP):包含一组协议,用于对不同的网络层协议进行连接建立和参数协商。
数据封装方式定义了如何封装多种类型的上层协议数据包。
PPP定义了链路控制协议LCP,来适应多种多样的链路类型, 。LCP可以自动检测链路环境,如是否存在环路;协商链路参数,如最大数据包长度,使用哪种认证协议等等。与其他数据链路层协议相比, PPP协议的一个重要特点是可以提供认证功能,链路两端可以协商使用何种认证协议并实施认证过程,只有认证成功才会建立连接。这个特点使PPP协议适合运营商用来接入分散的用户。
PPP定义了一组网络层控制协议NCP ,每一个协议对应一 种网络层协议,用于协商网络层地址等参数,例如IPCP用于协商控制IP , IPXCP用于协商控制IPX协议等。
报文结构
PPP报文封装格式
Flag域:标识一个物理帧的起始和结束
Address域:可以唯一标识对端。按照协议规定该字节全填充为全1的广播地址,对PPP协议来说工作在点对点链路,无实际意义
Control域:PPP默认值为03,PPP默认没有序列号和确认来实现可靠传输。Address和Control一起标识此报文为PPP报文,即PPP报文头为FF03
Protocol域:协议域区分PPP数据帧中信息域所承载的数据类型。
另:LCP报文封装格式
Code域
- 代码域的长度为一个字节,主要是用来标识LCP数据报文的类型。
Identifier域
- 标识域为1个字节,用来匹配请求和响应,当标识域值为非法时,该报文将被丢弃。
- 通常一个配置请求报文的ID是从0x01开始逐步加1的。当对端接收到该配置请求报文后,无论使用何种报文回应对方,但必须要求回应报文中的ID要与接收报文中的ID一致。
Length域
- 长度域的值就是该LCP报文的总字节数据。它是代码域、标志域、长度域和数据域四个域长度的总和。
- 长度域所指示字节数之外的字节将被当作填充字节而忽略掉,而且该域的内容不能超过MRU的值。
Data域
- Type为协商选项类型。
- Length为协商选项长度,它是指Data域的总长度,也就是包含Type、Length和Data。
- Data为协商的选项具体内容。
2、建链过程
1.Dead:这是PPP工作开始和结束的阶段。当物理层变为可用状态之后,PPP进入Establish阶段。
2.Establish: PPP在此阶段使用LCP协商链路层参数。如果链路层参数协商不成功, 则PPP连接建立不成功,PPP退回到Dead阶段。如果链路层参数协商成功,则PPP进入Authenticate阶段。
3.Authenticate : PPP在此阶段认证对端, 如果认证失败,则PPP进入Terminate阶段;如果认证成功或者没配置认证,则PPP进入Network阶段。
4.Network : PPP在此阶段使用NCP进行网络层参数协商,协商成功则PPP连接建立成功,开始传输网络层数据包。当上层协议认为应当关闭此连接(例如按需电路)或者管理员手工关闭PPP连接,则PPP进入Terminate阶段。
5.Terminate : PPP在此阶段使用LCP关闭PPP连接。PPP连接关闭后,PPP进入Dead阶段。
注意:此处列出的是PPP的工作阶段,并非PPP的协议状态。由于PPP是由组协议组成的 ,因此PPP本身没有协议状态。只有特定的协议如LCP和NCP等才有协议状态和状态转换(协议状态机)。
3、LCP协议
3.1报文类型
1、链路配置包,用于建链和配置链路:configure-request(匹配请求),configure-ack(匹配确认)表示接受对端发送的参数,configure-NAK(匹配否认)表示发送的参数本地不合法,和configure-reject(匹配拒绝)表示参数本地不能识别。
2、链路结束包:terminate-(终止请求)和terminate-ack(终止确认)。
3、链路维修包:用于管理和调试一个链路,code-reject(代码拒绝),protocol-reject(协议拒绝),Echo-reject(回波请求),Echo-reply(回波应答),discard-request(抛弃请求)
3.2 用于协商的参数
LCP协议主要由于协商两端的参数
最大接收单元(MRU):使用两端最小值;默认1500.
认证协议,常用的认证协议有PAP认证、CHAP认证。一个PPP协议可以使用不同的认证协议认证对方,但是被认证方必须支持认证方使用的认证协议并正确配置。
魔术字:随机产生一个数字,随机产生,两端一致的可能性几乎为0;用于检测环路,如果收到LCP报文中的魔术字与本地相同,则认为有环路,一端支持而另一端不支持,表示链路无环,协商成功;两端都支持则使用检测机制,默认启用。
- 收到一个Configure-Request报文之后,其包含的魔术字需要和本地产生的魔术字做比较,如果不同,表示链路无环路,则使Confugure-Ack报文确认(其他参数也协商成功) ,表示魔术字协商成功。在后续发送的报文中,如果报文含有魔术字字段,则该字段设置为协商成功的魔术字, LCP不再产生新的魔术字。
- 如果收到的Configure-Request报文和自身产生的魔术字相同,则发送一个Configure-Nak报文,携带一个新的魔术字。然后,不管新收到的Configure-Nak报文中是否携带相同的魔术字, LCP都发送一个新的Configure-Request报文 ,携带一个新的魔术字 。 如果链路有环路,则这个过程会不停的持续下去,如果链路没有环路,则报文交互会很快恢复正常。
3.3 LCP协议数据包交互
链路协商成功
如图所示,R1和R2使用串行链路相连,运行PPP。 当物理层链路变为可用状态之后, R1和R2使用LCP协商链路参数。本例中,R1首先发送一个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上的链路参数配置是不是可接受的。
链路协商不成功
- 当R2收到R1发送的Configure-Request报文之后,如果R2能识别此报文中携带的所有链路层参数,但是认为部分或全部参数的取值不能接受,即参数的取值协商不成功,则R2需要向R1回应一个Configure-Nak报文。
- 在这个Configure-Nak报文中,只包含不能接受的那部分链路层参数列表,每一个包含在此报文中链路层参数的取值均被修改为此报文的发送者( R2 )上可以接受的取值(或取值范围)。
- 在收到Configure-Nak报文之后, R1需要根据此报文中的链路层参数重新选择本地使用的相关参数,并重新发送一个Configure-Request,连续五次协商仍然不成功的参数将被禁用,不再继续协商。
链路协商参数不能识别
- 当R2收到R1发送的Configure-Request报文之后,如果R2不能识别此报文中携带的部分或全部链路层参数,则R2需要向R1回应一个Configure-Reject报文。
- 在此Configure-Reject报文中,只包含不被识别的那部分链路层参数列表。
- 在收到Configure-Reject报文之后, R1需要向R2重新发送一个Configure-Request报文,在新的Configure- Request报文中,不再包含不被对端( R2 )识别的参数。
检测链路状态
LCP建立连接之后,可以使用Echo-Request报文和Echo-Reply报文检测链路状态,收到一个Echo-Request报文之后应当回应一个Echo-Reply报文,表示链路状态正常。
连接关闭
- 认证不成功或者管理员手工关闭等原因可以使LCP关闭已经建立的连接。
- LCP关闭连接使用Terminate-Request报文和Terminate-Ack报文, Terminate-Request报文用于请求对端关闭连接, 一旦收到一个Terminate-Request报文, LCP必须回应一个Terminate-Ack报文确认连接关闭。
- 在没有收到Terminate-Ack报文的情况下,每隔3秒重传一次Terminate-Request报文,连续两次重传没有收到Terminate-Ack报文,则认为对端不可用,连接关闭。
4、认证协议
4.1 PAP认证
报文类型
PAP报文直接封装在PPP报文中
工作原理
被认证方将配置用户名和密码信息使用Authenticate-Request报文以明文方式发送给认证方,认证方收到信息,根据本地用户配置和密码数据库检查用户名和密码信息是否正确,如正确返回Authenticate- Ack,认证成功,不正确返回Authenticate-Nak,表示认证失败。
4.2 CHAP认证
报文类型
注:使用Challenge对密码做加密运算的算法为MD5{ Identifier +密码+ Challenge },意思是将Identifier、密码和Challenge三部分连成一个字符串整体,然后对此字符串做MD5运算,得到一个16字节长的摘要信息,在Response报文中Data字段包含的加密运算之后的密码信息就是此摘要信息。
过程认证需要三次报文的交互,为了匹配请求和回应报文,报文中含有Identifier字段,一次认证过程所使用的报文均使用相同的Identity信息。CHAP分为两种情况:验证方是否配置了用户名。推荐使用验证方配置用户名的方式,这样可以对验证方的用户名进行验证。
(1)验证方配置了用户名的验证过程(即接口配置命令ppp chap user username )
- 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文 ( Challenge ) , 并同时将本端的用户名附带上一起发送给被验证方。
- 被验证方接到验证方的验证请求后,先检查本端接口上是否配置了ppp chap password命令,如果配置了该命令,则被验证方将生成的密文( ( Identifier +密码+随机数)的MD5 )和自己的用户名发回验证方( Response)。如果接口上未配置ppp chap password命令,则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,将密文( ( Identifier +密码+随机数)的MD5 )和被验证方自己的用户名发回验证方(Response)。
- 验证方将自己本身保存的密码、Identifier和随机数进行MD5算法 ,和收到respone中的密文进行比较,以验证认证是否正确。
(2)验证方没有配置用户名(即接口没有配置命令ppp chap user username )
- 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文 ( Challenge )。
- 被验证方接到验证方的验证请求后,利用Identifier、ppp chap password命令配置的CHAP密码和随机数进行MD5算法,将生成的密文和自己的用户名发回验证方( Response )。
- 验证方将自己本身保存的密码、Identifier和随机数进行MD5算法 ,和收到respone中的密文进行比较,以验证认证是否正确。
5、NCP协议
5.1 IPCP静态协商IP地址
(1)IPCP用于协商控制IP参数,使PPP可用于传输IP数据包。
(2)IPCP使用和LCP相同的协商机制、报文类型,但IPCP并非调用LCP ,只是工作过程、报文等和LCP相同。两端配置的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地址。
5.2 IPCP动态协商IP地址
如图所示, 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报文。
6、MP基本原理
MP基本原理
- 增加带宽,将多个PPP链路捆绑使用。
MP方式下链路协商过程
- LCP阶段,也需验证对端接口是否工作在MP方式下。
- NCP阶段,根据MP-Group接口或指定虚拟接口模板的各项NCP参数(如IP地址等)进行NCP协商。
实现方式
- 虚拟接口模板方式。
- MP-Group方式。
注:MultiLink PPP 允许将报文分片,分片将从多个点到点链路传送到目的地