PPPoE 报文分析

转载自http://wenku.baidu.com/link?url=mWJ8HLNZ98Cc-E0RRPQohT35bsyBNAnQzB3DEG60v9ufXWhSAK5Y4oecTvzIue0Ky06snhbmoZSyAL1e6UV7oXcI0XxDieCBElU4kqQ0-BK


PPPoE报文的格式就是在以太网帧中携带PPP报文,如图所示




PPPoE报文的格式就是在以太网帧中携带PPP报文,如图所示。 
 
  
各个字段解释如下: 

  • Destination_address域:一个以太网单播目的地址或者以太网广播地址(0xffffffff)。对于Discovery数据包来说,该域的值是单播或者广播地址,PPPoE Client寻找PPPoE Server的过程使用广播地址,确认PPPoE Server后使用单播地址。对于Session阶段来说,该域必须是Discovery阶段已确定的通信对方的单播地址。
  • Source_address域:源设备的以太网MAC地址。  

  •  Ether_type:设置为0x8863(Discovery阶段或拆链阶段)或者0x8864(Session阶段)。

  •  Ver域:4bits,PPPoE版本号,值为0x1。
  •  Type域:4bits,PPPoE类型,值为0x1。  
  • Code域:8bits,PPPoE报文类型。Code域为0x00,表示会话数据。Code域为0x09,表示PADI报文;Code域为0x07,表示PADO或PADT报文;Code域为0x19,表示PADR报文;Code域为0x65,表示PADS报文。报文的具体情况请参见附录部分。
  • Session_ID域:16bits,对于一个给定的PPP会话,该值是一个固定值,并且与以太网Source_address和Destination_address一起实际地定义了一个PPP会话。值0xffff为将来的使用保留,不允许使用。  
  •  Length域:16bits,定义PPPoE的Payload域长度。不包括以太网头部和PPPoE头部的长度。
  • 数据域,有时也称之为净载荷域,在PPPOE的不同阶段该域内的数据内容会有很大的不同。在PPPOE的发现阶段时,该域内会填充一些Tag(标记);而在PPPOE的会话阶段,该域则携带的是标准的点对点协议包

下面分析一下PPP格式,转载自http://blog.chinaunix.net/uid-11639156-id-2379044.html

因为PPP是链路层协议,所以我们将它的数据单位称为帧,

7EFF03


7E
标志地址控制协议域信息域校验标志
1B1B1B2B缺省1500B2B1B
每一个PPP数据帧均是以一个标志字节起始和结束的,该字节为0x7E(这样很容易区分出每个PPP帧)
   紧接在起始标志字节后的一个字节是地址域,该字节为 0x FF 。我们熟知网络是分层的,且对等层之间进行相互通信,而下层为上层提供服务。当对等层进行通信时首先需获知对方的地址,而对不同的网络,在数据链路层则表现为需要知道对方的 MAC 地址、 X.121 地址、 ATM 地址等;在网络层则表现为需要知道对方的 IP 地址、 IPX 地址等;而在传输层则需要知道对方的协议端口号。例如如果两个以太网上的主机希望能够通信的话,首先发送端需获知对端的 MAC 地址。但由于 PPP协议是被运用在点对点的链路上的特殊性,它不像广播或多点访问的网络一样,因为点对点的链路就可以唯一标示对方,因此使用PPP协议互连的通信设备的两端无须知道对方的数据链路层地址,所以该字节已无任何意义,按照协议的规定将该字节填充为全1的广播地址。同地址域一样,PPP数据帧的控制域也没有实际意义,按照协议的规定通信双方将该字节的内容填充为0x03。(既然无意义,就可以随便赋值了吧,,只要大家都遵守一个标准就行)

PPP协议本身而言,我们最关心的内容应该是它的协议域和信息域。协议域可用来区分PPP数据帧中信息域所承载的数据报文的内容。协议域的内容必须依据ISO 3309的地址扩展机制所给出的规定。该机制规定协议域所填充的内容必须为奇数,也即是要求低字节的最低位为“1”,高字节的最低位为“0”。如果当发送端发送的PPP数据帧的协议域字段不符合上述规定,则接收端会认为此数据帧是不可识别的,那么接收端会向发送端发送一个Protocol-Reject报文,在该报文尾部将完整地填充被拒绝的报文。

 信息域缺省时最大长度不能超过1500字节,其中包括填充域的内容,1500字节大小等于PPP协议中配置参数选项MRUMaximum Receive Unit)的缺省值,在实际应用当中可根据实际需要进行信息域最大封装长度选项的协商。信息域如果不足1500字节时可被填充,但不是必须的,如果填充则需通信双方的两端能辨认出有用与无用的信息方可正常通信。
   协议域和信息域是需要合在一起看的,目前主要用到的协议类型有LCP、NCP和普通的IP协议,而他们相对应的协议域字段则为0×C021、0×8021和0×0021,可以看到应证了这句话:也即是要求低字节的最低位为“1”,高字节的最低位为“0”而后面的信息根据不同协议包含了不同的报文内容。

0×C021LCP数据报文校验
0×8021NCP数据报文校验
0×0021IP数据报文    校验

其实这3种不同协议就对应PPP协议在运行过程中的不同状态,我们可以很容易根据PPP帧的协议域就判断目前 处于PPP的哪个阶段。遇到PPP问题,我们通常通过抓包,然后判断PPP哪个阶段有问题,再进行分析和问题定位。注意一点的就是,NCP不是一种协议, 它的全称是网络控制协议,也就是说最后双方都遵循的数据传输协议,可以是IPCP,也可以是IPXCP。
    CRC 校验域主要是对PPP 数据帧传输的正确性进行检测的,当然在数据帧中引入了一些传输的保证机制是好的,但可以反过来说,同样我们会引入更多的开销,这样可能会增加应用层交互的延迟。
下图中给出了PPP的帧格式。

PPP帧是以标准HDLC标志字节(01111110)开始和结束的。

  接下来是地址字段,缺省情况下,被固定设成二进制数11111111,因为点到点线路的一个方向上只有一个接收方。

  地址字段后面是控制字段,缺省情况下,被固定设成二进制数00000011

  因为缺省情况下,地址字段、控制字段总是常数。因此,这两部分实际可以省略不要(需要通过LCP进行协商)。

        接下来是协议字段。用来标明后面携带的是什么类型的数据。其缺省大小为2个字节。但如果是LCP包,则可以是1字节。

        接下来是数据字段。其长度可变,缺省最大长度为1500字节。

        接下来是校验和字段,通常情况下是2个字节,但也可以是4字节。



  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值