PPPoE协议个人理解+报文示例+典型配置-RFC2516

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。

因此本文将在PPPoE协议报文的基础上进行介绍。

PPPoE协议发展

相关资料

Note:个人能力有限,敬请各位指导。

目录

1.PPPoE协议

1.1.PPPoE基本原理

PPPoE (Point-to-Point Over Ethernet) 协议主要用于解决一个远程站点设备可以控制连接站点的多个设备主机,同时还可提供类似于使用 PPP 的拨号服务的方式的访问控制和计费功能。在许多接入技术中,Ethernet 网可以用最具成本效益的方法将多台主机连接到客户端接入设备。因此 PPPoE 协议应运而生。

通过 PPPoE 技术,每个用户主机可使用独立的 PPP 协议,实现基于用户的访问计费控制。同时又可具有良好的私密性。

PPPoE的两个阶段
Discovery stage:主机希望启动 PPPoE 会话时,它必须首先执行发现以识别对等体的 Ethernet MAC 地址并建立 PPPoE SESSION_ID。这一阶段称为 Discovery 阶段。

主机可以与之通信的 Access Concentrator 可能不止一个。因此协议允许其发现所有 Access Concentrator 后选择一个。随后主机和选定的 Access Concentrator 都将获得需要通过 Ethernet 建立点对点连接的信息。

PPP Session Stage:在 Discovery 阶段获取到 SESSION_ID 后,Session 阶段开始进行 PPP 协议交互。这一过程包括了 PPP 的 LCP 和 NCP 交互。上述交互都完成后,主机可正式开始访问网络资源。

PPP 协议的 LCP 阶段主要进行包括认证在内的链路协商,NCP 阶段主要进行包括 IP/DNS 地址在内网络资源协商。

由于以太网的最大负载大小为 1500 字节,PPPoE 报头为 6 个字节,PPP 协议 ID 为 2 个字节,因此 PPP MTU 不得大于 1492。

点击此处回到目录

1.2.PPPoE帧格式

PPPoE以太帧
在这里插入图片描述PPPoE 以太帧主要是将 PPP 帧作为 payload 封装于 Ethernet 帧中。同时以 0x8863 的 ETHER_TYPE 标识 Discovery Stage,以 0x8864 的 ETHER_TYPE 标识 PPP Session Stage。

Ethernet payload for PPPoE
在这里插入图片描述VER:4-bits,标识 PPPoE 协议版本。必须置 0x1。
TYPE:4-bits,必须置 0x1。
CODE:8-bits,取值取决于对应的阶段。

目前共约定义了10种左右的CODE值,此处仅介绍常用CODE
CODE=0x00:表示进入PPP Session Stage。
CODE=0x07:PADO,PPPoE Active Discovery Offer。
CODE=0x09:PADI,PPPoE Active Discovery Initiation。
CODE=0x19:PADR,PPPoE Active Discovery Request。
CODE=0x65:PADS,PPPoE Active Discovery Session-confirmation。
CODE=0xa7:PADT,PPPoE Active Discovery Terminate。

SESSION_ID:16-bits,在 Discovery 阶段的 PADS 报文中获取。并且对于给定的 PPP 会话为固定值。

实际上,它定义了 PPP 会话以及以太网 SOURCE_ADDR 和 DESTINATION_ADDR。值 0xffff 保留供将来使用,不得使用。

LENGTH:16-bits,排除了 Ethernet 和 PPPoE 头后的 PPPoE 载荷长。
payload:不定长

Discovery 阶段还可能额外携带TAG TLV:这些TAG可以用于额外标识用户信息。
在这里插入图片描述TAG_TYPE:16-bits,标识 TAG 类型。
TAG_LENGTH:16-bits,标识 TAG_LENGTH 的长度。
TAG_VALUE:不定长,取决于实际值。
自动换行
在此提供常用的PPPoE TAG Values
在这里插入图片描述关于 TAG 字段的详细含义可查看相关资料。

点击此处回到目录

1.3.PPPoE交互过程

在这里插入图片描述PPPoE交互过程如上图所示。

4步Discovery阶段
在这里插入图片描述PADI —> PADO —> PADR —> PADS。

1@PPPoE Active Discovery Initiation:CODE=0x09
首先,用户主机发送 PADI 数据包,并将 DMAC 设置为广播地址。CODE 字段设置为 0x09,SESSION_ID 必须设置为 0x0000。

PADI 数据包必须只包含一个 Service-Name TAG (TAG_TYPE = 0x0101),表示主机请求的服务,以及任意数量的其他 TAG 类型。整个 PADI 数据包包括 PPPoE 头不得超过 1484 位字节,以便为中继代理留出足够的空间来添加 Relay-Session-Id TAG (TAG_TYPE = 0x0110)。

在这里插入图片描述PADI 数据包示例。

2@PPPoE Active Discovery Offer:CODE=0x07
Access Concentrator 收到它可以服务的 PADI 时,它通过发送单播的 PADO 数据包进行回复。CODE 字段设置为 0x07,SESSION_ID 必须设置为 0x0000。

同时必须包含一个包含 Access Concentrator 名称的 AC-Name TAG (TAG_TYPE = 0x0101)、一个与 PADI 中 Service-Name TAG (TAG_TYPE = 0x0101) 相同的 Service-Name TAG,以及表示 Access Concentrator 可提供的其他服务的其他 TAG。

