参考:

https://blog.csdn.net/Wsr1997/article/details/115614711



(一)PPP主要由三类协议族组成:

1、LCP:链路控制协议族主要用来建立、拆除和监控PPP数据链路。



2、扩展协议族CHAP和PAP,主要用于网络安全方面的验证。



3、NCP:网络层控制协议族,主要用来协商在该数据链路上所传输的数据包的格式与类型。


ppp认证_PPP认证ppp认证_PPP认证_02



(二)PPP建立过程:


(1)LCP 阶段:


1、 物理层有连接,lcp 开始链路层基本建立工作。首先发送配置请求(configuration request):

①R2里面带有自己想要使用的参数(携带的参数有,最大接受单元MRU,认证方式,魔术字,SP/MP(单链路还是多链路)),


②R1收到此configure-request报文后,如果R2能识别此报文中的所有链路层参数,并且认为每个参数的取值都是可以接受的,则向R2回应一个configuer-ack报文。


③在没有收到configure-ack报文的情况下,每隔3秒重传一次configure-request报文,如果连续10次发送configure-request报文仍然没有接收到configure-ack报文,则认为对端不可用,停止发送configure-request报文。


注意:configure-ack报文,用于确定接收的request报文的参数正确,可以协商成功。




2、如果收到configure-nak报文{发5次,不能协商就关闭}:

用于表示request报文中携带的参数认为部分或全部参数的取值不能接受


①r2接收r1发送的request报文后,如果r2能识别此报文中携带的所有链路层参数,但是认为部分或者全部参数的取值不能接受,即参数的取值协商不成功,则r2需要向r1回应一个nak报文。


②在这个nak报文中,值包含不能接受的那部分链路层参数列表,每一个包含在此报文中链路参数的取值均被修改为此报文的发送者r2(自己)上可以接受的取值(或取值范围)。


③在收到nak报文后,r1需要根据此报文中的链路层参数,重新选择本地使用的相关参数,并重新发送一个request报文。如果连续5次协商仍然不成功此参数将被禁用,不在继续协商。




3、如果收到configure-reject报文:

ppp认证_PPP认证_03


①当r2收到r1发送的request报文之后,如果r2不能识别此报文中携带的部分或者全部链路层参数{比如R1的认证模式是chap,你的是pap应答},则r2需要向r1回应一个reject报文。


②在此reject报文中,只包含不被识别的那部分链路层参数列表。


③在收到reject报文之后,r1需要向r2重新发送一个request报文,在新的request报文中,不在包含不被对端r2识别的参数。



4、平时发echo-request报文和echo-reply报文:

①lcp建立连接之后,可以使用echo-request报文和echo-reply报文检测链路状态,收到一个echo-request报文之后应当回应一个echo-reply报文,表示链路正常。


②vrp平台默认每隔10s发送一次echo-request报文。




5、连接关闭的情况:

认证不成功或者管理员手工关闭等原因可以时lcp关闭已经建立的连接

① 关闭连接使用terminate-request报文和terminate-ack报文,terminate-request报文用于请求对端关闭连接,一旦收到一个terminate-request报文,lcp必须回应一个terminate-ack报文确认连接关闭。


②在没有收到terminate-ack报文的情况下,每隔3秒重传一次terminate-request报文,连续发送2次还是没有收到terminate-ack报文,则认为对端不可用,关闭连接。




6、lcp协商成功后,会协商认证,如果没有配置认证,则进入network状态。如果配置了认证,则需要协商两端的认证信息,认证分为chap和pap;


协商的参数:

①MRU:—最大接收单元,两端不一致取小值。默认值为1500。


②认证协议:被认证方必须支持认证方使用的认证协议并正确配置,否则协商不成功。默认不认证。


③魔术字:随机产生的数字,用于检测链路环路。如果收到的LCP报文中的魔术字和本地产生的魔术字相同,则认为链路有环路。(一端支持,一端不支持,表示链路无环路,认为协商成功;两4、端都支持则使用检测机制检测是否存在环路,即检查魔术字是否相同)默认启用。


④工作模式:分为单链路(SP)和多链路(MP),当两端不一致时需要协商成为单链路




(2)Authentication(认证)阶段

如果有使用认证的话在这里进行认证,PAP或者CHAP,认证成功进入下一阶段网络层协议阶段,认证失败就进入Termination阶段,终止连接。认证方式有以下2种:


1、PAP认证为两次握手认证,口令为明文,PAP验证的过程如下:被认证方先发送


PAP认证过程:

