询问握手认证协议(CHAP)通过三次握手周期性的校验对端的身份,在初始链路建立时完成,可以在链路建立之后的任何时候重复进行。
1. 链路建立阶段结束之后,认证者向对端点发送“challenge”消息。
2. 对端点用经过单向哈希函数计算出来的值做应答。
3. 认证者根据它自己计算的哈希值来检查应答,如果值匹配,认证得到承认;否则,连接应该终止。
4. 经过一定的随机间隔,认证者发送一个新的 challenge 给端点,重复步骤 1 到 3 。
通过递增改变的标识符和可变的询问值,CHAP 防止了来自端点的重放攻击,使用重复校验可以限制暴露于单个攻击的时间。认证者控制验证频度和时间。
特性
该认证方法依赖于只有认证者和对端共享的密钥,密钥不是通过该链路发送的。
虽然该认证是单向的,但是在两个方向都进行 CHAP 协商,同一密钥可以很容易的实现相互认证。
由于 CHAP 可以用在许多不同的系统认证中,因此可以用 NAME 字段作为索引,以便在一张大型密钥表中查找正确的密钥,这样也可以在一个系统中支持多个 NAME/ 密钥对,并可以在会话中随时改变密钥。
CHAP 要求密钥以明文形式存在,无法使用通常的不可回复加密口令数据库。
CHAP 在大型网络中不适用,因为每个可能的密钥由链路的两端共同维护。
密码认证协议(PAP),是 PPP 协议集中的一种链路控制协议,主要是通过使用 2 次握手提供一种对等结点的建立认证的简单方法,这是建立在初始链路确定的基础上的。
完成链路建立阶段之后,对等结点持续重复发送 ID/ 密码给验证者,直至认证得到响应或连接终止。
PAP 并不是一种强有效的认证方法,其密码以文本格式在电路上进行发送,对于窃听、重放或重复尝试和错误攻击没有任何保护。对等结点控制尝试的时间和频度。所以即使是更高效的认证方法(如 CHAP),其实现都必须在 PAP 之前提供有效的协商机制。
该认证方法适用于可以使用明文密码模仿登录远程主机的环境。在这种情况下,该方法提供了与常规用户登录远程主机相似的安全性。

PPP:点对点协议
(PPP:Point to Point Protocol)
点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP-IP 协议集中它是一种用来同步调制连接的数据链路层协议(OSI 模式中的第二层),替代了原来非标准的第二层协议,即 SLIP。除了 IP 以外 PPP 还可以携带其它协议,包括 DECnet 和 Novell 的 Internet 网包交换(IPX)。
PPP 主要由以下几部分组成
封装:一种封装多协议数据报的方法。PPP 封装提供了不同网络层协议同时在同一链路传输的多路复用技术。PPP 封装精心设计,能保持对大多数常用硬件的兼容性,克服了SLIP不足之处的一种多用途、点到点协议,它提供的WAN数据链接封装服务类似于LAN所提供的封闭服务。所以,PPP不仅仅提供帧定界,而且提供协议标识和位级完整性检查服务。
链路控制协议:一种扩展链路控制协议,用于建立、配置、测试和管理数据链路连接。
网络控制协议:协商该链路上所传输的数据包格式与类型,建立、配置不同的网络层协议; 
配置:使用链路控制协议的简单和自制机制。该机制也应用于其它控制协议,例如:网络控制协议(NCP)。
为了建立点对点链路通信,PPP 链路的每一端,必须首先发送 LCP 包以便设定和测试数据链路。在链路建立,LCP 所需的可选功能被选定之后,PPP 必须发送 NCP 包以便选择和设定一个或更多的网络层协议。一旦每个被选择的网络层协议都被设定好了,来自每个网络层协议的数据报就能在链路上发送了。
链路将保持通信设定不变,直到有 LCP 和 NCP 数据包关闭链路,或者是发生一些外部事件的时候(如,休止状态的定时器期满或者网络管理员干涉)。
应 用:假设同样是在Windows 98,并且已经创建好“拨号连接”。那么可以通过下面的方法来设置PPP协议:首先,打开“拨号连接”属性,同样选择“服务器类型”选项卡;然后,选择默认的“PPP:Internet,Windows NT Server,Windows 98”,在高级选项中可以设置该协议其它功能选项;最后,单击“确定”按钮即可。
PPP工作流程
当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接(底层up)。  话流程[1] PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
这些分组及其响应选择一些 PPP 参数,和进行网络层配置(此前如有PAP或CHAP验证先要通过验证),NCP 给新接入的 PC机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
PPP和HDLC之间最主要的区别
PPP是面向字节的,HDLC是面向位的。
PPP的特点
PPP协议是一种点——点串行通信协议。PPP具有处理错误检测、支持多个协议、允许在连接时刻协商IP地址、允许身份认证等功能,还有其他。PPP提供了3类功能:成帧;链路控制协议LCP;网络控制协议NCP。PPP是面向字符类型的协议。
PPP协议的帧格式

