PPP PPOE详解

时间:2024-03-13 21:11:34

PPP协议是在串行线IP协议SLIP(Serial Line Internet Protocol)的基础上发展起来的。由于SLIP协议具有只支持异步传输方式、无协商过程(尤其不能协商如双方IP地址等网络层属性)、只能承载IP一种网络层报文等缺陷,在发展过程中,逐步被PPP协议所替代。

PPP协议有如下优点:
  • 对物理层而言,PPP既支持同步链路又支持异步链路,而X.25、FR(Frame Relay)等数据链路层协议仅支持同步链路,SLIP仅支持异步链路。
  • PPP协议具有良好的扩展性,例如,当需要在以太网链路上承载PPP协议时,PPP可以扩展为PPPoE。
  • 提供LCP(Link Control Protocol)协议,用于各种链路层参数的协商。
  • 提供各种NCP(Network Control Protocol)协议(如IPCP、IPXCP),用于各网络层参数的协商,更好地支持了网络层协议。
  • 提供认证协议CHAP(Challenge-Handshake Authentication Protocol)、PAP(Password Authentication Protocol),更好的保证了网络的安全性。

无重传机制,网络开销小,速度快。

 

 

 

 

  • Flag域
Flag域标识一个物理帧的起始和结束,该字节为0x7E。
  • Address域
Address域可以唯一标识对端。PPP协议是被运用在点对点的链路上,因此,使用PPP协议互连的两个通信设备无须知道对方的数据链路层地址。按照协议的规定将该字节填充为全1的广播地址,对于PPP协议来说,该字段无实际意义。
  • Control域
该字段默认值为0x03,表明为无序号帧,PPP默认没有采用序列号和确认应答来实现可靠传输。
Address和Control域一起标识此报文为PPP报文,即PPP报文头为FF03。
  • Protocol域
Protocol域可用来区分PPP数据帧中信息域所承载的数据包类型。(0021 IP C021 LCP)
Protocol域的内容必须依据ISO 3309的地址扩展机制所给出的规定。该机制规定协议域所填充的内容必须为奇数,也就是要求最低有效字节的最低有效位为“1”。
如果当发送端发送的PPP数据帧的协议域字段不符合上述规定,接收端则会认为此数据帧是不可识别的。接收端向发送端发送一个Protocol-Reject报文,在该报文尾部将填充被拒绝报文的协议号。
  • Information域
Information域最大长度是1500字节,其中包括填充域的内容。Information域的最大长度称为最大接收单元MRU(Maximum Receive Unit)。MRU的缺省值为1500字节,在实际应用当中可根据实际需要进行MRU的协商。
如果Information域长度不足,可被填充,但不是必须的。如果填充则需通信双方的两端能辨认出填充信息和真正需要传送的信息,方可正常通信。
  • FCS域
FCS域的功能主要对PPP数据帧传输的正确性进行检测。
在数据帧中引入了一些传输的保证机制,会引入更多的开销,这样可能会增加应用层交互的延迟。

 

 

 

 

 

 

  1. 通信双方开始建立PPP链路时,先进入到Establish阶段。
  2. 在Establish阶段,(发送配置请求,回复ack报文)PPP链路进行LCP协商。协商内容包括工作方式是SP(Single-link PPP)还是MP(Multilink PPP)、最大接收单元MRU(Maximum Receive Unit)、验证方式和魔术字(magic number)等选项。LCP协商成功后进入Opened状态,表示底层链路已经建立。
  3. 如果配置了验证,将进入Authenticate阶段,开始CHAP或PAP验证。如果没有配置验证,则直接进入Network阶段。
  4. 在Authenticate阶段,如果验证失败,进入Terminate阶段,拆除链路,LCP状态转为Down。如果验证成功,进入Network阶段,此时LCP状态仍为Opened。
  5. 在Network阶段,PPP链路进行NCP协商。通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。只有相应的网络层协议协商成功后,该网络层协议才可以通过这条PPP链路发送报文。

 

 

