[PPPOE]报文交互分析

##1.简介
PPPoE(PPP Over Ethernet)协议是在点到点链路上承载网络层数据包的一种链路层协议,由于它能够提供用户验证、易于扩充,并且支持同/异步通信,因而获得广泛应用
PPPoE主要协议标准:RFC2516
[PPPOE]报文交互分析_第1张图片 “图-PPPOE交互示意图”
#2.交互
##2.1.发现阶段(PPPoE Discovery)
PPPOE发现阶段的交互过程主要有四个包,即PADI,PADO,PADR,PADS。PPPoE Discovery的协议类型值为0x8863。
PPPoE Discovery交互示意图 “图-PPPoE Discovery交互示意图”
###2.1.1.PADI(Active Discovery Initiation)
用户主机发出有效发现初始包(PADI)。以太网目的地址为广播地址(FF:FF:FF:FF:FF:FF),CODE字段为0x09, SESSION_ID为0x0000。
[PPPOE]报文交互分析_第2张图片 “图-PADI详细报文”
###2.1.2.PADO(Active Discovery Offer)
接入设备收到在服务范围内的PADI包后,发送有效发现提供包(PADO)以响应请求。其CODE字段为0x07,SESSION_ID为0x0000。PADO包必须包含一个接入设备名称类型(AC-Name)的标签(标签类型字段为0x0102)以及一个或多个服务名称类型标签,表明可向用户主机提供的服务种类。
[PPPOE]报文交互分析_第3张图片 “图-PADO详细报文”
###2.1.3.PADR(Active Discovery Request)
用户主机在可能收到的多个PADO包中选择一个合适的接入设备,选择的原则是根据PADO中接入设备名称类型标签和服务名称类型标签的内容。然后向所选择的接入设备发送PPPOE有效发现请求(PADR)包。其CODE字段为0x19,SESSION_ID为0x0000。PADR包必须包一个服务名称类型标签,确定向接入设备请求的服务种类。当一个用户主机在确定时间没有收到PADO,他会重发一个PADI,同时等待两倍的时间。这种过程可以根据需要重复多次。
[PPPOE]报文交互分析_第4张图片 “图-PADR详细报文”
###2.1.4.PADS(Active Discovery Session-confirmation)
接入设备收到PADR包后准备开始PPP会话,它发送一个有效发现会话确认(PADS)包。其CODE字段为0x65,SESSION_ID为接入设备所产生的一个唯一的PPPOE会话标识号码。
[PPPOE]报文交互分析_第5张图片 “图-PADS详细报文”
##2.2.会话阶段
PPPoE会话阶段主要分LCP协商阶段,认证阶段,IPCP阶段等,在这些阶段顺利完成后,就可以进行数据传输了。
###2.2.1.链路控制协议LCP(Link Control Protocol)
此阶段主要是协商链路的一些参数,如最大接收单元MRU、Magic Number,以及后续认证时使用的协议等。LCP协商分为Configure Request,Configure Ack,Terminate Request,Echo Request。
[PPPOE]报文交互分析_第6张图片 “图-LCP交互示意图”

    SessionID就是PADS获得的SessionID,主要协商了MRU(Maximun Receive Ubit),并且提出认证使用的Magic Number。一般而言,MRU和MTU取值相同,PPPOE的最大MTU不能超过1492。计算方法如下:
    首先,以太网帧大小限制:
    Ethernet MinSize = 64 Byte
    Ethernet MaxSize = 1518 Byte
    去掉以太网帧头(6字节SRCMAC+6字节DSTMAC+2字节TYPE+4字节CRC)后的净荷为:
    EthernetIP MTU =1518–18= 1500 B
    所以,再去掉(6字节PPPoE_SESSION+2字节PPP_HEADER)的开销,所以PPPOE的MRU最大值为:
    PPPoE MTU/MRU=1500–8=1492B。
    Magic-number选项用来协商双方的魔术字,两端魔术字不能重复,魔术字可用来检测链路的环回情况。
    该选项提供了一种探测短路连接和其它数据链路层异常的方法当一方接收到带有魔数选项的配置请求数据帧后,将接收到的魔数与上次发送的魔数进行比较,如果不相同就认为没有发生短路。如果两个魔数相同,则需要发送一个携带不同魔数的配置否认帧,然后将接收到的魔数与发送的魔数进行比较。
    在广域链路上,最常用的一种检测链路的方法就是在远端将发送和接受短接成环路,在本端发送的信号如果能被自己成功的接受到,那么线路就有可能是Ok的,这就是LoopBack测试。如果环路在测试之后并未撤掉,PPP又没有引如Magic-Number的话,就可能自己和自己建立PPP关系。

