最新pppoe报文深入了解.docx
《最新pppoe报文深入了解.docx》由会员分享,可在线阅读,更多相关《最新pppoe报文深入了解.docx(25页珍藏版)》请在冰豆网上搜索。
![最新pppoe报文深入了解.docx](https://file1.bdocx.com/fileroot1/2022-10/25/ee9a6e94-ef89-4558-830a-c88285ba51eb/ee9a6e94-ef89-4558-830a-c88285ba51eb1.gif)
最新pppoe报文深入了解
第一天:
pppoe的数据包深入了解,点对点协议(ppp)
Pppoe分为发现阶段和会话阶段,发现阶段分为PADI,PADO,PADR,PADS.
pppoe的数据报文依次为目的MAC(6字节=48bit),源MAC(6字节),协议类型(2字节为ox8863),版本(VER4bit为0001),字段和类型(TYPE4bit0001),代码(CODE8bit),版本标识号码(SESSION-ID16bit为ox0000),长度(LENGTH16bit),静载荷(数据域)。
发现报文的数据域格式为TAG(类型-长度),主机名称(15个字节),TAG(类型-长度),主机标识符(4个字节),TAG(类型-长度),AC-Cookie(18个字节)。
采用的是TLV(类型-长度-值)
阶段
源MAC
目的MAC
CODE
48bit
48bit
8bit
PADI
主机A
广播(FF:
FF:
FF:
FF:
FF:
FF)
Ox09
PADO
服务器B
主机A
Ox07
PADR
主机A
服务器B
Ox19
PADS
服务器B
主机A
Ox65
PPPOE数据报文中Tag(标记)的格式
对于发现阶段的PPPOE数据报文而言,它的净载荷可能包含零个或多个Tag(标记),实际上这些标记的意义非常类似于PPP配置参数选项,它同样也是要经过协商的。
对于PPPOE协议而言,没有像PPP的配置参数选项那样定义了很多细节,而只是一个初略的定义,因此在实际当中实现这个过程会依据不同厂商的设备有不同。
首先还是让我们看一下承载在PPPOE报文数据域中的标记封装格式,如图2。
类型
长度
数据
(图2标记的封装格式)
从图2中可以看出,标记的封装格式采用的是大家所熟知的TLV结构,也即是(类型+长度+数据)。
标记的类型域为2个字节,下表列出了各种标记类型的含义:
标记类型
标记说明
0x0000
表示PPPOE报文数据域中一串标记的结束,为了保证版本的兼容性而保留,在有些报文中有应用。
0x0101
服务名,主要用来表明网络侧所能提供给用户的一些服务。
0x0102
访问集中器名,当用户侧接收到了AC的回应的PADO报文时,就可获从所携带的标记中获知访问集中器的名子,而且还可以据此来选择相应的访问集中器。
0x0103
主机唯一标识,类似于PPP数据报文中的标识域,主要是用来匹配发送和接收端的,因为对于广播式的网络中会同时存在很多个PPPOE的数据报文。
0x0104
AC-Cookies,主要被用来防止恶意性DOS功击。
0x0105
销售商的标识符。
0x0110
中继会话ID,对于PPPOE的数据报文也同样可以像DHCP报文一样被中断到另外的AC上终结,这个字段则是用来维护另一个连接的。
0x0201
服务名错误,当请求的服务名不被对端所接受时,会在响应的报文中携带这个标记。
0x0202
访问集中器名出错。
0x0203
一般性错误。
1.PADI
PPPOE发现阶段的第一步,也即是由用户首先发送这样一个报文。
用户主机是以广播的方式发送这个报文,所以该报文所对应的以太网帧的目的地址域应填充为全1,而源地址域填充用户主机的MAC地址。
广播包可能会被多个访问集中器接收到。
2.PADO
PPPOE发现阶段的第二步,也即是由访问集中器回应各用户主机发送的PADI报文,此时该报文所对应的以太网帧的源地址填充访问集中器的MAC地址,而目的地址则填充从PADI中所获取的用户主机的MAC地址。
3.PADR
PPPOE发现阶段的第三步,也即是由用户主机向访问服务器发送单播的请求报文。
当用户主机收到PADO报文后,会从这些报文中挑选一个访问集中器作为后续会话的对象。
由于用户主机在收到PADO报文后,就获知了访问集中器的MAC地址,因此PADR报文所以应的以太网帧的源地址填充用户主机的MAC地址,而以太网的目的地址填充为访问集中器的MAC地址。
4.PADS
PPPOE发现阶段的第四步,也即是最后一步,此时访问集中器当收到PADR报文时,就准备进入开始一个PPP的会话了,而此时访问集中器会为在这个会话分配一个唯一的会话进程ID,并在发送给主机的PADS报文中携带上这个会话ID。
当然如果访问集中器不满足用户所申请的服务的话,则会向用户发送一个PADS报文,而其中携带一个服务名错误的标记,而且此时该PADS报文中的会话ID填充0x0000。
5.PADT
PADT报文可能在会话进行开始之后的任意时间内被发送,主要是用来终止一个PPPOE会话的止。
它可以由主机或访问集中器发送,目的地址填充为对端的以太网的MAC地址。
会话阶段:
(ppp全过程)
数据帧在数据域中,不变的有如下信息:
协议的组成:
–链路控制协议(LCP):
建立、拆除和监控PPP数据链路
–网络控制协议(NCP):
协商网络层协议
–PPP扩展协议:
如压缩、链路捆绑
–PPP验证协议:
如PAP、CHAP
Ppp帧格式:
标志字段F为0x7E(0x表示7E),但地址字段A和控制字段C都是固定不变的,分别为0xFF、0x03。
PPP协议不是面向比特的,因而所有的PPP帧长度都是整数个字节。
与HDLC不同的是多了2个字节的协议字段。
协议字段不同,后面的信息字段类型就不同。
如:
0x0021——信息字段是IP数据报
0xC021——信息字段是链路控制数据LCP
0x8021——信息字段是网络控制数据NCP
0xC023——信息字段是安全性认证PAP
0xC025——信息字段是LQR
0xC223——信息字段是安全性认证CHAP
当信息字段中出现和标志字段一样的比特0x7E时,就必须采取一些措施。
因PPP协议是面向字符型的,所以它不能采用HDLC所使用的零比特插入法,而是使用一种特殊的字符填充。
具体的做法是将信息字段中出现的每一个0x7E字节转变成2字节序列(0x7D,0x5E)。
若信息字段中出现一个0x7D的字节,则将其转变成2字节序列(0x7D,0x5D)。
若信息字段中出现ASCII码的控制字符,则在该字符前面要加入一个0x7D字节。
这样做的目的是防止这些表面上的ASCII码控制字符被错误地解释为控制字符。
•Flag标志域:
每一个PPP数据帧均是以一个标志字节起始和结束的,该字节为0x7E。
•Address地址域:
该字节为0xFF。
由于PPP协议是被运用在点对点的链路上,点对点的链路可以唯一标示对方,因此使用PPP协议互连的通信设备的两端无须知道对方的数据链路层地址,所以该字节已无任何意义,按照协议的规定将该字节填充为全1的广播地址。
•Control控制域:
也没有实际意义,按照协议的规定通信双方将该字节的内容填充为0x03。
•Protocol协议域:
用来区分PPP数据帧中信息域所承载的数据报文的内容。
•Information:
信息域:
缺省时最大长度不能超过1500字节,其中包括填充域的内容。
•FCS校验域:
主要是对PPP数据帧传输的正确性进行检测的。
•Code域表明了此报文为哪种PPP协商报文;Identifier域用于进行协商报文的匹配;Length域为此协商报文长度(包含Code及Identifier域);Data域所包含的为协商报文内容;Type为协商选项类型;其后的Length为此协商选项长度(包含Type域);紧接着的Data域为协商选项具体内容。
PPP主要由三类协议组成:
链路控制协议族(LCP)、网络控制协议族(NCP)和PPP扩展协议族。
其中,链路控制协议主要用于建立、拆除和监控PPP数据链路;网络控制协议族主要用于协商在该数据链路上所传输的网络层数据包的类型以及网络层协议自身需要的一些内容(如IPCP要协商IP地址等);PPP扩展协议族主要用于提供对PPP功能的进一步支持,实际上就是为提供一些特性服务,基于PPP协议框架设计的一些扩展协议。
同时,PPP还提供了用于网络安全方面的验证协议族(PAP和CHAP)。
1.LCP
LCP包有3类:
1.链路配置包,用于建立和配置链路(Configure-Request、Configure-Ack、Configure-Nak和Configure-Reject)。
2.链路结束包被用于结束一个链路(Terminate-Request和Terminate-Ack)
3.链路维修包被用于管理和调试一个链路(Code-Reject、Protocol-Reject、Echo-Request、Echo-Reply和Discard-Request)。
确切的说一个LCP包被封装在PPP信息域中,该PPP 协议域表示类型为十六进制c021(链路控制协议)。
8
16
32bit
Variable
Code
Identifier(匹配请求和响应报文)
Length
Data
Code―十进制值,表示LCP数据包类型。
o1-Configure-Request配置请求报文
o2-Configure-Ack配置确定报文
o3-Configure-Nak支持对端的协商选项但不认可该项协商的内容,回复自己认可的配置方式并放入其中
o4-Configure-Reject配置拒接
o5-Terminate-Request终止请求
o6-Terminate-Ack终止确认
o7-Code-Reject代码拒绝
o8-Protocol-Reject
o9-Echo-Request
o10-Echo-Reply
o11-Discard-Request
o12-Link-QualityRepor
Identifier―十进制值,表示匹配Request和Reply。
Length―LCP数据包长度,包括Code、Identifier、Length和Data字段。
Data―可变长字段,可能包括一或多个配置选项。
•Address-and-Control-Field-Compress地址控制字段压缩
•Authentication-Protocol身份验证协议
•Protocol-Field-Compress协议域压缩
•Maximum-Recieve-Unit最大接受单元(4个字节)
•Multilink-Protocol多重协议(5个字节)
•Magic-Number避免在PPP帧的循环使用(6个字节)
•Callback回调(3个字节)
•MultilinkMRRU多链路协议(4个字节)
•Multilinkendpointdiscriminator:
多链路端点鉴别(23个字节)
•Linkdiscriminator:
l链路鉴别。
(4个字节)
Request:
Ack:
Terminationrequest报文:
Terminationack报文:
2.NCP:
PPP扩展认证协议(EAP)是一个用于PPP认证的通用协议,可以支持多种认证方法。
EAP并不在链路控制阶段指定认证方法,而是把这个过程推迟到认证阶段。
这样认证方就可以在得到更多的信息以后再决定使用什么认证方法。
这种机制还允许PPP认证方简单地把收到的认证报文透传给后方的认证服务器,由后方的认证服务器来真正实现各种认证方法。
1.在链路阶段完成以后,认证方向对端发送一个或多个请求报文。
在请求报文中有一个类型字用来指明认证方所请求的信息类型,例如是对端的ID、MD5的挑战字、一次密码(O