NCP协商包括IPCP(IP Control Protocol)、MPLSCP(MPLS Control Protocol)等协商。IPCP协商内容主要包括双方的IP地址。
  1. NCP协商成功后,PPP链路将一直保持通信。PPP运行过程中,可以随时中断连接,物理链路断开、认证失败、超时定时器时间到、管理员通过配置关闭连接等动作都可能导致链路进入Terminate阶段。

    7. 在Terminate阶段,如果所有的资源都被释放,通信双方将回到Dead阶段,直到通信双方重新建立PPP连接,开始新的PPP链路建立。

PAP与CHAP认证

  

 

 

  • 被验证方把本地用户名和口令发送到验证方。
  • 验证方根据本地用户表查看是否有被验证方的用户名
  • 若有,则查看口令是否正确,若口令正确,则认证通过;若口令不正确,则认证失败。
  • 若没有,则认证失败

 

 

CHAP单向验证过程分为两种情况:验证方配置了用户名和验证方没有配置用户名。推荐使用验证方配置用户名的方式,这样可以对验证方的用户名进行确认。
被认证方接口必须配置用户名,认证方接口配置用户名对应被认证方密码可以配置接口或aaa
,认证方接口没有配置用户名对应被认证方密码必须配置接口下
  • 验证方配置了用户名的验证过程
  • 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge),并同时将本端的用户名附带上一起发送给被验证方。
  • 被验证方接到验证方的验证请求后,先检查本端接口上是否配置了ppp chap password命令,如果配置了该命令,则被验证方用报文ID、命令中配置的用户密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方(Response)。如果接口上未配置ppp chap password命令,则根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,用报文ID、此用户的密钥(密码)和MD5算法对该随机报文进行加密,将生成的密文和被验证方自己的用户名发回验证方(Response)。
  • 验证方用报文ID和自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,若比较结果一致,认证通过,若比较结果不一致,认证失败。
  • 验证方没有配置用户名的验证过程
  • 验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文(Challenge)。
  • 被验证方接到验证方的验证请求后,利用报文ID、ppp chap password命令配置的CHAP密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方(Response)。
  • 验证方用自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,若比较结果一致,认证通过,若比较结果不一致,认证失败。
过程如下
认证方接口配置用户名,挑战报文携带用户名,被认证方使用此用户的密钥进行加密,发回认证方的时候携带加密后的字段+接口用户名
认证方收到后会根据被认证方携带的用户名去查找本地此用户对应的密钥进行加密比对一致就通过

PPPOE

pppoe 是在以太链路上使用ppp协议进行数据包的封装,因为ppp链路是点到点链路,没有广播,在家用adsl拨号场景下需要更多的点到点链路,会造成基础线路资源极大的浪费,而以太网支持广播,但自身不支持认证,所以就有了pppoe的出现,ppp over ethernet

 

 

 

 

Discovery阶段
Discovery阶段由四个过程组成。
  1. PPPoE Client广播发送一个PADI(PPPoE Active Discovery Initial)报文,在此报文中包含PPPoE Client想要得到的服务类型信息。

     

     

  1. 所有的PPPoE Server收到PADI报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个PADO(PPPoE Active Discovery Offer)报文。

     

     

  1. 根据网络的拓扑结构,PPPoE Client可能收到多个PPPoE Server发送的PADO报文,PPPoE Client选择最先收到的PADO报文对应的PPPoE Server做为自己的PPPoE Server,并单播发送一个PADR(PPPoE Active Discovery Request)报文。

     

     

  1. PPPoE Server产生一个唯一的会话ID(Session ID),标识和PPPoE Client的这个会话,通过发送一个PADS(PPPoE Active Discovery Session-confirmation)报文把会话ID发送给PPPoE Client,会话建立成功后便进入PPPoE Session阶段。

     

     