①被验证方发送用户名和密码到验证方还有ID;表示是同一组报文


②验证方根据用户配置查看是否有此用户以及口令是否正确。只有认证成功才会进入阶段3的协商。PAP认证的特点是在网络上以明文的方式传递用户名及口令。如果在传输过程中被截获,便有可能对网络安全造成极大的威胁。



2、CHAP(Challenge Handshake Authentication Protocol)验证协议为三次握手验证协议-认证方先发送。它只在网络上传输用户名和以密码为原始参数一部分的hash值,而并不传输用户密码,因此安全性要比PAP高。


CHAP认证过程:

(1)首先认证方先发送一个challenge(挑战),里面带上一个随机数和ID


验证方配置了用户名的验证过程:

①被验证方收到报文后,先检查本端接口上是否配置了密码,如果配置了该命令,则被验证方用报文ID、和接口下密码和随机数进行加密,将生成的密文和自己的用户名发回验证方(Response)


②如果接口上未配置密码,则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,用ID、此用户的密码和随机数,将生成的密文和被验证方自己的用户名发回验证方(Response)

注意:始终实现了对用户名的一次检查


③验证方用自己保存的被验证方密码和随机数,ID,生成密文,比较二者的密文,若比较结果一致,认证通过,若比较结果不一致,认证失败。




验证方没有配置用户名的验证过程:

①验证方主动发起验证请求,验证方向发送随机数,id


②被验证方接到验证方的验证请求后,利用报文ID、接口密码和随机数,做MD5算法对报文进行加密,将生成的密文和自己的用户名发回验证方(Response)。


③验证方用自己保存的被验证方密码和随机数,ID,生成密文,比较二者的密文,若比较结果一致,认证通过,若比较结果不一致,认证失败。



在设备上,也可以配置CHAP单向的认证,接口下配置用户名和密码。如果使用单向认证,原理不变,只是发送主机名的时候使用接口下配置的主机名发送,在收到对方数据包,需要做哈希的时候,优先使用接口下配置的password和随机数做哈希,而不是在本地数据库里找用户对应密码。以这种方式实现单向认证。


注意:

ID的作用:用于区分一个会话,标识挑战报文和应答报文的对应关系,作为哈希的一部分


随机数的作用:防重放攻击



(3)NCP协商过程:

认证通过以后会进入NCP(network-网络控制协议)阶段,NCP实际上要去协商2个东西,一个是网络协议大概就是为ipv6服务还是为mpls之类的服务,一个是IPCP协商内容主要包括双方的IP地址,在NCP的阶段还可以分配IP地址PPP有2种一种是静态,一种就是地址互推(动态协商)分别如下:



1、ipcp协商:

①r1和r2都要发送configure-request报文,在此报文中包含本地配置的ip地址。


②r1和r2接收到对端的configure-request报文之后,检查其中的ip地址,如果ip地址是一个合法的单播ip地址,而且和本地配置的ip地址不同(没有ip冲突)则认为对端可以使用该地址,回应一个configure-ack报文。收到ack后会在本地生成下一跳指向接口的静态路由。


③通过ipcp发送的信息,ppp链路的两端都可以知道对端使用的30位ip地址。


2、ipcp动态协商ip地址:

①r1配置为请求对端分配ip地址,r2配置静态ip地址,并且启用r2给对端分配ip地址的能力。两端动态协商ip地址的过程如下:


②r1向r2发送一个configure-request报文,此报文中含有ip地址0.0.0.0,一个含有0.0.0.0的ip地址的configure-request报文表示向对端请求ip地址。


③r2收到上述configure-request报文后,认为其中包含的地址0.0.0.0不合法,使用configure-nak报文回应一个新的ip地址给r1。


④r1收到此configure-nak报文之后,更新本地ip地址,并重新发送一个configure-request报文,包含新的ip地址。


⑤r2收到configure-request报文后,认为其中包含的ip地址为合法地址,回应一个configure-ack报文。


⑥同时,r2也要向r1发送configure-request报文 请求使用自己配置的静态ip地址,r1认为此地址合法(不冲突),回应configure-ack报文。



PPPOE里面用这个,NCP协商成功以后会进入NCP opend状态,一旦是LCP opend和NCP opend那就认为协商成功了,如果NCP协商失败或者认证失败都会进入Terminate状态关闭链接。





(三)PPPoe的作用就是吧ppp封装在以太网中,使得在以太网中传送数据,ppp有认证,以太网没认证


1、工作原理:

①客户端会发送一个广播的padi(pppoe active discovery l)报文(发现servier)


