![ea008a6f3127c04d0def968cb0f41ddb.png](https://i-blog.csdnimg.cn/blog_migrate/b8b60149d61729ed84462fdc1df155c4.png)
一、PPP协议介绍
PPP协议包含 LCP PAP CHAP NCP(IPV4CP IPV6CP IPXCP)等工作在链路层支持链路级的 AAA 认证。
Authentication 认证:出示凭证 主认证 被认证 如锁是主认证,钥匙就是被认证被认证方要向主认证方出示用户名密码,主认证方确定没有问题在把链路开启。
Authorization 授权:认证通过后,我需要判断你能使用多少资源
Accounting 审计:监控 接收什么样流量
PPP 协议是一种点到点链路层协议,主要用于在全双工的同异步链路上进行点到点的数据传输。
PPP 支持所有类型的压缩,HDLC 支持站点压缩。
多链路捆绑,因为有 NCP,通过设置 TLV 字段轻松的支持各种三层网络协议 。
链路两端接口地址不配在同一个子网段,不写静态,通过 NCP 就能自动获悉去往对端接口的 32 为主机路由,有了主机路由,就算子网段不在同一个,也能够互联互通。
同步/异步线缆都支持。
二、PPP组件及帧格式
1.组件
![951e71583873344a80887403286bcfd3.png](https://i-blog.csdnimg.cn/blog_migrate/97fb9acb7b1c5ee60437fb05a79b7931.png)
2.帧格式
![a080315983a1d1bf5910b79c1e7496b3.png](https://i-blog.csdnimg.cn/blog_migrate/206c477510aa44a7d679b60716579398.png)
三、LCP:数据链路层状态激活
两端都回给对端主动发送 LCP configuration request 配置请求报文 中包含的参数可以设置 TLV,大体包含如下 :
MRU 最大接收单元:默认 1500.两端需要一致。
认证协议:是使用 PAP /CHAP 。
Magic number 魔术字:防止环路的 router 在发送 LCP 报文之前,先本地基于硬件产生随机一个魔术字,在发送的 configuration request 携带魔术字,对方收到报文会对比魔术字是否一样,如果一样,首先会给发送者返回一个错误 configuration NAK 非确认报文,我在本地计算一个新的魔术字,在等待发送方给我发送 configuration request。
Quality protocol 质量协议:用来做 QoS,那些数据优先转发 。
MP 多链路参数:描述是否用来做链路捆绑 。
报头压缩 。
载荷压缩:在报头中要不要做报头压缩,载荷压缩。
当对端收到 configuration request 后首先是查看这些参数,我是否能够识别,我和你的值能 否匹配,如果匹配也能识别,给你回复 configuration ACK 配置确认报文,参数识别但不支持 回复 configuration NAK有些压根不识别 回复 configuration reject 拒绝都回复ACK,没有做认证的话,数据链路层是 UPUP,如果做的认证数据链路层还是 down 的。
下面我们来看一下LCP的报文,如下:
![645e9df3f4536fad034ada59cc1e5b12.png](https://i-blog.csdnimg.cn/blog_migrate/76259cc1b737ff9fdf743f6477b48ca1.jpeg)
四、PAP 密码认证协议
PAP 密码认证协议又称为二次握手协议。比如有两台路由器相连:R1--------------R2,其中R1为主,R2为被动。之时就需要R2 给 R1 发送用户名密码。即Authentication- request 被认证方主动发送给主认证方,包含用户名密码,都是明文表示。主认证方收到后,在他的 AAA 数据库里包含用户名密码条目,做一个匹配,匹配成功会返还 Authentication-ACK,失败返还 Authentication-NAK。
![de19ae9034bc19db42a67cd1b3bb9b20.png](https://i-blog.csdnimg.cn/blog_migrate/51d8892658e02cf907559faa3b815c6a.jpeg)
五、CHAP 挑战握手认证协议
CHAP也称为三次握手协议,密文认证。
Challenge 主认证方给被认证方发送,包含随机数(防止重放攻击)、报文 IP(用来做确认 主认证方的用户名可选的。其中:Cisco 一定会包含用户名,可以在主认证方接口进行配置、没有配置将自己 hostname 发走;Huawei 可选的,如果接口配置了就发,如果没有配置就不发。
Response 被认证方给主认证方发送的回应 包含用户名(被认证方接口配置的用户名)、散列值(密码:接口配置的密码+随机数+会话 ID、执行 MD5 计算),会话 ID(表示我这个 Response 是关于你 Challenge 的回应)主认证方收到后,做一个匹配,成功返还 success、失败返还 failure。
在发送 Challenge 到底包不包含用户名,Huawei 和 Cisco 完全是不一样的,先看 Huawei。
1.Huawei
如果被认证方收到的 challenge 里没有包含用户名,被认证方必须出示接口所配置的用户名和密码,执行散列发走。如果被认证方收到的 challenge 里包含用户名,根据用户名在本地 AAA 认证数据库里找有没有对应的密码条目存在。
例如包含的用户名为 R1,在被认证方真有 R1 的 ppp 密码配置:
Localuser R1 password cipher Huawei
Localuser R1 service-type ppp
收到的 challenge 里包含 R1 用户名,我就会拿 R1 的用户名在本地 AAA 认证数据库里找对应的密码,找到条目后对应的密码 Huawei 来做一个发送,在发送 Response 的时候就可以 包含这个密码。
但是这个时候我被认证方接口也配置了密码,这个时候被认证方接口配置的密码出示优先级高于 AAA 认证数据库的密码,这个时候主认证方给被认证方发送一个 Challenge,假设包含用户名 R1,在被认证方 AAA数据库里有 R1 密码存在,并且没有在接口配置密码,就使用 Huawei 密码来做一个出示,用户名还是出示我接口配置的。这个时候在 AAA 数据库中没有找到对应的条目,只能在接口配置密码。
在认证数据库中存在密码,并且接口也配置了密码,就出示接口密码。所以华为的被认证方并不是要求 100%在接口配置密码信息,可以不配,但是在主认证方发送的 Challenge 必须包含用户名,在被认证方要针对这个用户名在本地 AAA 数据库中去创建一个相对应的密码条目。认证才能通过。
2.Cisco
主认证 用户名可以接口配置,没有没有配置,主认证方就会把自己的主机名发走。被认证方收到的 Challenge 里一定会包含用户名,如 R1 被认证收到后基于你的用户名在本地 AAA 数据库里找对应的密码条目,找到出示这个密码。
被认证方本地 AAA 数据库的密码优先级高于接口级的密码优先级,全局高于接口
被认证方出示用户名的时候,接口配置了就出示接口配置,没有配置把自己主机名发走。举例如下:
R1-----------------------------R2
R1 和 R2 就是两台路由器的用户名,做双向认证。,接口什么都不配置,认证如何通过。如下:
R1 :username R2 password Cisco
R2 :username R1 password Cisco
只需要创建用户名是对端主机的条目,并且 password 一致就 OK,R1 由于什么也没有做,发送 Challenge 认证的时候,用户名就是 R1,在 R2 上有对应的 R1的密码条目,出示密码的时候,就出示 Cisco。
由于我的接口也没有配置用户名,我给你出示的用户名就是主机名,所以 R2 给 R1 出示的用户名是 R2 password 是 Cisco 所以 R1 收到用户名为 R2,密码为 Cisco 的 Challenge 之后,我拿这个信息和的配置信息对比 。用户名和 password 都一致,通过。现在 R2 就算是在接口级配置 Cisco123 密码,一样能够通过,因为使用的密码还是 Cisco。
认证通过后,下面就是使用 NCP 做 3 层协商,通常是 IPV4CP,NCP 和 LCP 协商差不多,双方都给对端都是发送 configuration request,这个只会包含你接口的地址信息和 DNS 信息,对方收到后会判断首先你是否有地址,地址是否冲突,都 OK,给你返 configuration ACK,不 OK 返还 configuration NAK,并且会告诉你的那些参数有问题。
NCP 和 LCP 都 OK,PPP 链路就可以工作了 使用完链路之后可以通过 LCP 去关闭链路。
PPP 链路建立有 3 步 :
1.通过 LCP 去协商数据链路层的参数,协商完毕后链路基本已经 UP UP 了。
2.认证 可选的,可以使用 PAP /CHAP 来完成认证,可以单向可以双向,两端都给对端发送用户名密码,对方都要给你的用户名密码做一个审核评判。可选的必须要做。
3.认证通过后, 根据你三层所使用的协议,然后我运行相对应的 NCP 协议来做一个协商,协商 3层的地址信息,看接口是否有地址,地址是否冲突,没有问题后,建立完成。
六、IPCP动态地址协商
![328fbe7f52918a687a422532fc5327e6.png](https://i-blog.csdnimg.cn/blog_migrate/7780532d4eaef518f950f5810ed0f365.png)
如果有一端没有配置地址,发送 configuration request 对于没有地址这一段我的地址就是全0,收到全 0 之后,意识你没有地址,给你回复一个 NAK,在 NAK 中告诉你,可以使用这个地址,这个地址就是和我接口同一个子网端中可用的地址,给你发送一个,之后你会用应用这个地址,给你发送 configuration request 携带这个地址。