PPP协议(Point-to-Point Protocol)是一种数据链路层协议,它是为在同等单元之间传输数据包这样的简单链路而设计的。这种链路提供全双工操作,并按照顺序传递数据包。PPP为基于各种主机、网桥和路由器的简单连接提供一种共通的解决方案。
PPP协议包括以下三个部分:
1. 数据帧封装方法。
2. 链路控制协议LCP(Link Control Protocol):它用于对封装格式选项的自动协商,建立和终止连接,探测链路错误和配置错误。
3. 针对不同网络层协议的一族网络控制协议NCP(Network Control Protocol): PPP协议规定了针对每一种网络层协议都有相应的网络控制协议,并用它们来治理各个协议不同的需求。
PPP协议简介
1. PPP数据帧封装
PPP协议为串行链路上传输的数据报定义了一种封装方法,它基于高层数据链路控制(HDLC)标准。PPP数据帧的格式如图1所示。
PPP帧以标志字符01111110开始和结束,地址字段长度为1字节,内容为标准广播地址11111111,控制字段为00000011。协议字段长度为2个字节,其值代表其后的数据字段所属的网络层协议,如:0x0021代表IP协议,0xC021代表LCP数据,0x8021代表NCP数据等。数据字段包含协议字段中指定的协议的数据报,长度为0~1500字节。CRC字段为整个帧的循环冗余校验码,用来检测传输中可能出现的数据错误。
即使使用所有的帧头字段,PPP协议帧也只需要8个字节就可以形成封装。假如在低速链路上或者带宽需要付费的情况下,PPP协议答应只使用最基本的字段,将帧头的开销压缩到2或4个字节的长度,这就是所谓的PPP帧头压缩。
2. PPP回话的四个阶段
一次完整的PPP回话过程包括四个阶段: 链路建立阶段、确定链路质量阶段、网络层控制协议阶段和链路终止阶段(如图2所示)。
(1) 链路建立阶段:PPP通信双方用链路控制协议交换配置信息,一旦配置信息交换成功,链路即宣告建立。配置信息通常都使用默认值,只有不依靠于网络控制协议的配置选项才在此时由链路控制协议配置。值得注重的是,在链路建立的过程中,任何非链路控制协议的包都会被没有任何通告地丢弃。
(2) 链路质量确定阶段:这个阶段在某些文献中也称为链路认证阶段。链路控制协议负责测试链路的质量是否能承载网络层的协议。在这个阶段中,链路质量测试是PPP协议提供的一个可选项,也可不执行。同时,假如用户选择了验证协议,验证的过程将在这个阶段完成。PPP支持两种验证协议:密码验证协议(PAP)和握手鉴权协议(CHAP)。
(3) 网络层控制协议阶段:PPP会话双方完成上述两个阶段的操作后,开始使用相应的网络层控制协议配置网络层的协议,如:IP、IPX等。
(4) 链路终止阶段:链路控制协议用交换链路终止包的方法终止链路。引起链路终止的原因很多:载波丢失、认证失败、链路质量失败、空闲周期定时器期满或治理员关闭链路等。
3. PPP协议中的验证机制
验证过程在PPP协议中为可选项。在连接建立后进行连接者身份验证的目的是为了防止有人在未经授权的情况下成功连接,从而导致泄密。PPP协议支持两种验证协议:
(1) 口令验证协议(PAP): 口令验证协议的原理是由发起连接的一端反复向认证端发送用户名/口令对,直到认证端响应以验证确认信息或者拒绝信息。
(2) 握手鉴权协议(CHAP):CHAP用三次握手的方法周期性地检验对端的节点。其原理是:认证端向对端发送“挑战”信息,对端接到“挑战”信息后用指定的算法计算出应答信息然后发送给认证端,认证端比较应答信息是否正确从而判定验证的过程是否成功。假如使用CHAP协议,认证端在连接的过程中每隔一段时间就会发出一个新的“挑战”信息,以确认对端连接是否经过授权。
这两种验证机制共同的特点就是简单,比较适合于在低速率链路中应用。但简单的协议通常都有其他方面的不足,最突出的便是安全性较差。一方面,口令验证协议的用户名/口令以明文传送,很轻易被窃取;另一方面,假如一次验证没有通过,PAP并不能阻止对端不断地发送验证信息,因此轻易遭到强制攻击。
挑战握手协议的优点在于密钥不在网络中传送,不会被窃听。由于使用三次握手的方法,发起连接的一方假如没有收到“挑战信息”就不能进行验证,因此在某种程度上挑战握手协议不轻易被强制攻击。但是,CHAP中的密钥必须以明文形式存在,不答应被加密,安全性无法得到保障。密钥的保管和分发也是CHAP的一个难点,在大型网络中通常需要专门的服务器来治理密钥。
PPP的配置
PPP协议在很多领域中都有广泛的应用,典型的是远程Internet的连接,其中使用较多的是路由器与路由器互联(如图3所示)。
图3 路由器与路由器的互联
两个路由器之间有两条链路,分别运行PPP协议,其中一条链路使用CHAP认证,另一条采用PAP认证。
1.路由器PPP封装配置
在端口模式下:
A(config-if)# encapsulation ppp //在路由器A的S0、S1端口分别启动PPP协议。
B(config-if)# encapsulation ppp //在路由器B的S0、S1端口分别启动PPP协议。
2.配置PPP认证使用的用户名和密码
A(config)#username B passWord cisco //为路由器B设置一个用户名和口令。
B(config)#username A password cisco //为路由器A设置一个用户名和口令。
3. 配置PAP认证
在路由器A、B的S1端口上:
A(config-if)#ppp authentication pap
B(config-if)#ppp authentication pap
需要说明的是,在Cisco IOS 11.1或更高的版本中,假如路由器发送(或响应)PAP消息(或请求),则必须在指定接口上使用PAP协议。
单向认证:比如A向B发出认证请求,那么只在A上配置即可,B不用额外配置。
A(config-if)#ppp pap sent-username B password cisco
双向认证:A和B双方要互相认证,那么A、B都要配置。
A(config-if)#ppp pap sent-username B password cisco
B(config-if)#ppp pap sent-username A password cisco
4. 配置CHAP认证
在路由器A、B的S0端口上:
A(config-if)#ppp authentication chap
B(config-if)#ppp authentication chap