第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 解决方案
- 客户端调整 MTU——PPPoE 接口 MTU 设为 1492(或更低 1400-1450)
- 开启 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)
- 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 的核心设备 |
九、思考
- PPPoE 分为哪两个阶段?每个阶段完成什么任务?
- PADI 和 PADO 报文分别对应什么含义?PADI 为什么使用广播 MAC?
- PPPoE 的 Session ID 由哪一方分配?在哪个报文中分配?
- PPPoE 环境下为什么会出现 MTU 问题?如何解决?
- BRAS 在宽带接入网络中扮演什么角色?
下篇预告:第153篇《MPLS 基本概念——标签、LSP、FEC》——从此时起,进入 MPLS 的世界,理解标签交换如何从根本上改变了广域网的转发模式。