在这里插入图片描述PADO 数据包示例。

3@PPPoE Active Discovery Request:CODE=0x19
用户主机可能会收到多个 PADO,但仅查看它收到的 PADO 数据包并选择一个。用户主机可以根据 AC-Name 或提供的服务进行选择。随后,主机以一个 PADR 数据包进行单播回应。CODE 字段设置为 0x19,SESSION_ID 必须设置为 0x0000。

PADR 数据包必须只包含一个 Service-Name TAG (TAG_TYPE = 0x0101),表示主机请求的服务,以及任意数量的其他 TAG 类型。

在这里插入图片描述PADR 数据包示例。

4@PPPoE Active Discovery Session-confirmation:CODE=0x65
当 Access Concentrator 收到 PADR 数据包时,为 PPPoE 会话生成唯一的 SESSION_ID,并使用 PADS 数据包单播回复主机。CODE 字段设置为 0x65,并且 SESSION_ID 必须设置为为此 PPPoE 会话生成的唯一值

PADS 数据包只包含一个 Service-Name TAG (TAG_TYPE = 0x0101),指示可提供接受 PPPoE 会话的服务,以及任意数量的其他 TAG 类型。如果 Access Concentrator 不喜欢 PADR 中的 Service-Name,则它必须回复包含 Service-Name-Error (TAG_TYPE = 0x0201,以及任意数量的其他 TAG 类型) 的 PADS 数据包。同时在这种情况下,SESSION_ID 必须设置为 0x0000。

在这里插入图片描述PADS 数据包示例。

5@PPPoE的终止PPPoE Active Discovery Terminate:CODE=0xA7
PADT 数据包可以在建立会话后的任何时间发送,以指示 PPPoE 会话已终止。并且不限制发送方。CODE 字段设置为 0xa7,并且必须设置 SESSION_ID 以指示要终止的会话。

PADT 数据包不需要 TAG。 收到 PADT 后,不允许使用该会话发送进一步的 PPP 流量。即使是普通的 PPP termination 数据包,在发送或接收 PADT 后也不得发送。 PPP 对等体应该使用 PPP 协议来关闭 PPPoE 会话,但是当 PPP 不能使用时,可以使用 PADT。

在这里插入图片描述PADT 数据包示例。

PPPoE的PPP Session Stage阶段
在完成 PPPoE 的发现阶段后,将进入 PPP 会话阶段。在此阶段将先进行 PPP 的 LCP (Link Control Protocol,链路控制协议) 进行链路协商。随后进入 NCP (Network Control Protocols,网络控制协议),以便完成 IP/DNS 在内的网络层协议协商。最终在 NLP (Network Layer Protocols,网络层协议) 中进行真正的业务报文交互。

关于 PPP 协议的基本原理,可参考博客-PPP协议原理介绍+报文分析+配置指导-RFC1661

在这里插入图片描述PPPoE的PPP Session Stage阶段报文示例。

在此阶段,需要将 ETHER_TYPE 字段设置为 0x8864,PPPoE CODE 设置为 0x00。并且该 PPPoE 会话的 SESSION_ID 不得更改,并且必须是在 Discovery 阶段分配的值。PPPoE 的 PPP 帧以 PPP 协议 ID 开头。

在这里插入图片描述PPP 协议 ID 为 0xc021 时表示 LCP 协议。
在这里插入图片描述PPP 协议 ID 为 0x0021 时表示 NLP 交互的 IPv4 协议。

其他需要注意的内容

  1. 由于以太网的最大负载大小为 1500 字节,PPPoE 报头为 6 个字节,PPP 协议 ID 为 2 个字节,因此 PPP MTU 不得大于 1492。
  2. 当主机在指定时间内没有收到 PADO 数据包时,它应该重新发送 PADI 数据包并将等待时间加倍。根据需要重复多次此操作。
  3. 如果主机正在等待接收 PADS 数据包,则应使用类似的超时机制,以便在未收到 PADS 数据包时重新发送 PADR。在指定的重试次数后,主机应该重新发送 PADI 数据包。

点击此处回到目录

2.PPPoE典型配置

在这里插入图片描述这里以上图为例,进行 PPPoE 的相关介绍。

AR1:
interface Dialer0
 link-protocol ppp
 ppp ipcp default-route
 ppp chap user pppoe-1
 ppp chap password cipher pppoe-1
 ppp timer negotiate 5
 ppp ipcp dns request
 timer hold 20
 ip address ppp-negotiate
 dialer user pppoe-1
 dialer bundle 1
 dialer number 1111
 dialer timer enable 6
 dialer-group 1
#
interface GigabitEthernet0/0/0
 pppoe-client dial-bundle-number 1 
#

AR2:
aaa 
 local-user pppoe-1 password cipher pppoe-1
 local-user pppoe-1 service-type ppp
#
interface Virtual-Template1
 ppp authentication-mode chap 
 remote address pool pool-pppoe
 ppp ipcp remote-address forced
 ppp ipcp default-route
 ppp timer negotiate 5
 ppp ipcp dns 8.8.8.8 114.114.114.114
 timer hold 20
 ip address 192.168.1.1 255.255.255.0 
#
interface GigabitEthernet0/0/0
 pppoe-server bind Virtual-Template 1
#

在这里插入图片描述display pppoe-server session all 用于查看相应的 PPPoE 信息。

点击此处回到目录

更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值