This is my study note of pppoe.

简述

1
PPPOE是一种点对点的协议,即一个节点只能访问另一个指定的节点。PPP协议主要工作在数据链路层,其最重要的功能是提供了身份验证功能,但是PPP协议虽然提供了身份验证的功能,但是不包含地址的信息,因此PPP协议无法直接运用在网络中,而PPPOE就是结合PPP协议身份验证的功能,在PPP协议的基础上将报文封装成PPPOE报文,实现点对点通信。

特点:

  • PPPOE实现了传统以太网上不能提供身份验证、加密以及压缩等功能
  • PPPOE通过唯一的Session ID可以很好的保障用户的安全性
  • PPPOE拨号上网让终端设备连接ISP从而连接宽带接入
  • 可用于调制解调器和数字用户线路等以太网线
  • PPP协议是一种C/S的协议,即客户端和服务端协议

PPPOE报文

Alt text

报文字段 说明
Ver域 PPPOE版本号,值为0x01
Type域 PPPOE类型,值为0x1
Code域 Code域为0x00,表示会话数据。Code域为0x09,表示PADI报文;Code域为0x07,表示PADO或PADT报文;Code域为0x19,表示PADR报文;Code域为0x65,表示PADS报文。
Session_ID 固定值
Length域 定义PPPoE的Payload域长度。不包括以太网头部和PPPoE头部的长度。

PPPOE工作阶段

1.发现阶段->2.会话阶段->3.LCP协商建立链路->4.CHAP/PAP认证->5.NCP协商阶段->6.用户上线->7.计费->8.探测
Alt text

PPPOE发现阶段

Alt text

Discover阶段总共有四个步骤组成:

  • 广播PADI,请求建立连接
    1
    如果此时PADI报文中service-name不为空,则服务器将用配置的service-name和该报文中的service-name进行完全匹配性检测,相同则继续提供服务,否则不提供服务。
  • 回应PADO
    1
    此时,Code域为0x07。
  • 会话请求PADR
    1
    从返回PADO报文值的PPPOE Serer中选定符合条件的PPPOE Server,并返回一个PADR(非广播),同时Code域为0x19。
  • PPPOE Serer发送PADS
    1
    PPPOE Serer会产生一个唯一的会话标识,并通过PADS回复给PPPOE CLient,若无错误则进行PPPOE会话阶段。

PPPOE会话阶段

  • 首先进行LCP协商
    1
    2
    3
    4
    PPPOE Client和Server互相发送LCP Configure-Request报文。双方收到Configure-Request报文后,都回复Configure Ack报文,表示LCP链路建立成功,否则继续发送Configure-Request报文:
    1.如果在设定的协商次数内回应ack报文,则LCP链路建立成功
    2.超出协商次数。则终止LCP协商
    3.连接成功后,Server会周期性给Client发送LCP Echo-Request报文,然后接收PPPoE Client回应的Echo-Reply报文,来探测LCP链路是否正常
  • 随后进行PAP/CHAP认证
    1
    2
    3
    4
    5
    1.PAP认证:
    两次握手,通过用户名和密码对用户进行认证,以明文的方式传递用户名和密码
    适用于安全要求较低的环境
    2.CHAP认证:
    CHAP认证为三次握手协议,CHAP认证方式只在网络上传输用户名,不传输用户密码,安全性比PAP要高。

NCP协商

1
NCP有很多种,如IPCP、BCP、IPv6CP,最为常用的是IPCP(Internet Protocol Control Protocol)协议。NCP的主要功能是协商PPP报文的网络层参数,如IP地址,DNS Server IP地址,WINS Server IP地址等。

会话维持

1
设备主动发送Echo Request进行PPPoE心跳保活,若3次未得到服务器的响应,则设备主动释放地址。发LCP Echo Request 的时候,魔术字字段要和之前通信的Configure_Request使用的魔术字字段保持一致。 有些设备或终端不支持主动发送 Echo-Request 报文, 只能支持回应Echo-Reply报文。

会话结束

1
PPPoE 还有一个PADT(PPPOE Active Discovery Terminate)分组,它可以在会话建立后的任何时候发送,来终止PPPoE会话,也就是会话释放。它可以由主机或者接入集中器发送,目的地址填充为对端的以太网的MAC地址。