📡 第二章 彻底理解L2交换机
📄 一句话概括

巨型帧把 MTU 从 1500 提到 9000,省的是「每帧必付的那 38 个字节」。 效率只涨 2 个百分点,真正的收益是「帧数少了 6 倍」——所以它在 10G 以上才有意义。

📝 本节和前面几节的关系

上一节讲表的容量,这一节讲帧的长度。两者都是「规格书上的一行,影响却很大」。 这一节要算:开销比例、帧数、以及「端到端全配」的代价。

一、每帧的固定开销

以太网头 14 + FCS 4 + 前导 8 + 帧间隙 12 = 38 字节。 这 38 字节每一帧都要付一次,与载荷大小无关。

算效率:1500 字节载荷占 1538 的 97.53%;9000 字节占 9038 的 99.58%。只涨 2 个百分点。

所以巨型帧不是「提速神器」。宣传里说「提升 20% 性能」的, 多半是把「帧数减少」换算成了 CPU 占用,不是带宽。

二、真正的收益在帧数

传 1 GB,MTU 1500 要 66.7 万帧,MTU 9000 只要 11.1 万帧。 少了 6 倍。

每一帧都有处理成本:查表、中断、DMA 描述符、内存分配。 这个成本在低速链路上相对传输时间很小,在 25G/100G 上就成了主要开销。

所以它的适用范围很清楚:存储网络(iSCSI、NFS)、数据中心东西向流量。普通办公网开它没意义。

三、端到端全配,缺一跳就出怪事

链路上任何一跳只支持 1500,大帧就会被丢掉,而且丢得不明显。

典型症状:小包全通、大文件传输卡住、ping 通的但拷文件不通——这是最难查的一类故障。

所以规矩是三条:全部设备(含虚拟交换机与网卡)配同一个值、先在一段链路上试、别全网一次改。

四、动手 Demo:三档 MTU 的效率与帧数

这段算 576、1500、9000 三档 MTU 的线上字节数、效率、以及传 1 GB 各要多少帧。

for mtu in (576, 1500, 9000):
    onwire = mtu + 38
    eff = mtu / float(onwire)
    frames = 1000 * 1000 * 1000 // mtu
    T([u"%d" % mtu, u"%d" % onwire, u"%.2f%%" % (eff * 100),
       format(frames, u",")], [0, 0, 0, 0])

实跑输出:

--------------------------------------------------------------------
巨型帧省的是「每帧的固定开销」
--------------------------------------------------------------------
**巨型帧(jumbo frame)就是把 MTU 从 1500 提到 9000 左右,让一帧装更多数据。**省下来的不是带宽,
是「每帧必付的那几十个字节」。

**先算清楚一帧要付多少固定开销**:

  以太网头 14 + FCS 4 + 前导 8 + 帧间隙 12 = 38 字节。
**这 38 字节每一帧都要付一次,跟载荷大小无关。**

  MTU      线上字节     效率       传 1 GB 要几帧
  ---------------------------------------------------
  576      614          93.81%     1,736,111
  1500     1538         97.53%     666,666
  9000     9038         99.58%     111,111

**从 1500 提到 9000,效率从 97.53% 涨到 99.58%,只涨 2 个百分点。**所以巨型帧不是「提速神器」。

**真正的收益在别处:帧数少了 6 倍。**

  MTU 1500:666,666 帧。按每帧 1 微秒处理开销算,光处理就要 0.7 秒。
  MTU 9000:111,111 帧。按每帧 1 微秒处理开销算,光处理就要 0.1 秒。

**所以巨型帧的收益取决于「每帧的处理成本」。**在千兆上,每帧处理开销相对传输时间很小,收益不明显;
在 25G/100G 上,一帧 1500 字节只占 0.12 微秒,
而查表与中断开销是它的好几倍——**这时候减少帧数才是真收益。**

**代价是「必须端到端全配」。**链路上任何一跳只支持 1500,大帧就会被丢掉,
而且丢得不明显——**表现为「大文件传输卡住、小包正常」**。

**实践中的三条规矩**:

1. 存储网络(iSCSI/NFS)值得开,普通办公网不值得。
2. **所有交换机、所有网卡、所有中间设备都要配成同一个值**,包括虚拟交换机。
3. 先在一段链路上试,别全网一次改。**改错的表现是「某些流量莫名其妙超时」。**

576 那一行是历史:早期以太网要求所有设备至少支持 576,所以它成了「最小公分母」。 效率只有 93.8%。

1500 到 9000 只涨 2 个百分点,这就是「巨型帧不提速」的证据。 但帧数从 66.7 万降到 11.1 万——这才是它的价值。

按每帧 1 微秒处理开销算:1500 要 0.67 秒、9000 只要 0.11 秒, 省下 0.56 秒的 CPU 时间。在 1 Gbps 上这 0.56 秒相当于传输 70 MB——所以明显;但在百兆上传输 1 GB 本身就要 80 秒,省 0.56 秒毫无意义。

30 秒实验

  1. 查你网卡的 MTU 设置是多少。
  2. 查交换机有没有「巨型帧」这个开关。
  3. 用 ping 大包测试(-l 或 -s 参数)看链路能过多大的帧。

常见误区

  1. 以为巨型帧能大幅提速。效率只涨 2 个百分点。
  2. 只配交换机不配网卡。大帧会被丢弃。
  3. 全网一次改。出问题很难定位。
自测三问(点开对答案) 1. 一帧的固定开销是多少字节? —— 38 字节:头 14+FCS 4+前导 8+帧间隙 12。 2. 巨型帧的真正收益是什么? —— 帧数减少约 6 倍,降低每帧的处理成本。 3. 缺一跳不支持巨帧会怎样? —— 大帧被丢弃,表现为小包通、大文件卡住。

下一节:第三个功能是防环——生成树。

相关笔记