②服务器知道以后回回复单播的pado(pppoe active discovery offer)报文(里面可以提供的服务有那些)


③客户端收到以后会根据服务提供单播padr(pppoe active discovery request)报文(请求服务)


④服务器回复pads(pppoe active discovery session-confirmation)报文(确定),到此PPPOE会话建立完毕,后续就进行LCP协商LCP协商 ,pasds 里面有sessid有ID,表示唯一的一个会话

ppp认证_PPP认证_04

PPPoE拨号可分为三个阶段,即Discovery阶段、Session阶段和Terminate阶段。



2、Discovery阶段由四个过程组成:


①pppoe client广播发送一个padi(pppoe active discovery initial)报文,在此报文中包含pppoe client想要得到的服务类型信息。


②所有的pppoe server收到padi报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个pado(pppoe active discovery offer)报文。


③根据网络的拓扑结构,pppoe client可能收到多个pppoe server发送的pado报文,pppoe client选择最先收到的pado报文对应的pppoe server做为自己的pppoe server,并单播发送一个padr(pppoe active discovery request)报文。


④pppoe server产生一个唯一的会话id(session id),标识和pppoe client的这个会话,通过发送一个pads(pppoe active discovery session-confirmation)报文把会话id发送给pppoe client,会话建立成功后便进入pppoe session阶段。


⑤完成之后通信双方都会知道pppoe的session_id以及对方的以太网地址,它们共同确定了唯一的pppoe session。



3、Session阶段:

①pppoe session阶段可划分为两部分,一是ppp协商阶段,二是ppp数据传输阶段。


②pppoe session上的ppp协商和普通的ppp协商方式一致,分为lcp、认证、ncp三个阶段。


③lcp阶段主要完成建立、配置和检测数据链路连接。


④lcp协商成功后,开始进行认证,认证协议类型由lcp协商结果(chap或者pap)决定。


⑤认证成功后,ppp进入ncp阶段。ncp是一个协议族,用于配置不同的网络层协议,常用的是ip控制协议(ipcp),它主要负责协商用户的ip地址和dns服务器地址。


⑥pppoe session的ppp协商成功后,就可以承载ppp数据报文。


⑦在pppoe session阶段所有的以太网数据包都是单播发送的。



4、Terminate阶段:

①ppp通信双方可以使用ppp协议自身来结束pppoe会话,当无法使用ppp协议结束会话时可以使用padt(pppoe active discovery terminate)报文。


②进入pppoe session阶段后,pppoe client和pppoe server都可以通过发送padt报文的方式来结束pppoe连接。padt数据包可以在会话建立以后的任意时刻单播发送。在发送或接收到padt后,就不允许再使用该会话发送ppp流量了



5、小知识

type类型是8863 discover或terinater阶段

和8864 sessuion阶段


ppp认证_PPP认证_05




(四)有几条路由的关系:

ppp认证_PPP认证_06


[R1]display IP routing-table

Destination/Mask Proto Pre Cost Flags NextHop Interface

1.1.1.0/30 Direct 0 0 D 1.1.1.1 Serial4/0/0 //是通过直连天然形成的,产生的默认路由

1.1.1.1/32 Direct 0 0 D 127.0.0.1 Serial4/0/0 //天然形成,本地的。表明本地是最好的

1.1.1.3/32 Direct 0 0 D 127.0.0.1 Serial4/0/0 //广播网段

2.2.2.0/30 OSPF 10 96 D 2.2.2.2 Serial4/0/0 //通过ospf协商到

2.2.2.2/32 Direct 0 0 D 2.2.2.2 Serial4/0/0 //是通过ipcp协商到



做的实验在 ""PPP的路由条目"" 主要看下一跳10.2.2.2 这种就类似地址互推学习过来的


ppp认证_PPP认证_07



(五)PPP环路的问题:

①本地的IP地址生效之后都会产生一条目标地址为该接口网段的直连路由,下一跳是自己接口的IP


②如果链路两端的地址在同一个网段 且网段中还有其他空余地址,那么在访问其他地址时,路由层面的环路就已经产生


③只不过以太网类型的链路上需要通过ARP请求到目标MAC地址后才能完成数据封装和发送,所以没有环路。


④但是PPP链路上,数据会直接从该本地接口发送出去,对端收到后也会直接从本地接口发出,从而形成了环路。


⑤所以在配置PPP接口地址的时候,都需要配置掩码为30位 的地址,这样网段内就只有2个可有地址不会产生环路。


