PPPoE报文格式
各个字段解释如下:
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头部的长度。
工作过程:
Discovery阶段完成后通信双方都会知道PPPoE的Session_ID 以及对方以太网地址,它们共同确定了唯一的PPPoE Session。
PPPoE Discovery阶段的工作为PPPoE Client和PPPoE之间建立了Session,之后PPPoE便进入了Session阶段,Session阶段可划分为两部分,一是PPP协商阶段,二是PPP报文传输阶段。PPPoE Session上的PPP协商和普通的PPP协商方式一致,分为LCP、认证、NCP三个阶段。
PPP通信双方应该使用PPP协议自身(比如PPP终结报文)来结束PPPoE会话,但在无法使用PPP协议结束会话时可以使用PADT报文。
进入PPPoE Session阶段后,PPPoE Client和PPPoE Server都可以通过发送PADT报文的方式来结束PPPoE连接。PADT数据包可以在会话建立以后的任意时刻单播发送。在发送或接收到PADT后,就不允许再使用该会话发送PPP流量了,即使是常规的PPP结束数据包也不允许发送。
认证方式:
PAP是两次握手,明文传输用户密码进行认证;CHAP是三次握手,传输MD5值进行认证。
PAP
CHAP