PPPoE 是把 PPP 会话套进以太网帧,代价正好 8 个字节。 1492 与 1452 这两个数字就是这么来的——家用路由器上那个「怪数字」不是厂商的癖好。
上一节讲链路层的历史,这一节讲一个还活着的:宽带拨号。 它解释了「能 ping 通但传不了文件」这类最常见的 VPN 与宽带故障。
一、8 个字节是怎么算出来的
PPPoE 头 6 字节:版本类型 1 + 代码 1 + 会话 ID 2 + 长度 2。 PPP 协议号 2 字节。合起来正好 8 字节。
于是 MTU 变成 1500 减 8 等于 1492,MSS 变成 1492 减 20(IP 头)减 20(TCP 头)等于 1452。
链路 MTU MSS
以太网直连 1500 1460 PPPoE 1492 1452 GRE 隧道 1476 1436 IPsec 隧道 1430 1390
二、差 8 个字节,性能差多少
算一下传 1 MB 要多少包:MSS 1460 要 719 个包,MSS 1452 要 723 个。 差 8 个包,约 0.05%。
所以「PPPoE 慢一点」在带宽上几乎看不出来。 真正的问题是「MTU 不一致导致的丢包」——只要链路上有一个环节还是 1500,超出的包就会被丢。
这就是那个经典症状:ping 通、小网页能开、一传大文件就卡住。 因为 ping 默认只有 32 字节,永远碰不到 MTU 上限。
三、现场三条做法
一、PPPoE 环境下把 MTU 设成 1492、MSS 钳制设成 1452。 二、别只改本机——要在路由器上做 MSS 钳制,让它对经过的所有连接生效。 三、测试方法:ping 加「不分片」参数,载荷从 1472 往下降, 降到能通为止,那个值加 28 就是实际 MTU。
这三条能解决现场绝大部分「宽带能上但传不了文件」的故障。 顺序不要颠倒:先算 MTU,再做钳制,最后才怀疑线路质量。
四、拨号接入的另外两种形态
PPPoA:PPP 直接跑在 ATM 上,不需要以太网头,所以没有这 8 字节。多见于早期的 ADSL。 IPoE:不拨号,直接靠 DHCP 拿地址,MTU 就是 1500。今天的千兆宽带越来越多用这种方式, 因为它更简单、开销更小。
所以「宽带一定要拨号」这句话已经不成立:很多新装的宽带是 IPoE,光猫后面直接 DHCP。 排查时先确认接入方式,再谈 MTU。
五、动手 Demo:PPPoE 那 8 个字节,为什么家用路由器 MTU 是 1492
这段拆开 8 字节的构成,算出 1492 与 1452,再按「传 1 MB」比较 MSS 1460 与 1452 各需要多少个包。
P(u" 1500 - 8 = %d" % (1500 - 8))
P(u" MSS = %d" % (1492 - 20 - 20))
for mss in (1460, 1452):
P(u" MSS %d:%d 个包。" % (mss, -(-1048576 // mss)))
实跑输出:
--------------------------------------------------------------------
PPPoE 那 8 个字节,为什么家用路由器 MTU 是 1492
--------------------------------------------------------------------
**PPPoE 是「把 PPP 会话套在以太网帧里」**,所以要多 8 个字节。
这个 8 字节解释了一个很多人困惑的数字:1492。
**8 个字节的构成**:
6 字节 PPPoE 头(版本类型 1 + 代码 1 + 会话 ID 2 + 长度 2)
+ 2 字节 PPP 协议号 = **8 字节**。
**算 MTU**:物理 MTU 1500 减 8 = **1492**。
**再算 MSS**:MSS = MTU 减 IP 头 20 减 TCP 头 20 = **1452**。
链路 MTU MSS 说明
----------------------------------------------
以太网直连 1500 1460 标准值
PPPoE 1492 1452 宽带拨号
GRE 隧道 1476 1436 1500 − 24
IPsec 隧道 1430 1390 1500 − 70
**MSS 差 8 个字节,实际性能差多少?**算一下传 1 MB 要多少包:
MSS 1460:719 个包。
MSS 1452:723 个包。
**差 8 个包,也就是 0.05%。**所以「PPPoE 慢一点」在带宽上几乎看不出来,
**真正的问题是「MTU 不一致导致的丢包」**——**那怕只有一个环节是 1500,就会丢包。**
**实践中的三条**:
1. **PPPoE 环境下把 MTU 设成 1492、MSS 钳制设成 1452。**
2. **别只改本机**——要在路由器上做 MSS 钳制,让它对经过的所有连接生效。
3. **测试方法**:`ping -f -l 1472`(不分片、载荷 1472 = 1500 减 28),
**通就说明 1500 没问题;不通就往下降,降到通为止。**
「719 与 723」这两个数是向上取整算的:1 MB 除以 MSS,除不尽就要多一个包。 这 0.05% 的差别在测速软件上根本看不出来。
表里 GRE 与 IPsec 那两行是同一个道理:隧道越厚,MSS 越小。所以「套了两层隧道」的网络, MSS 可能已经被压到 1300 以下,这时候必须显式钳制,否则一定出问题。
最后一段「IPoE 越来越常见」要记住:很多人一遇到「宽带问题」就条件反射改 MTU 1492, 但如果这条宽带是 IPoE,改 1492 反而制造了问题。 先确认接入方式,这是排查的第一步。
30 秒实验
- 确认你家宽带是 PPPoE 还是 IPoE 接入。
- 用 ping 不分片的方式测出实际 MTU。
- 看路由器上有没有 MSS 钳制的配置项。
常见误区
- 以为 1492 是厂商随便定的。是 1500 减 PPPoE 的 8 字节。
- 以为 PPPoE 会明显变慢。带宽只差 0.05%,问题在丢包。
- 以为宽带一定拨号。IPoE 越来越普遍,MTU 就是 1500。
自测三问(点开对答案)
1. PPPoE 的 8 字节由什么构成? —— 6 字节 PPPoE 头(版本类型、代码、会话 ID、长度)加 2 字节 PPP 协议号。 2. PPPoE 下 MSS 应该是多少? —— 1492 减 20 减 20,等于 1452。 3. 为什么「能 ping 通但传不了文件」是 MTU 问题的典型症状? —— ping 默认载荷只有 32 字节,碰不到 MTU 上限,而大包会被丢弃。下一节:网关坏了怎么办——冗余。
- ☐ (本节完,下一节 03.06.06 冗余)