完成之后通信双方都会知道PPPoE的Session_ID以及对方的以太网地址,它们共同确定了唯一的PPPoE Session。
Session阶段
PPPoE Session阶段可划分为两部分,一是PPP协商阶段,二是PPP数据传输阶段。
PPPoE Session上的PPP协商和普通的PPP协商方式一致,分为LCP、认证、NCP三个阶段。
  1. LCP阶段主要完成建立、配置和检测数据链路连接。
  2. LCP协商成功后,开始进行认证,认证协议类型由LCP协商结果(CHAP或者PAP)决定。
  3. 认证成功后,PPP进入NCP阶段。NCP是一个协议族,用于配置不同的网络层协议,常用的是IP控制协议(IPCP),它主要负责协商用户的IP地址和DNS服务器地址。
PPPoE Session的PPP协商成功后,就可以承载PPP数据报文。
在PPPoE Session阶段所有的以太网数据包都是单播发送的。
Terminate阶段
PPP通信双方可以使用PPP协议自身来结束PPPoE会话,当无法使用PPP协议结束会话时可以使用PADT(PPPoE Active Discovery Terminate)报文。
进入PPPoE Session阶段后,PPPoE Client和PPPoE Server都可以通过发送PADT报文的方式来结束PPPoE连接。PADT数据包可以在会话建立以后的任意时刻单播发送。在发送或接收到PADT后,就不允许再使用该会话发送PPP流量了。

PPP PAP与CHAP认证配置

拓扑

  

 

 

PAP认证:
  配置要点,客户端需要在接口配置用户名密码,认证过程需要主动把接口配置的用户名密码发送给服务端进行认证,服务端需要在本端aaa配置相应的用户名密码,server-type为ppp,接口开启pap认证
client端 interface Serial0
/0/0 link-protocol ppp ppp pap local-user test password simple test123 ip address 12.1.1.1 255.255.255.252 server端 aaa local-user test password cipher test123 local-user dark service-type ppp interface Serial0/0/0 link-protocol ppp ppp authentication-mode pap ip address 12.1.1.2 255.255.255.252

验证

 

 

 

 

CHAP认证:
  配置要点,两端接口chap用户名必须配置,接口可以不配置chap用户密码,使用local用户密码进行验证,此外认证方与被认证方接口用户名无需配置一致,只需要local用户与对方接口用户密码一致即可通过认证

client端

aaa

local-user test password cipher O>Sr/xA!t<:z9:%F`[a=}\'4#
local-user test service-type ppp

interface Serial0/0/0
link-protocol ppp
ppp chap user test
ip address 12.1.1.1 255.255.255.252

 

server 端

aaa
local-user test password cipher O>Sr/xA!t<:z9:%F`[a=}\'4#
local-user test service-type ppp

interface Serial0/0/0
link-protocol ppp
ppp chap user test
ip address 12.1.1.1 255.255.255.252

验证

 

 

 

 

 

PPPOE 配置
    配置要点,server端需要配置vt模板和aaa用户,可配置地址池给客户端分配地址使用,可以使用ipcp推送dns配置,cilent端需要配置dialer接口,在端口绑定dialer接口
   server端配置

aaa

local-user test password cipher %$%$h[N|$6~U{T%b/20~1P-Qaay#%$%$
local-user test service-type ppp

ip pool 1
gateway-list 10.0.0.1
network 10.0.0.0 mask 255.255.255.0

interface Virtual-Template1
ppp authentication-mode chap
remote address pool 1
ppp chap user test
ppp ipcp dns 8.8.8.8
ip address 10.0.0.1 255.255.255.0

interface GigabitEthernet0/0/0
pppoe-server bind Virtual-Template 1


client端配置

aaa
local-user test password cipher %$%$|L!;K*)DVT,1I2-Pd9|BacpC%$%$
local-user test service-type ppp

interface Dialer1
link-protocol ppp
ppp chap user test
ip address ppp-negotiate
dialer user test
dialer bundle 1

interface GigabitEthernet0/0/0
pppoe-client dial-bundle-number 1

验证