学学习网 手机版

学学习网

学习路径: 学习首页 > Internet > 网络管理 >

协议分析5- PPPOE Discovery协议解码详解

设置字体:
----------------------------------
PPPOE,全称Point-to-Point Protocol Over Ethernet,它工作在OSI的数据链路层,PPPOE协议提供了在广播式的网络(如以太网)中多台主机连接到远端的访问集中器(我们对目前能完成上述功能的设备为宽带接入服务器)上的一种标准。

1.PPPOE的工作原理

PPPOE协议共包括两个阶段,即PPPOE的发现阶段(PPPOE Discovery Stage)和PPPOE的会话阶段(PPPOE Session Stage)。而两者的主要区别在于只是在PPP的数据报文前封装了PPPOE的报文头。
当一个主机希望能够开始一个PPPOE会话时,它首先会在广播式的网络上寻找一个访问集中器,当然可能网络上会存在多个访问集中器时,对于主机而言则会根据各访问集中器(AC,Access Concentration)所能提供的服务或用户的预先的一些配置来进行相应的选择。当主机选择完了所需要的访问集中器后,就开始和访问集中器建立一个PPPOE会话进程。在这个过程中访问集中器会为每一个PPPOE会话分配一个唯一的进程ID,会话建立起来后就开始了PPPOE的会话阶段,在这个阶段中已建立好点对点连接的双方(这种点对点的结构与PPP不一样,它是一种逻辑上的点对点关系)就采用PPP协议来交换数据报文,从而完成一系列PPP的过程,最终将在这点对点的逻辑通道上进行网络层数据报的传送。

2.PPPOE的数据报文格式

我们简要介绍一下PPPOE的数据报文格式。PPPOE的数据报文是被封装在以太网帧的数据域内的。简单来说我们可能把PPPOE报文分成两大块,,一大块是PPPOE的数据报头,另一块则是PPPOE的净载荷(数据域),对于PPPOE报文数据域中的内容会随着会话过程的进行而不断改变。下图1为PPPOE的报文的格式:
版本 类型 代码 会话ID
长度域 净载荷(或数据域)
 
(图1  PPPOE数据报格式)
  • PPPOE数据报文最开始的4位为版本域,协议中给出了明确的规定,这个域的内容填充0x1。
  • 紧接在版本域后的4位是类型域,协议中同样规定,这个域的内容填充为0x1。
  • 代码域占用1个字节,对于PPPOE 的不同阶段这个域内的内容也是不一样的。
  • 会话ID点用2个字节,当访问集中器还未分配唯一的会话ID给用户主机的话,则该域内的内容必须填充为0x0000,一旦主机获取了会话ID后,那么在后续的所有报文中该域必须填充那个唯一的会话ID值。
  • 长度域为2个字节,用来指示PPPOE数据报文中净载荷的长度。
  • 数据域,有时也称之为净载荷域,在PPPOE的不同阶段该域内的数据内容会有很大的不同。在PPPOE的发现阶段时,该域内会填充一些Tag(标记);而在PPPOE的会话阶段,该域则携带的是PPP的报文。
这里我们主要来介绍一下PPPOE发现阶段的报文格式以及它的报文:

1)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 一般性错误。
----------------------------------
课程列表
重点难点
赞助链接