[PPPOE]报文交互分析_第7张图片 “图-C->S Configure Request”
[PPPOE]报文交互分析_第8张图片 “图-S->C Configure Ack”
[PPPOE]报文交互分析_第9张图片 “图-S->C Configure Request”
[PPPOE]报文交互分析_第10张图片 “图-C->S Configure Ack”
[PPPOE]报文交互分析_第11张图片 “图-C->S echo”
[PPPOE]报文交互分析_第12张图片 “图-S->C echo”
###2.2.2.认证阶段(网络层控制协议NCP)
认证阶段务器端将验证客户端的合法性。最常见的两种就是PAP和CHAP;
PAP(Password Authentication Protocol)验证为两次握手验证,密码为明文。
PAP验证的过程如下:
(1)被验证方发送用户名和密码到验证方;
(2)验证方根据本端用户表查看是否有此用户以及密码是否正确,然后返回不同的响应。
注意:PAP不是一种安全的验证协议。当验证时,口令以明文方式在链路上发送,并且由于完成PPP链路建立后,被验证方会不停地在链路上反复发送用户名和口令,直到身份验证过程结束,所以不能防止攻击。
CHAP(Challenge-Handshake Authentication Protocol)验证为三次握手验证,密码为密文(密钥)。
CHAP验证过程如下:
(1)Challenge:验证方主动发起验证请求,验证方向被验证方发送一些随机产生的报文,并同时将本端的用户名附带上一起发送给被验证方;
(2)Response:若被验证方接到验证方的验证请求后,检查本端接口上是否配置了缺省的CHAP密码,如果配置了则被验证方利用报文ID、该缺省密码和MD5算法对该随机报文进行加密,将生成的密文和自己的用户名发回验证方;若被验证方检查发现本端接口上没有配置缺省的CHAP密码,则被验证方根据此报文中验证方的用户名在本端的用户表查找该用户对应的密码,如果在用户表找到了与验证方用户名相同的用户,便利用报文ID、此用户的密钥(密码)和MD5算法对该随机报文进行加密,将生成的密文和被验证方自己的用户名发回验证方;
(3)result:验证方用自己保存的被验证方密码和MD5算法对原随机报文加密,比较二者的密文,根据比较结果返回不同的响应。

[PPPOE]报文交互分析_第13张图片 “图-S->C Challenge”
[PPPOE]报文交互分析_第14张图片 “图-C->S Response”
[PPPOE]报文交互分析_第15张图片 “图-S->C Sucess”
###2.2.3.IPCP(IP Control Protocol)阶段
此阶段进行IP、DNS、WINS等的协商。
IPCP交互示意图 “图-IPCP交互示意图”

[PPPOE]报文交互分析_第16张图片 “图-S->C Configure Request”
[PPPOE]报文交互分析_第17张图片 “图-C->S Configure Request”
[PPPOE]报文交互分析_第18张图片 “图-C->S Configure Ack”
[PPPOE]报文交互分析_第19张图片 “图-S->C Configure Nak”
[PPPOE]报文交互分析_第20张图片 “图-C->S Configure Request”
[PPPOE]报文交互分析_第21张图片 “图-S->C Configure Ack”

##2.3.数据传输
[PPPOE]报文交互分析_第22张图片 “图-pppoe数据传输”

点击跳转百度百科pppoe参考

你可能感兴趣的:(PPPOE专栏)