目录
PPP是一种典型的串行链路协议,主要用在全双工的同步或异步链路上进行点到点的数据传输。
一、PPP组件
1.基本介绍
PPP是在SLIP(串行线路因特网协议)的基础上发展起来的,SLIP由于存在仅支持异步传输、五协商过程,且只支持IP这一种网络协议等缺点, 因此在发展过程中逐步被PPP替代。
2.PPP优势
(1)同时支持同步和异步传输方式。
(2)支持多种网络层协议,除IP外,还支持IPX(因特网包交换协议)、Appletalk协议。
(3)支持链路层的网络层参数协商,特别是IP地址协商。
(4)具有很好的扩展性。
(5)网络开销小(帧头小),速度快,但无重传机制。
3.PPP的3类子协议
(1)LCP(链路控制协议)
主要用来建立、拆除和监控PPP数据链路。LCP可以自动检测链路环境,如检测是否存在环路;协商链路参数,如最大数据包长度、使用何种认证协议等。
(2)NCP(网络层控制协议)
用于各网络层参数的协商,更好地支持多种网络层协议,PPP定义了一组NCP,每个NCP对应了一种网络层协议,用于协商网络层地址等参数,列入IPCP(网际控制协议)用于协商控制IP,IPXCP用于协商控制IPX协议等。
(3)CHAP(质询握手认证协议)和PAP(密码认证协议)
用于网络安全方面的认证
二、PPP帧格式
1.Flag(标志)
1字节,标识一个PPP帧的起始和结束,该字节固定值为01111110,与HDLC帧和Flag字段的作用和取值一样
2.Address(地址)
1个字节,目的链路层地址,可以唯一标识对端,但因为PPP对应的是点对点链路,使用PPP的两个通信设备在连接时无须知道对方的链路层地址,所以将该字节填充全为1的广播地址。对于PPP来说,该字段无实际意义。
3.Control(控制)
1个字节,默认值0x03,表明是无序号帧,因为PPP默认没有采用序列号和确认进行应答,也没有重传机制来实现可靠传输。
4.Protocol(协议)
1或2个字节,标识上层协议类型(不一定是网络层协议),可来区分PPP数据帧中Information字段所承载的数据包类型。PPP帧可承载的上层协议信息的类型及代码:
协议代码 | 协议类型 |
0021 | IPV4协议 |
002b | IPX |
002d | 压缩版TCP/IP |
002f | 非压缩版TCP/IP |
8021 | IPCP |
802b | IPXCP |
C021 | LCP |
C023 | PAP |
C223 | CHAP |
5.Information(信息)
可变长,包括填充的内容,最大长度是1500字节,Information字段的最大长度称为MRU(最大接受单元),默认值为1500字节。在实际应用中可根据实际需要进行MRU的协商。
若information字段长度不足,可被填充,但不是必须的,若填充则需要通信双方的两端能辨认处填充信息和真正需要传送的信息,方可正常通信。
6.FCS(帧校验序列)
2个字节,用对于PPP数据帧的完整性和正确性进行检测。
三、LCP帧格式
在运行PPP的串行链路上,两端必须先建立PPP链路连接才能进行正常的数据通信。在链路建立阶段,PPP通过LCP帧进行链路的建立和链路参数的协商。此时LCP帧作为PPP的净荷封装在PPP帧的Information字段格式如图:
(1)Code(代码)
1个字节,表示LCP数据帧的类型,常见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(保留) |
在链路建立阶段,若本端接收到的LCP数据帧中的code字段值无效,就会向对端发送一个LCP的代码拒绝帧(code-reject(代码拒绝))。
(2)Identifer(标识符)
1个字节,相当于帧序列号(PPP帧头没有序列号字段),用来匹配请求和响应帧,即响应帧的标识符必须与对应的请求帧中的标识符一致(通常是从0x01开始逐步加1的。)当Idertifier字段值为非法,该帧将被丢弃。
(3)Length(长度)
2个字节,标识LCP帧总长度,也就是四个字段的总长度,不包括PPP头部分。
(4)Data(数据)
承载各种TLV(类型、长度、值)参数,用于协商配置选项。
T(Type)类型:1个字节,协商选项类型,包括MRU、认证协议、Magic-Number(魔术字)等。
常用的PPP认证协议有PAP和CHAP,一条PPP链路的两端可以使用不同的认证协议对端,但是被认证方必须支持认证方要求使用的认证协议,并正确配置用户名和密码等认证信息。
魔术字是一个随机产生的整数,用来检测链路环路和其他异常情况。魔术字的随机性保证两端产生相同魔术字的可能性几乎为0,当收到一个configure-request帧之后,其中包含的魔术字需要和本地产生的魔术字做比较,如果不同,表示链路无环路,使用configure-ack帧确认,魔术字协商成功;否则认为链路有环路,发送configure-nak帧否认,在后续发送的帧中,若含有魔术字字段,则该字段设置为协商成功的魔术字。
L(Length)长度:1个字节,协商选项长度,是指当前协商选项的总长度,包含其Type、Length和Value3个子字段的总长度。
V(Value)值:可变长,包括具体协商选项的详细信息。
四、PPP链路建立流程
PPP链路建立的基本流程
(1)Dead阶段
此阶段也称为物理层不可用阶段,通信的两端检测到物理线路被激活时,就会将其从Dead阶段迁移至Establish阶段,即链路建立阶段。
(2)Establish阶段
PPP链路进行LCP参数协商。协商内容包括MRU、认证方式、魔术字等选项。LCP参数协商成功后会进入Opened状态,表示链路层参协商已经完成。
(3)Authenticate阶段
若链路两端设备配置了PPP认证功能,LCP参数协商完场后,则进入Authenticate阶段,认证方式是在链路建立阶段双方进行协商的。若在这个阶段再次收到了configure-request帧,也会返回到Establish阶段。
(4)Network阶段
PPP链路进行NCP协商,即通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商,如IP地址协商。只有相应的网络层协议协商成功后,该网络层协议才可以通过这条PPP链路发送帧,若PPP链路这个阶段收到了configure-request帧,也会返回Estabish阶段。
(5)Terminat阶段
NCP协商成功后,PPP链路将保持通信状态。PPP在运行过程中,可以随时中断连接。在Terminat阶段,若所有的资源都被释放,通信双方将回到Dead阶段,知道通信双方重新建立PPP连接。
五、LCP链路层参数协商
链路层参数协商阶段,主要是协商通信双方MRU,认证方式和魔术字等选项,协商成功后即进入Opend状态,表示底层链路已建立。
LCP用于链路层参数协商,有4中帧:
1.configure-Request(配置请求)
code字段值为1,链路层协商过程中发送的第一个帧,该帧表明点对点双方开始进行链路层参数的协商。
2.configure-ACK(配置确认)
code字段值为2,若完全接受对端发来的configure-Request帧中的参数取值,则以此帧响应。
3.configure-NAK(配置否认)
code字段值为3,若对端发来的configure-Request帧中的参数取值不被本端接受,则发送此帧并且携带本端可接受的对应参数取值。
4.configure-Reject(配置拒绝)
code字段值为4,若本端不能识别对端发送的configure-Request中的某些参数,则发送此帧并挈带本端不能识别的配置参数。
configure-ACK,configure-NAK,configure-Reject帧在不同链路参数协商时使用,configure-Request帧在不同协商中包含的参数也不一样。
5.路由器的LCP链路参数协商流程
接受协商参数时的确认响应
若RTB能识别并且接受RTA发送的configure-Request帧中的所有链路层参数,则向RTA回应一个comfigure-ACK帧。
不接受协商参数时的否认响应
(1)若RTB能识别RTA发送的configure-Request帧中携带的所有链路层参数牡丹石认为部分或全部参数的取值不能接受,即参数的取值协商不成功,则RTB需要向RTA回应一个configure-NAK帧。
(2)configure-NAK,质保函不能接受的链路层参数,并且此帧所包含的链路层参数均被修改为RTB上可接受的取值(或取值范围)。RTA收到configure-NAK帧之后,根据此帧中的链路层参数重新选择本地配置的其他参数,并重新发送一个configure-Request帧。
不识别协商参数时的拒绝响应
(1)若RTB不能识别RTA发送的configure-Request帧中携带的部分或全部链路层参数,则RTB需要向RTA回应一个configure-Reject帧。
(2)configure-Reject帧中,只包含不能被识别的链路层参数,RTA在收到configrue-Reject帧之后,需要向RTB重新发送一个configure-Request帧,新的configure-Request帧中,删除了对端RTB不可识别的参数。
六、PPP链路IP地址协商
PPP接口IP地址协商是在网络层参数协商阶段完成的。运行PPP的串行链路两端接口的IP地址可以协商,一方面,检查两端接口的IP地址是否存在有冲突,这是IPCP的静态IP地址协商功能;另一方面,一端的IP地址通过IPCP由对端进行动态协商分配,这是IPCP的动态地址协商功能。IPCP使用于LCP相同的协商机制、帧类型
1.IPCP静态IP地址协商
静态IP地址的协商过程其实就是一个IP地址合法性、地址冲突检查的过程。
IPCP静态IP地址协商流程
(1)每一段都要发送configure-Request帧,在此帧中包含本地配置的IP地址。
(2)收到对端发送来的configure-Request帧后,检查其中的IP地址,若IP地址是一个合法的单播IP地址,且和本地配置的IP地址分别为1.1.1.1/30和1.1.1.2/30的静态IP地址协商过程,要注意的是,PPP链路两端的接口IP地址可以不在同一IP网段,这一点与以太网接口的IP地址的配置要求是不一样的。
IPCP动态IP地址协商流程
(1)RTA(PPP客户端)想RTB(PPP服务器)发送一个configure-Request帧,此帧中包含一个IP地址0.0.0.0(未配置IP地址),表示向对端请求IP地址。
(2)RTB收到上述configure-Request帧后,认为其中包含的地址(0.0.0.0)不合法,于是使用configure-NAK回应一个为对端分配的IP地址1.1.1.1(这个IP地址可以在PPP服务器上静态指定,也可以通过PPP服务器配置的IP地址池分配)
(3)RTA收到此configure-NAK帧后,更新本地IP地址,并重新发送一个configure-Request帧,其中包含新的IP地址1.1.1.1.
(4)RTB收到configure-Request帧后,认为其中包含的IP地址为合法地址,回应一个configure-ACK帧。
同时,RTB也要想RTA发送configure-Request帧,请求使用地址1.1.1.2,RTA认为此地址合法,回应configure-ACK帧,这属于IPCP静态IP地址协商。
七、PPP认证原理
PPP支持PAP和CHAP两种邻居认证方式,这是可选的,即可以不配置认证功能。但如果配置了认证功能,仅在通过认证后,串行链路两端的接口才能建立PPP链路,
1.PAP原理
若配置了PAP认证,在完成LCP协商后,认证方就会要求被认证方使用PAP进行认证,PAP认证的工作原理较为简单,使用两次握手过程,密码以明文方式在链路上发送,如图,这是一个单向PAP认证过程,RTA是被认证方,RTB是认证方,具体认证过如下:
(1)被认证方RTA主动将配置的用户名和密码信息使用Authenticate-Request帧以明文方式发送给认证方。
(2)认证方RTB收到被认证方发送的用户名和密码信息后,根据本地配置的用户名和密码信息检查被认证方发来的用户名和密码信息是否正确。若正确,则返回Authenticate-ACK帧,表示认证成功。否则,返回Authenticat-NAK帧,表示认证失败。
这就是一个完整的单向PAP认证过程,只需要两次保温交互即可得出最终认证结果,因此被称为“两次握手”。若配置了双向PAP认证,则RTB作为被认证方,RTA作为认证方实施对RTB发来的认证用户名和密码的验证,这也是一个两次握手过程。
2.CHAP认证原理
相比PAP,CHAP认证原理更复杂一些,认证过程需要三次握手,为了匹配请求帧和响应帧,LCP帧中含有Identifier字段,一次认证过程所使用的帧均使用相同的Identifier信息。
(1)LCP协商完成后,认证方RTB主动向被认证方RTA发送一个Challenge帧,帧中含有Identifier信息和一个随机产生的Challenge字符串,此Identifier也为后续认证帧所使用的Identifier。
(2)被认证方RTA收到此Challenge帧后,首先接收端口上配置的用于CHAP认证的用户密码,然后进行一次加密运算,运算公式为MD5{Identifier+用户密码+Challenge字符串},得到一个16字节长的摘要信息,然后将此摘要信息和接收端口上配置的CHAP用户名一起封装在Response帧中发回认证方。
(3)认证方RTB收到被认证方发送的Response帧后,按其中的用户名在本地用户数据库中查找相应的密码信息,然后在与原来发送的质询帧一起进行加密运算。运算方式和被认证方的加密运算方式相同,最后将加密运算得到的摘要信息和从被认证方的Response帧中封装的摘要信息进行比较,相同则认证成功,不相同则认证失败。