第152篇:PPPoE 拨号与企业宽带接入

关键词

PPPoE、PPPoE Session、Discovery 阶段、PPP Session 阶段、AC、BRAS、Session ID、MTU 问题


一、为什么需要 PPPoE?

1.1 背景矛盾

  • 物理介质层面:以太网已成为最主流的接入介质(廉价的网卡、双绞线、光纤)
  • 业务需求层面:运营商需要认证、计费、IP 地址分配能力——这正是 PPP 的强项
  • 矛盾点:PPP 设计运行在串行链路上,无法直接在以太网上使用

PPPoE(PPP over Ethernet) 就是为解决这个矛盾而生的。它把 PPP 的帧封装在以太网帧中,让以太网用户也能享受 PPP 的认证和计费能力。

1.2 PPPoE 的应用场景

  • ADSL/光纤宽带接入——家庭用户拨号上网
  • 企业专线接入——企业通过 PPPoE 接入运营商网络
  • Hotspot 计费——酒店、校园网按用户认证计费
  • BRAS/BNG——运营商 BRAS(宽带远程接入服务器)终结 PPPoE 会话

二、PPPoE 协议栈与报文格式

2.1 协议栈

IP 数据包 PPP (LCP/NCP/IPCP) PPPoE 头部 Ethernet 头部 物理层(以太网)

2.2 PPPoE 报文结构

目的MAC (6B) 源MAC (6B) 0x8863/ 0x8864 Ver/Type (1B) Code (1B)
Session ID(2B) Payload Length(2B)
Payload(可变长度,PPPoE Tag 或 PPP 数据)

关键字段: - EtherType:0x8863(Discovery 阶段)、0x8864(PPP Session 阶段) - Code:标识 PADI/PADO/PADR/PADS/PADT 等报文类型 - Session ID:唯一标识一个 PPPoE 会话,由 AC 分配


三、PPPoE 的工作过程

3.1 两个阶段

PPPoE 分为两个阶段,共 5 个步骤

第一阶段:Discovery(发现阶段)
  客户端          AC(BRAS)
    │                 │
    │  1. PADI 广播    │  → 客户端寻找 AC
    │────────────────►│
    │                 │
    │  2. PADO 单播    │  ← AC 响应
    │◄────────────────│
    │                 │
    │  3. PADR 单播    │  → 客户端确认选择
    │────────────────►│
    │                 │
    │  4. PADS 单播    │  ← AC 分配 Session ID
    │◄────────────────│
    │                 │
第二阶段:PPP Session(PPP 会话阶段)
    │                 │
    │   5. PPP LCP     │  → LCP 协商(MRU、认证方式)
    │◄───────────────►│
    │                 │
    │   6. PPP 认证    │  → CHAP 或 PAP 认证
    │◄───────────────►│
    │                 │
    │   7. IPCP        │  → 分配 IP 地址、DNS 等
    │◄───────────────►│
    │                 │
    │   8. 数据传送     │
    │◄───────────────►│

3.2 详细报文解读