主要的就是 会生成一个对应的直连路由的比如我配置成24位就会产生10.1.1.0 /24位 这样的东西,就会导致环路




(六)PPPOE配置:

怎么实现(配置)

服务器


创建VT接口

VT接口下配置PPP

物理接口绑定PPPoE服务器模式,VT接口


客户端

创建拨号接口

拨号接口配置PPP

物理接口绑定PPPoE客户端模式,拨号接口



具体配置:

服务端

配置3A:

aaa

local-user we password cipher %$%$YIvQ/N(z9=Q;|s$`joWJ5J0]%$%$

local-user we service-type ppp

配置地址池:

ip pool 123

gateway-list 10.1.1.1

network 10.1.1.0 mask 255.255.255.0 、

绑定虚拟接口并开启认证:

interface Virtual-Template0

ppp authentication-mode chap

remote address pool 123

ppp chap user we

ppp ipcp dns 8.8.8.8

ip address 10.1.1.1 255.255.255.0

#

绑定接口:

interface GigabitEthernet0/0/0

pppoe-server bind Virtual-Template 0

ip address 192.168.1.1 255.255.255.0





客户端:

配置Dial 接口

interface Dialer1

link-protocol ppp

ppp chap user we

ppp chap password cipher %$%$#]+SEn"H>J]"Z@;@#BtO,%2'%$%$

ip address ppp-negotiate


配置绑定

interface GigabitEthernet0/0/0

pppoe-client dial-bundle-number 1

ip address 192.168.1.2 255.255.255.0





(七)问答:


1、PPP的作用:建立,拆除,监控

动态协商:

服务器端手动方式配置IP地址,并需要给客户端分配IP地址,客户端则动态获取IP地址。这种情况下客户端需要两次发送Config-Request报文,才能完成协商。首先客户端发送IP和DNS均为零的Con⁃figure数据报,服务器收到后发送携带动态分配的IP地址和以服务器的IP地址为网关的Nak数据报,然后客户端再次以收到的信息发送Configure数据报,服务器回送Ack则配置成功


2、LCP协商:

LACP的作用不仅仅是建链,还有维持和拆除(发送terminate)的作用,维护会发送echo的报文,报文每10秒发送一次,30秒没收到就要拆除了。



3、认证过程:

认证方会发送挑战报文,报文里面包含用户名,华为缺省为空,认证方的随机数,认证ID,被认证方收到以后会使用发送过来的ID和随机数+被认证方接口密码,进行一个哈希,生成一个哈希值,在吧哈希值和用户名发送过去(用户名这里不被哈希);认证方在AAA数据库里去找用户名所对应的密码,用密码+随机数+ID做一个哈希,如果ID一样,密码一样,随机数一样,最终得到的数值也一样去做哈希的值,如果得到的结果一样认证成功,如果不相等则认证失败



4、魔术字怎么放环?

假如AR1和AR2会随机产生一个数字,假如AR1的魔术字是a,AR2的魔术字为b,AR2收到以后发现和自己的不一样,就会回应一个ACK,同意你用a的,AR2就会发送一个request,AR1也会发送一个ack,假如出现了环路假如AR1发来的confr request,里面携带A,AR2收到以后发现这个魔术字和自己的相同,这时候AR2会发送一个NAK, 不同意,然后会发送一个B,然后AR1收到B以后发现是NAK,然后A会立马产生一个C,然后AR1会在发一次request,然后AR2在进行确认

(魔术字是由各通信设备独立产生的。为了避免产生相同的魔术字,通常会采用随机方法产生一个独一无二的魔术字。一般来说魔术字会采用设备的系列号、网络硬件地址或时钟等。

在LCP协商阶段会彼此协商魔术字,LCP阶段的后续协商过程中的ECHO报文均携带此字段,且ECHO报文中该字段值必须与协商成功时本端的值保持一致。)


5、认证:PAP,CHAP,不认证



6、请说出哪些是必须配置的参数?

认证方的全局用户名及对应的密码。被认证方接口用户名



7、口令配置在接口配置在全局的区别?

被认证方:接口优先,接口没配再查全局。

认证方:只使用全局用户名对应的密码。



8、接口的配置的信息起什么作用?

接口配置的用户名:认证方:发送挑战报文时携带的用户名;被认证方:发送回应报文时携带的用户名;

接口配置的密码:认证方:不用

被认证方:用来进行hash计算的素材



9、认证方发送的消息携带的用户名是什么?

如果认证方在接口配置用户名的话,发送的挑战报文中携带接口配置的用户名。如果接口没有配置用户名的话,不同厂家实现的方式有所不同,华为保持为空



10、CHAP 认证挑战报文里的用户名是怎么来的?

认证方的用户名:认证方的用户名是在认证接口上面配置上去的,如果没有配置用户名,我们华为设备上如果接口上没有配置用户名,则发送的挑战报文里是不携带用户名的。

被认证方的用户名:被认证方的用户名也是在接口上配置上去的,而且被认证方接口下必须配置用户名.



11、如果认证方发送的挑战报文没有携带用户名,被认证方怎么去处理?对CHAP 认证有没有什么影响?

如果挑战报文没有携带用户名,被认证方则直接使用认证接口下的配置口令用做HASH 计算的。认证方发送的挑战报文不携带用户名对CHAP 认证没有影响。但被认证方接口下的password要设置.



12、被认证方的接口下如果没有配置用户名会导致什么情况?

认证方法送conf Request ,在被认证方法送config reject , LCP 协商authentication就fail了;



13、谁会发送认证失败的报文?

认证方,不管是成功还是失败都是认证方发送的




14、认证方发的用户名和被认证方发的用户名本身有没有什么关联关系?

本身是没有什么强制关联关系的,都是在本地上进行配置的,通过chap消息携带到对方去,并据此寻找password, 如果密码错误则失败



15、挑战报文里的随机数是做什么用的?

主要是用来防止重放攻击的




16、请说出哪些是一定不会使用的参数?

认证方接口下的密码




17、如果被验证方全局没有配置用户名及对应密码,则还有什么参数是必须的?

被验证方接口下的用户名和密码



18、如果被验证方接口没有配置密码,则还有什么参数是必须的?

被验证方全局用户名及对应的密码,验证方接口发的用户名{如果这里不配置,默认发送的时候是不发送用户名的是为空的,那对方就无法自己是该匹配那个用户名了}



19、PPP协议支持同步传输和异步传输,请解释什么是同步传输,什么是异步传输?

答:异步传输:传输不连续,以字符为单位进行传输,由起始位,数据位,奇偶校验位(可省略),停止位这4部分组成。

空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。起始位:先发出一个逻辑”0”信号,表示传输字符的开始。停止位:发出一个逻辑”1”信号,表示 1 帧数据的结束



20、同步传输:同步传输的比特分组要大得多。它不是独立地发送每个字符,每个字符都有自己的开始位和停止位,而是把它们组合起来一起发送。我们将这些组合称为数据帧,或简称为帧



21、认证成功的报文和失败的报文是一种报文吗?

是一种报文



22、chap双认证?

两个接口都要开启认证



23、PAP认证过程是什么样的?

认证方必须要配置了3A,那被认证方要在接口配置用户名和密码,这样是被方正方直接发起认证,把那用户名和密码用明文的方式发送



24、接口的配置的信息起什么作用?

用户名:认证方发起挑战报文的时候要携带用,被认证方回应的时候用

密码:认证方配置的密码没有意义,被认证方哈做哈希用,这个接口密码是和3认证方3A数据库的密码是一致的


25、如果认证方发送的挑战报文没携带用户名,被认证方怎么去处理?对CHAP认证有没有什么影响?

①不处理,缺省下就是没有的,没有什么影响


②如果被认证方接口没有配置密码,但是全局配置了用户名加密码那挑战报文没有携带用户名的情况下是无法成功的



26、如何判断是认证方还是被认证方?

①在接口下只要配置了PPP的认证方式就是认证方


②因为如果在被认证方的接口下配置了口令,就用口令验证,如果在3A下面配置了会使用3A使用下面的密码,但3A下面不能只配置了密码,因为必须要配置用户名才可以。



27、MP/LSP他们协商和NCP协商有没有不同的?

如果是多链路捆绑的时候LCAP,不仅有魔术字,MRU,认证,压缩还会新协商2个东西一个是<1>MP的MRU <2>本地标识符,这两个也可以说是链路捆绑的参数



28、如果被认证方同时在3A和接口下配置了用户名和密码那个优先

被认证方接口优先、如果连接已经建立,在认证方修改了密码,那连接时不会中断的,在被认证方修改密码也不会中断



29、被认证端收到了三个challenge的报文会回复几个?

会回复三个,因为有三个ID,ID一变就认为不是同一个,使用最先收到sueecess报文的一个



30、底层以太网,改为P-2-P运行OSPF,会不会full ?有无路由?

能full,也有路由,因为两边的类型是一致的,可以通