标志字段    地址字段    控制字段    协议    信息部 分    FCS    标志字段
PPP应用范围
PPP是一种多协议成帧机制,它适合于调制解调器、HDLC位序列线路、SONET和其它的物理层上使用。它支持错误检测、选项协商、头部压缩以及使用HDLC类型帧格式(可选)的可靠传输。
PPP提供了三类功能:
1 成帧:他可以毫无歧义的分割出一帧的起始和结束。
2 链路控制:有一个称为LCP的链路控制协议,支持同步和异步线路,也支持面向字节的和面向位的编码方式,可用于启动路线、测试线路、协商参数、以及关闭线路。
3 网络控制:具有协商网络层选项的方法,并且协商方法与使用的网络层协议独立。
PPP的两种认证方式
一种是PAP,一种是CHAP。相对来说PAP的认证方式安全性没有CHAP高。PAP在传输password是明文的,而CHAP在传输过程中不传输密码,取代密码的是hash(哈希值)。PAP认证是通过两次握手实现的,而CHAP则是通过3次握手实现的。PAP认证是被叫提出连接请求,主叫响应。而CHAP则是主叫发出请求,被叫回复一个数据包,这个包里面有主叫发送的随机的哈希值,主叫在数据库中确认无误后发送一个连接成功的数据包连接
PPP 常见问题
1)什么是LCP?
链路控制协议(LCP) LCP 建立点对点链路,是 PPP 中实际工作的部分。LCP 位于物理层的上方,负责建立、配置和测试数据链路连接。LCP 还负责协商和设置 WAN 数据链路上的控制选项,这些选项由 NCP 处理。
2)NCP是什么?
PPP允许多个网络协议共用一个链路,网络控制协议 (NCP) 负责连接PPP(第二层)和网络协议 (第三层)。对于所使用的每个网络层协议,PPP 都分别使用独立的 NCP来连接。例如,IP 使用 IP 控制协议 (IPCP),IPX 使用 Novell IPX 控制协议 (IPXCP)。
PPP配置方法
PPP基本配置
1, 启用ppp
RouterTest#config terminal
Enter configuration commands,one per line. End with CNTL/Z.
RouterTest(config)#interface serial 0/0
RouterTest(config-if)#encapsulation ppp
RouterTest(config-if)#
2, 地址配置命令
RouterTest(config-if)#ip address 10.1.1.1 255.255.255.0
PAP配置实例
Router(config)#hostname RouterA
RouterA(config)#RouterB password itsasecret
RouterA(config)#interface Async 0
RouterA(config-if)#encapsulation ppp
RouterA(config-if)#ip address 10.0.0.1 255.255.255.0
RouterA(config-if)#dialer-map ip 10.0.0.2 name RouterB 5551234
RouterA(config-if)#username RouterA password itsasecret2
Router(config)#hostname RouterB
RouterB (config)#RouterA password itsasecret
RouterB (config)#interface Async 0
RouterB (config-if)#encapsulation ppp
RouterB (config-if)#ip address 10.0.0.2 255.255.255.0
RouterB (config-if)#dialer-map ip 10.0.0.1 name RouterA 5551234
RouterB (config-if)#username RouterB password itsasecret2
CHAP配置实例
Router(config)#hostname RouterA
RouterA(config)#RouterB password itsasecret
RouterA(config)#interface Async 0
RouterA(config-if)dialer in-band
RouterA(config-if)#encapsulation ppp
RouterA(config-if)#ppp authentication chap
RouterA(config-if)#ip address 10.0.0.1 255.255.255.0
RouterA(config-if)#dialer-map ip 10.0.0.2 name RouterB 5551234
RouterA(config-if)#username RouterA password itsasecret2
Router(config)#hostname RouterB
RouterB (config)#RouterA password itsasecret
RouterB (config)#interface Async 0
RouterB(config-if)dialer in-band
RouterB (config-if)#encapsulation ppp
RouterB (config-if)#ppp authentication chap
RouterB (config-if)#ip address 10.0.0.2 255.255.255.0
RouterB (config-if)#dialer-map ip 10.0.0.1 name RouterA 5551234
RouterB (config-if)#username RouterB password itsasecret2
同时启用CHAP和PAP
Router(config-if)#ppp authentication chap pap
配置PPP回拨
使用压缩
cisco支持的压缩方法:
Predictor:先判断数据是否已经被压缩过。如果数据被压缩过,则立即将其发送出去,而不浪费时间对已经压缩过的数据进行压缩。
Stacker:一种基于Lempel-Ziv(LZ)的压缩算法,对每种数据类型,只发送一次有关其在数据流中的位置。接收方根据这些信息重新组织数据流。
MPPC:MPPC协议(RFC2118)让cisco路由器器能够与microsoft客户端交换压缩后的数据,它使用一种基于LZ的压缩算法
TCP报头压缩:也叫Van Jacobson压缩,只用于压缩tcp报头。
配置压缩
Router(config)#interface serial2
Router(config-if)#compress {predictor|stac|mppc}
Or
Router(config)#interface async
Router(config-if)#ip tcp header-compression
Or
Router(config)#interface async
Router(config-if)#ip tcp header-compression passive
该命令告诉路由器,仅当从对方那里收到压缩后的报头后,才使用tcp报头压缩。
多链路PPP
通过使用多链路PPP,可以将多条连接捆绑成一条虚拟连接。
Router(config-if)#ppp multilink
Router(config-if)#dialer load-threshold load [outbound | inbound | either]
命令dialer load-threshol load指定在什么情况下将更多的B信道加入到MLP链路束中。当所有B信道的总负载超过指定的阀值后,拨号接口(BRI或PRI)将信道加入到多链路束中。
同样,如果总负载低于阀值,将拆除B信道。
参数load是接口的平均负载,其取值为1(没有负载)到255(满载)。
参数outbound(默认值)指定计算负载时只考虑出站数据流;参数inbound指定只考虑入站数据流;either指定计算负载时,选择出站负载和入站负载中较大的那个。
PPP故障排查命令
debug ppp negotiation-确定客户端是否可以通过PPP协商; 这是您检查地址协商的时候。
debug ppp authentication-确定客户端是否可以通过验证。如果您在使用Cisco IOS软件版本11.2之前的一个版本,请发出debug ppp chap命令。
debug ppp error - 显示和PPP连接协商与操作相关的协议错误以及统计错误。
debug aaa authentication-要确定在使用哪个方法进行验证(应该是RADIUS,除非RADIUS服务器发生故障),以及用户是否通过验证。
debug aaa authorization-要确定在使用哪个方法进行验证,并且用户是否通过验证。
debug aaa accounting-查看发送的记录。
debug radius-查看用户和服务器交换的属性。