步骤 1:PADI(PPPoE Active Discovery Initiation) - 客户端广播发送 EtherType=0x8863, Code=0x09 - 目的 MAC = FF:FF:FF:FF:FF:FF - Tag 中包含服务名称(可选,如 internet

步骤 2:PADO(PPPoE Active Discovery Offer) - AC 单播回复 EtherType=0x8863, Code=0x07 - 目的 MAC = 客户端 MAC - Tag 中包含 AC 名称和服务名称

步骤 3:PADR(PPPoE Active Discovery Request) - 客户端从收到的 PADO 中选择一个 AC,发送 PADR - 目的 MAC = 所选 AC 的 MAC

步骤 4:PADS(PPPoE Active Discovery Session-confirmation) - AC 分配唯一的 Session ID,告知客户端 - 至此 Discovery 阶段完成,后续报文的 EtherType 切换为 0x8864

步骤 5-7:PPP Session - 与标准的 PPP 建立过程完全相同:LCP → 认证 → NCP(IPCP) - 所有 PPP 报文封装在 Ethernet + PPPoE Session ID 内

步骤 8:数据传送 - IP 数据包通过 PPP 封装 → PPPoE 封装 → 以太网发送 - 结束时可发送 PADT 主动终止会话


四、MTU 问题

4.1 PPPoE 引入的 MTU 开销

PPPoE 在每个以太网帧上额外增加了开销:

协议层 开销(字节)
PPP 头部 2
PPPoE 头部 6
总开销 8

标准以太网 MTU 为 1500 字节,加上 PPPoE 的 8 字节开销后,有效最大载荷变为 1492 字节

4.2 实际影响

客户端 MTU  = 1492(减去 PPPoE 头后)
路径 MTU   = 1500(运营商侧)

如果客户端发送 1500 字节 IP 包:
  → 封装 PPPoE 后变为 1508 字节
  → 超出以太网 MTU
  → 分片或丢弃

4.3 解决方案

  1. 客户端调整 MTU——PPPoE 接口 MTU 设为 1492(或更低 1400-1450)
  2. 开启 MSS Clamping——在 BRAS 或 CPE 上修改 TCP SYN 的 MSS 值
# 在 CPE 上配置 MSS Clamping
interface Dialer1
 ip tcp adjust-mss 1452        # 推荐值 1452 = 1500 - 20(IP) - 20(TCP) - 8(PPPoE)
  1. PMTUD(Path MTU Discovery)——自动发现路径 MTU,但依赖 ICMP 回包(部分运营商会过滤 ICMP,导致 PMTUD 失效)

五、BRAS(宽带远程接入服务器)

5.1 BRAS 的角色

BRAS(Broadband Remote Access Server)又称 BNG(Broadband Network Gateway),是运营商宽带网络的核心设备,负责:

  • PPPoE 会话终结——与用户 CPE 建立 PPPoE 会话
  • 认证和计费——对接 RADIUS 服务器
  • IP 地址分配——通过 IPCP 或 DHCP 分配地址
  • 策略控制——限速、ACL、QoS
  • 组播复制——IPTV 业务

5.2 BRAS 在宽带网络中的位置

用户CPE (PPPoE) ────▶ 接入网 (DSLAM/ OLT) ────▶ BRAS (PPPoE 终结) ───▶ Internet
│ │
┌────▼──┐ RADIUS 认证/计费
--- ---

5.3 CPE 侧配置示例(华为设备)

# 创建 Dialer 接口
interface Dialer1
 link-protocol ppp
 ppp chap user user001@provider
 ppp chap password cipher Huawei@123
 ppp ipcp dns request
 ip address ppp-negotiate
 mtu 1492
 tcp adjust-mss 1452
!
# 绑定物理接口
interface GigabitEthernet0/0/0
 pppoe-client dial-bundle-number 1    # 绑定 Dialer1
!
# 默认路由指向 Dialer 接口
ip route-static 0.0.0.0 0.0.0.0 Dialer1

5.4 BRAS 侧认证配置(华为设备)

# 创建虚拟模板
interface Virtual-Template1
 ppp authentication-mode chap
 ppp chap default-user-name huawei
 remote address pool pppoe-pool
 ip address unnumbered interface LoopBack0
!
# 域和 RADIUS 方案
domain user001@provider
 authentication-scheme auth1
 accounting-scheme acct1
 radius-server group rad1
!
radius-server group rad1
 radius-server authentication 10.1.1.1 1812
 radius-server accounting 10.1.1.1 1813
 radius-server shared-key cipher RADIUS_Key
!
# 地址池
ip pool pppoe-pool
 gateway 100.64.0.1 255.255.255.0
 section 0 100.64.0.10 100.64.0.200

六、PPPoE 的优势与局限

6.1 优势

  • 认证计费成熟——复用 PPP 的认证框架,对接 RADIUS 无须额外开发
  • IP 地址按需分配——用户上线才分配 IP,节省公网 IP 资源
  • 会话管理——每个用户一个独立的 PPPoE 会话,便于策略下发
  • 兼容性好——所有操作系统和 CPE 都支持 PPPoE

6.2 局限

  • MTU 问题——8 字节额外开销需要调整 MTU/MSS
  • 单播特性——PPPoE 本质是点对点,不利于组播复制
  • 会话数限制——BRAS 的 PPPoE 会话数受限于硬件性能(数万到数十万)
  • 封装效率——以太网头部 + PPPoE 头部 + PPP 头部增加了每包的开销

七、PPPoE 的实际排错案例

7.1 故障现象

用户无法拨号上网,客户端一直停留在 "正在连接" 状态。

7.2 排查步骤

1. 检查物理链路
   # 在 CPE 上查看接口状态
   display interface GigabitEthernet0/0/0
   → 确认物理连接正常(Up)

2. 检查 PPPoE 会话
   # 在 CPE 上
   display pppoe-client session summary
   → 确认是否有 Session ID(没有则 Discovery 阶段未完成)

3. 抓包分析(Wireshark)
   → 是否收到 PADO?
     - 没有 PADO → AC 侧问题或 VLAN 不通
     - 有 PADO 但 PADR 无响应 → AC 侧资源不足

4. 检查 BRAS 侧
   display aaa online-user | include user001
   → 用户是否在线?认证是否通过?

5. 检查 ACL 和端口隔离
   → 确保 BRAS 与 CPE 之间的 VLAN 允许 PPPoE 报文(EtherType 0x8863/0x8864)

7.3 常见原因

现象 可能原因
PADI 无回复 上行 VLAN 未透传 PPPoE 或 AC 未配置
PADO 收不到 客户端防火墙过滤了广播或 ACL 阻断
PADR/PADS 失败 AC 会话数已达上限
LCP 失败 认证方式不匹配
CHAP 失败 用户名/密码错误或 RADIUS 超时
IPCP 失败 地址池耗尽

八、总结

知识点 核心要点
PPPoE 本质 在以太网上封装 PPP,实现认证+计费+地址分配
两个阶段 Discovery(4 步) + PPP Session(标准 PPP)
Session ID 唯一标识 PPPoE 会话,由 AC 分配
关键报文 PADI/PADO/PADR/PADS/PADT
MTU 问题 PPPoE 开销 8 字节,需调小 IP MTU 或 MSS
BRAS 运营商侧终结 PPPoE 的核心设备

九、思考

  1. PPPoE 分为哪两个阶段?每个阶段完成什么任务?
  2. PADI 和 PADO 报文分别对应什么含义?PADI 为什么使用广播 MAC?
  3. PPPoE 的 Session ID 由哪一方分配?在哪个报文中分配?
  4. PPPoE 环境下为什么会出现 MTU 问题?如何解决?
  5. BRAS 在宽带接入网络中扮演什么角色?

下篇预告:第153篇《MPLS 基本概念——标签、LSP、FEC》——从此时起,进入 MPLS 的世界,理解标签交换如何从根本上改变了广域网的转发模式。