pppoe协议

一、PPPOE:
PPPOE:是PPP over Ethernet,用于实现PPP在以太网上的传输。
PPPOE实质是在共享介质的网络中提供一条逻辑上的点到点链路。

二、PPPOE在 客户端和服务器 的交互过程

PPPOE分两个阶段:
PPPOE 发现阶段(PPPOE Discovery) [ether_type:0x8863]
PPPOE 会话阶段(PPPOE Session) [ether_type:0x8864]

1、PPPOE Discovery 阶段, 分为四步
第一步: PADI (PPPOE Active Discovery Initiation) [code:0x09]

cliet ----PADI----> server

含义:客户端广播一个PADI的请求,查找网络中的服务器
注:客户端发送的是广播地址

第二步:PADO (PPPOE Active Discovery Offer) [code:0x07]

server --->PADO----> client

含义: 服务器端相应一个PADO,将自己的一些信息告知客户端

第三步: PADR (PPPOE Active Discovery Requst) [code:0x19]

client --->PADR----> server

含义: 客户端向此服务器发送一PADR,请求会话号

第四步: PADS (PPPOE Active Discovery Session-confirmation)[code:0x65]

server --->PADS----> client

含义:服务器端相应一PADS,将分配的会话号告知对方。分配的会话号(Session ID 全程唯一不变)

2、PPPOE Session 阶段, 分三个过程:
过程一:LCP协商: (Link Control Protocol) [code:0x00;protocol:0xc021]

完成二层的建链和参数协商,主要是协商链路的一些参数,如最大接收单元MRU,后续认证时使用的协议等
LCP包有3类:
(1)链路配置包:用于建立和配置链路
协商过程:(协商过程中,client和server是平等的,都可以主动发起参数的协商)
client --->Configuration Request--->server
server --->Configuration ACK/NAK/Reject-->client
或:
server --->Configuration Request--->client
client --->Configuration ACK/NAK/Reject-->server

协商的方法:
一方发出提议,并等待对方意见[Configure-Request]
对方的意见无非三种:
a) [Configure-Ack]同意----应答ACK
b) [Configure-NAK]不同意---应答NAK,同时提出自己能接收的值,
如果己方能同意对方提出的新的值,则按照对方的提议重新发送一次提议,这样对方就能ACK了。
c) [Configure-Reject]不认识的属性----应答Reject

(2)链路结束包:用于结束一个链路
Terminate-Request(终止请求)
Terminate-Ack(终止应答)

(3)链路维修包:用于管理和调试一个链路.

Code-Reject(代码拒绝)
Protocol-Reject(协议拒绝)
Echo-Request(回波请求)
Echo-Reply(回波应答)
Discard-Request(抛弃请求)


过程二: 认证: [code:0x00;protocol:0xc023/0xc223]

服务器验证客户端的合法性,通过用户名和密码。最常见的有两种协议:PAP,CHAP
PAP认证: 发送的认证信息是明文,可以通过抓包工具看到[用户名、密码]
CHAP认证: 发送的认证信息是密文.

PAP认证采用2次握手:发送明文
client ---Authentication Request--->server
server ---Authentication ACK------->client

CHAP认证采用三次握手:
server ----Challenge-------> client
client ----Response -------> server
server ----Success -------->client
加密方法: client 接收到Challenge后,采用"one-way-hash"函数配合密钥计算出响应值发给server,
server端用自己计算的hash值校验响应值,两者如果匹配,就发送success给client

过程三: NCP协商: [code:0x00;protocal:0x8021]

使用IPCP协议,完成三层的配置。IP控制协议(IPCP)负责配置PPP链路的两端上IP协议传输。
在任何IP包可以被传输之前,PPP协议必须达到网络层协议阶段,IP控制协议必为打开状态。

过程四: 数据传输: [code:0x00;protocal:0x0021]
IP层通信


三、PPPOE的帧格式

以太网帧格式:

目的地址(6B) + 源地址(6B) + 帧类型域(2B) + 净载荷 + 帧校验
0x0800:IP协议
0x8100:VLAN协议
0x8863:PPPOE Discovery
0x8864:PPPOE Session

PPPOE数据报文格式:

版本(4bit) + 类型(4bit) + 代码code(1B) + 会话ID(2B) + 净载荷数据长度(2B) + 净载荷
0x09:PADI(PPPOE Discovery阶段)
0x07:PADO(PPPOE Discovery阶段)
0x19:PADR(PPPOE Discovery阶段)
0x65:PADS(PPPOE Discovery阶段)
0x00:在PPPOE Session阶段,code为0x00


其中,净载荷,在PPPOE Discovery阶段承载一些标记
在PPPOE Session阶段承载PPP数据报文

PPPOE Session阶段,净载荷数据格式:
protocol(2B) + code(1B) + identifier(1B) + datalen(2B) + data

protocol 取值:
0xc021:LCP协商
0xc023:PAP认证,验证用户名和密码------>

TAG_PPPOE_LOGIN
0xc223:CHAP认证 ------>TAG_PPPOE_LOGINCHAP
0x0021:IP层通信,IP包
0x8021:IP控制协议IPCP

当protocol为0xc021(LCP协商)时,code 取值:
code = 0x01 : Configuration Request (链路连接请求)
code = 0x02 : Configure-Ack (链路连接应答)
code = 0x03 : Configure-Nak
code = 0x04 : Configure-Reject
code = 0x05 : Terminate-Request(链路终止请求)
code = 0x06 : Terminate-Ack (链路终止应答)
code = 0x07 : Code-Reject
code = 0x08 : Protocol-Reject
code = 0x09 : Echo-Request
code = 0x0A : Echo-Reply
code = 0x0B : Discard-Request

当protocol为0xc023(PAP认证)时,code 取值:
code = 0x01 : Authenticate-Request(认证请求),数据中包含明文用户名、密码
code = 0x02 : Authenticate-Ack(认证应答)
code = 0x03 : Authenticate-Nak(认证无应答)

Authenticate-Request 数据data域格式如下:
用户名长度(1B) + 用户名 + 密码长度(1B) + 密码

当protocol为0xc223(CHAP认证)时,code取值:
code = 0x01 : 挑战 Challenge;
code = 0x02 : 应答 Response; 数据中包含加密的用户名/密码
code = 0x03 : 成功 Success;
code = 0x04 : 失败 Failure

当protocal为0x8021(IPCP协议)时,code取值:
code = 0x01 : Configuration Request (配置请求),数据中包含请求设置的IP地址
code = 0x02 : Configure-Ack (配置应答)
code = 0x03 : Configure-Nak
code = 0x04 : Configure-Reject
code = 0x05 : Terminate-Request(终止请求)
code = 0x06 : Terminate-Ack (终止应答)
code = 0x07 : Code-Reject

IPCP协议data域,为配置可选项,格式如下:
类型(1B) + 长度(1B) + 数据
0x01:IP地址(Addresses),IP-地址(IP-Addresses)配置选项的使用已经被反对了.建议用IP-地址(IP-Address)配置选项代替本选项
0x02:IP-压缩协议,本配置选项用于协商特定的压缩协议。在默认情况下,压缩不使用
0x03:IP地址(Address),格式如下:0x03 + 0x06 + IP地址(4B)
IP地址即4字节IP地址。如果是发送者发出的Configure-Request包,即表示要求的本端地址。如果全部4个八位字节都是零值,它表示请求对端提供IP-地址信息。缺省IP地址不被分配。


参考文档:
https://www.360docs.net/doc/564658614.html,/view/b8824c022f60ddccda38a0f1.html?from=search
https://www.360docs.net/doc/564658614.html,/view/118ad274580216fc700afd5f.html?from=search

相关主题
相关文档
最新文档