1.PPPOE的数据报文格式
4bits 4bits 8 bits 16bits
版本
|
类型
|
代码
|
Session ID
|
长度
|
净载荷
|
16bits
PPPOE最开始的4位是版本域,协议中给出了明确的规定,这个域的内容填充为0x01
紧接着版本位的后4位是类型域,协议中同样规定,这个域的内容填充为ox01
代码域占用一个字节,对于PPPOE的不同阶段,这个域的内容也是不一样的
会话ID占用2个字节,当访问集中器还未分配唯一的会话ID给用户主机的话,该域填充0x0000,一旦主机获得会话ID后,那么后续的所有报文中该域必须填充那个唯一的会话ID值
长度域为2个字节,用来指示PPPOE数据报文中净载荷的长度
数据域有时也称为净载荷域,在PPPOE的不通阶段改域内容会有很大不同,在PPPOE的发现阶段,该域会填充一些TAG,而在PPPOE会话阶段,该域携带的PPP的报文
2.PPPOE发现阶段的数据报文
PPPOE的发现阶段可分为四步,其实这个过程也是PPPOE四种数据报文的交换的一个过程。当完成这四步后,用户主机与访问集中器双方就能获知对方的MAC地址和唯一的会话ID号,从而进入到下一个阶段(PPPOE的会话阶段)。实际上双方在互相知道了对方的MAC地址后,就已经在广播式的网络上确定了一一的对应关系,为了保证这个连接的有效性,同时使PPPOE协议能更加灵活的运用,因此还加入了会话ID字段,通过这两个条件就可完成确定双方点对点的关系。
在这个阶段一开始,由于接入用户并不知道访问集中器的MAC地址,则使用类似于ARP解析的过程的机制来获取访问集中器的MAC地址。首先由接入用户侧发起一个初始化的广播报文,对于访问集中器如果配置了PPPOE的业务时,它会时实检测网络上的数据包,当发现以太网数据帧中所承载的是PPPOE报文时(通过协议域的内容来区分),就会将其交给相应的模块去处理。当收到初始化报文后,访问集中器会向该用户回应一个报文。如果网络上存在很多这样的访问集中器且都收到了用户侧发送的初始化报文时,它们也都会向用户侧会送一个确认报文,如果该用户收到这个报文后,则会依据报文中所携带的内容或本端的一些配置来选择一个唯一的访问集中器进行会话。到此时已完成了前两步了,那么剩下的两步则是协商一些所提供的服务选项和获取PPPOE会话阶段所必须的会话ID值。
在这个阶段,所有数据报文是被承载在以太网的数据域中的,而且以太网数据帧的协议域始终为0x8863。下面我们结合具体的数据报文的内容,来具体的讲解这四步的过程。
PPPOE数据报文中Tag(标记)的格式
对于发现阶段的PPPOE数据报文而言,它的净载荷可能包含零个或多个Tag(标记),实际上这些标记的意义非常类似于PPP配置参数选项,它同样也是要经过协商的。对于PPPOE协议而言,没有像PPP的配置参数选项那样定义了很多细节,而只是一个初略的定义,因此在实际当中实现这个过程会依据不同厂商的设备有不同。首先还是让我们看一下承载在PPPOE报文数据域中的标记封装格式:
16bits 16bits
类型
|
标记说明
|
0x0000
|
表示在报文数据域中一串标记的结束,
|
0x0101
|
服务名,主要用来表明网络侧所能提供给用户的一些服务
|
0x0102
|
访问集中器名,当用户侧接收到AC的PADO报文时,就可从携带的标记中获得访问集中器的名字,而且还可以据此选择访问集中器
|
0x0103
|
主机唯一标识
|
0x0104
|
主要用来防止恶意DOS攻击
|
0x0105
|
销售商的标识符
|
0x0110
|
中继会话ID
|
0x0201
|
服务名错误,当请求的服务名不被对端所接受时,会在响应的报文中携带这个标志
|
0x0202
|
访问集中器名出错
|
0x0203
|
一般性错误
|
PADI(PPPOE acitive diacovery initation)报文 (0x09)
FF FF FF FF FF FF 00 10 10 04 98 0A A9 88 63 11 09 00 00 00 0C
01 03 00 04 01 00 00 00 01 01 00 00
以太网帧的目的地址 源地址 协议域 PPPOE数据报文 代码域 会话ID 长度域 TAG TAG TAG数据
的版本和类型域 类型 长度
报文中有2个TAG,0103 ,0101
协议域8863表示PPPOE发现,8864表示PPPOE会话
PADO(PPPOE active discovery offer)报文(ox07)
00 10 10 04 98 0A A9 00 03 04 03 06 06 88 63 11 07 00 00 00 1A 01 02 00 06 01 00 00 00 34 56
以太网帧的目的地址 源地址 协议域 PPPOE数据报文 代码域 会话ID 长度域 TAG TAG TAG数据
的版本和类型域 类型 长度
10 03 00 04 01 00 00 00 01 01 00 00 00 00 00 00
报文中有4个TAG,在PADI的基础上又多了2个,一个是访问集中器名,一个是标记结束标志。
PADR(PPPOE active discovery request)报文(0x19)
00 03 04 03 06 06 00 10 10 04 98 0A A9 88 63 11 19 00 00 00 0C 01 03 00 04 01 00 00 00 01 01 00 00
以太网帧的目的地址 源地址 协议域 PPPOE数据报文 代码域 会话ID 长度域 TAG TAG TAG数据
的版本和类型域 类型 长度
当收到PADO后用户主机会发送PADR
PADS(PPPOE active discovery session-confirmation)报文(ox65)
00 10 10 04 98 0A A9 00 03 04 03 06 06 88 63 11 65 01 6B 00 10 01 03 00 04 01 00 00 00
以太网帧的目的地址 源地址 协议域 PPPOE数据报文 代码域 会话ID 长度域 TAG TAG TAG数据
的版本和类型域 类型 长度
01 01 00 00 00 00 00 00
当访问集中器收到PADR后分配唯一会话ID,发送给用户一个PADS报文;如果访问集中器不满足申请的服务,发送到PADS中会携带服务器名错误的标记,且此时PADS的报文中会话ID填充为0x0000
PADT(PPPOE active discovery terminate)报文(0xA7)
PADT报文可以在会话开始后的任何时间发送,主要用来终止一个会话,可以由主机或访问集中器发送,
00 03 04 03 06 06 00 10 10 04 98 0A A9 88 63 11 A7 01 6B 00 00
以太网帧的目的地址 源地址 协议域 PPPOE数据报文 代码域 会话ID 长度域
的版本和类型域
这个报文中不含有任何TAG
PPPOE的报文是被承载在以太网的 数据域中传送
发现阶段遇到4种报文 PADI PADO PADR PADS
PADT用来终止一个会话
在发现阶段,以太网协议域中值为0x8863,session中值为0x8864
阅读(3537) | 评论(0) | 转发(0) |