对于PPP协议,可以讲解的内容非常多。这个协议的应用也非常的广泛。那么这里我们就重点讲解一下LCP的内容。首先我们需要来哦接一下ppp协议的具体架构。
一、概述
1、是一个二层协议,和HDLC、RARP地位一样
2、PPP架构:
(1)支持多种上层协议如IP、IPX、AppleTalk
(2)自身包含两个协议:网络控制协议NCP和链路控制协议LCP。LCP用于和底层进行协商,然后进行链路层的认证。接下来进行NCP的协商,建立和配置网络层协议如IP地址等,用于和三层进行协商将上层数据包封装进PPP里面。两个协议的协商都是双向的。链路拆除时先拆除NCP,再拆除LCP。
3、LCP
LCP链路控制协议(Link Control Protocol)赋予PPP以多功能性,考虑到包格式、包大小和认证的协商。它还使PPP具有确定何时线路为失败、何时正常运行的功能。 LCP用于配置和测试数据链路,工作方式如下:
第1步 链路建立阶段―――首先打开连接,然后确定相关通信参数(包括MTU、compress type、及链路认证类型。链路设置完后确认帧,然后是可选的链路质量确认阶段,LCP确定链路质量
第2步 可选(必要)的认证阶段―――两种认证方式:质询应答握手认证协议(CHAP)和密码认证协议(PAP)。PPP本身不需要认证,cisco路由器异步线路需要认证,建议使用CHAP认证方式。
第3步 网络层协议阶段―――LCP引导NCP激活和配置网络层协议。这一阶段结束后即可传输数据包。
第4步 链路终止阶段―――LCP指导NCP关闭layer 3。
二、HDLC和PPP帧格式的比较
1、HDLC帧格式:Flag-address-control-data(payload)-FCS-Flag
Flag:前后各一个字节
Address:一个字节。点到点连接,没有任何意义,值为全1,可以看作是二层的广播地址
控制信息:一或两个字节
负载:1500字节
FCS:四个字节
2、PPP帧格式:Flag-Address-Control-Protocol-LCP-FCS-Flag
Flag:前后各一个字节,8个比特,值为01111110,标识帧为PPP的帧.前后各一个标识帧的开始和结束。
Address:一个字节。点到点连接,没有任何意义,值为全1
控制信息:一个字节,值为11000000,意为没有顺序、流量控制、错误控制。
Flag/address/控制信息都是固定不变的。
协议字段:有一个参数C021表示LCP,C023表示要进行认证并且认证类型为PAP,0223表示要应用认证并且认证类型为CHAP,C025表示链路质量报告LQR
与HDLC不同的是多了2个字节的协议字段。协议字段不同,后面的信息字段类型就不同。如:
0x0021——信息字段是IP数据报
0xC021——信息字段是链路控制数据LCP
0x8021——信息字段是网络控制数据NCP
0xC023——信息字段是安全性认证PAP
0xC025——信息字段是LQR
0xC223——信息字段是安全性认证CHAP
三、基本配置
1、R2(config-if)#encapsulation ppp
2、peer neighbor-route
(1)R2(config-if)#no peer neighbor-route 干掉路由表里出现的对端接口地址的32位主机路由,在两端地址在同一网段时适用
(2)默认情况下peer neighbor-route是打开的,路由表里会出现对端接口地址的32位主机路由,所以PPP两端的地址可以是不同网段的地址,而且可以保证数据连通性,这在点到点连接的情况下很常用。
注:点到点连接下可以配置成/31位的IP地址。这种配置地址的方法和借用地址的方法在点到点链路上比较常用。
四、PPP LCP 选项
1、认证Authentication
2、回拨Callback:多用在ISDN
3、压缩Compression
4、多链路捆绑Mutilink:增加带宽增加冗余性增加B信道
五、PPP Authentication
1、条件:LCP子层协商成功
2、设备角色:主认证方与被认证方,可以同时成为主认证方和被认证方,即可作双向认证
3、PAP认证:简单明文
4、CHAP认证:
(1)被认证方(远程用户)向认证方发起一个认证请求
(2)认证方向被认证方返回一个挑战,格式为01-id-random-主认证方数据库里面的用户名
01代表challenge;
id是challenge的序列号;
random是随机产生的一个随机数
(3)被认证方拿到用户名之后在本地数据库或是3A服务器里面查找对应的密码,然后将这个密码和上面的挑战ID和random随机数一起作Hash,再向主认证方返回一个响应包,格式为02-id-hash-被认证方本地数据库里面的用户名(和发过来的一样)
02代表CHAP的响应数据包
id:copied from chalenge packet主认证方刚发过来的那个ID
hash值:密码加挑战ID加挑战随机数作hash
用户名:本地数据库用户名
(4)主认证方收到挑战响应包之后查找第一次发出的挑战信息,同时查找响应包里的用户名在数据库里对应的密码,将得到的密码和挑战ID随机数一起作Hash,得到的值与被认证方发送过来的hash值作比较,如相同,则认证成功否则认证失败。
在这个认证过程中,在网络中传输的是挑战ID、随机数与密码的hash值,并不是密码本身,这保证了密码的安全性。同时认证的两端输入的数据都是挑战ID、随机数与密码,因而得到的hash值也一样,保证了认证的有效性。这时注意:两边都必须有用户名,且不需要相同,但数据库中的密码必须相同。
(5)主认证方向被认证方返回一个认证成功的消息,格式为03-id-"welcome in"
相关文档:understanding ppp chap
(6)配置举例
单向认证举例:
R1为主认证方,R2为被认证方
R1(config)#int s1/1
R1(config-if)#encapsulation ppp
R1(config-if)#ppp authentication chap
R1(config)#username R2 password cisco 这个用于chap认证中第二三步之间的处理过程,注意必须是password,secret通不过
R2(config)#int s1/0
R2(config-if)#encapsulation ppp
R2(config-if)#ppp authentication chap
R2(config-if)#ppp chap hostname R2 这条命令如果不打的话默认是主机名,是第二步中向主认证方发送的用户名
R2(config-if)#ppp chap password cisco 被认证方本地数据库的密码,如果没有在全局建立用户名和密码那么将会查找接口下的这个默认密码
双向认证简单:
R1(config)#int s1/1
R1(config-if)#encapsulation ppp
R1(config-if)#ppp authentication chap
R1(config)#username R2 password cisco
R1(config-if)#no sh
R2(config)#int s1/0
R2(config-if)#encapsulation ppp
R2(config-if)#ppp authentication chap
R2(config)#username R1 password cisco
R2(config-if)#no sh
注意接口下的默认ppp chap password 只能用于challenge的回复
可以同时进行chap和pap的认证
R1(config-if)#ppp authentication pap chap 注意这并不是在pap认证失败再进行chap的认证而是对方不和我进行pap认证那么尝试用chap进行认证。
六、压缩
PPP协议运行在速率十分有限的点到点串行链路上。为了提高数据发送效率,可以采用对数据进行压缩后再传送的方法,我们将其称为链路压缩。
LCP支持以下一些链路压缩方法:Stac、Predictor、MPPC以及TCP头部压缩。不同的方法对CPU及内存的需求并不相同。有些需要更多的内存(内存密集型),有些则需要占用更多的CPU时间(CPU密集型)。压缩原理和效果也不相同。
A. Stac:Stac压缩算法基于Lempel-Ziv理论,它通过查找、替换传送内容中的重复字符串的方法达到压缩数据的目的。使用Stac压缩算法可以选择由各种硬件(适配器、模块)压缩或者由软件进行压缩,还可以选择压缩的比率。Stac压缩算法需要占用较多的CPU时间。
B. MPPC:MPPC是微软的压缩算法实现,它也是基于Lempel-Ziv理论,也需要占用较多的CPU时间。
C. Predictor:Predictor—预测算法通过检查数据的压缩状态(是否已被压缩过)来决定是否进行压缩。因为,对数据的二次压缩一般不会有更大的压缩率。相反,有时经过二次压缩的数据反而比一次压缩后的数据更大。Predictor算法需要占用更多的内存。
D. TCP头部压缩:TCP头部压缩基于Van Jacobson算法,该算法通过删除TCP头部一些不必要的字节来实现数据压缩的目的。
R1(config-if)#compress {predictor | stac | mppc} predictor是内存密集型的算法,后两者是CPU密集型的算法
R1(config)#inter async 2
R1(config-if)#ip tcp header-compression
七、多链路捆绑
LCP的多链路捆绑(MP)选项通过将通信两端之间的多条通信链路捆绑成一条虚拟的链路而达到扩充链路可用带宽的目的。
LCP的多链路捆绑可以在多种类型的物理接口上实现,包括异步串行接口、同步串行接口、ISDN基本速率接口BRI、ISDN主速率接口PRI。 LCP的多链路捆绑也支持不同的上层协议封装类型,如X.25、ISDN、帧中继等。
配置:(多个物理接口下)
ppp multilink
multilink-group 2 不需要配置地址
再起虚接口
interface Multilink 2
ip add ...
ppp multilink
multilink-group 2
no peer neighbor-route
no cdp enable
八、回拨
是指当通信一方拨号到另一方后,由另一方断开拨号连接并进行反向的拨号。
这对于从甲地到乙地的电话费大于从乙地到甲地的电话费的情形。这时,可以由甲方首先发起到乙方的呼叫连接,当乙方收到甲方的呼叫请求后,断开乙方的呼叫。然后,从乙方发起到甲方的回叫。甲方应答后,双方的通信链路就建立起来了。
回叫还有更安全的优点。因为乙方在回叫之前可以验证对方是否是合法用户,或者可以用口令数据库的方法或者可以用检验对方电话号码的方法。
九、NCP
NCP网络控制协议(Network Control Protocol)实际上是一套协议。每个子协议都是为处理各自网络层协议所需的错综复杂的配置而设计的。 当LCP将链路建立好了以后,PPP要开始根据不同用户的需要,配置上层协议所需的环境。PPP使用网络控制协议NCP(Network Control Protocol,NCP)来为上层提供服务接口。针对上层不同的协议类型,会使用不同的NCP组件。如对于IP提供IPCP接口,对于IPX提供IPXCP接口,对于APPLETALK提供ATCP接口等。同时对于IP网络,提供IP地址,子网掩码和默认网关等地址的配置。