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

交换机的能力要看两个数:交换容量(Gbps)与包转发率(Mpps)。 只看前者会买到「带宽够但小包跑不动」的设备——因为交换机是按帧处理的。

📝 本节和前面几节的关系

前面讲完转发机制,这一节讲怎么把这些能力量化成规格书上的数字。 这一节要算:1.488 Mpps 这个常数怎么来的,以及怎么用它判断一台设备行不行。

一、为什么有 pps 这个指标

交换芯片每处理一帧都要做一次查表、排队、转发,这个动作的时间基本固定,与帧多长无关。

所以真正压芯片的是「每秒多少帧」,不是「每秒多少字节」。同样 1 Gbps, 全用 64 字节小包是每秒 148.8 万帧,全用 1518 字节大包只有每秒 8.1 万帧——差 18 倍。

这就是为什么小包才是压力测试:跑 iperf 用默认大包测出来「线速」,不代表小包也能线速。

二、1.488 Mpps 怎么来的

以太网上每一帧除了帧本身,还要加 8 字节前导和 12 字节帧间隙。所以最小帧在线上实际占 64 + 20 = 84 字节。

1 Gbps ÷(84 × 8 bit)= 1,488,095 帧/秒,约 1.488 Mpps。

这个数要背下来: 所有交换机的包转发率都是「端口数 × 1.488 Mpps」(千兆)或「× 14.88 Mpps」(万兆)。 算出来比这个低,就是有阻塞。

三、交换容量为什么要乘 2

全双工端口能同时收 1 Gbps 和发 1 Gbps,交换芯片内部要处理 2 Gbps。

所以 24 口千兆的「无阻塞」及格线是 48 Gbps。规格书写 48 Gbps 不是有余量,是刚好及格。

低于这个数就是共享背板:满负载时会排队,表现是「平时很快、一忙就卡」。 这种设备在轻载下测不出问题,是采购最容易踩的坑。

四、动手 Demo:从帧长算 pps,再算一台 24 口交换机的及格线

这段先把五个帧长的线速 pps 算出来(千兆与万兆各一列), 再算一台「24 口千兆 + 4 口万兆」接入交换机的两个及格线。

for sz in (64, 128, 512, 1024, 1518):
    onwire = sz + 20
    p1 = 1e9 / (onwire * 8)
    p10 = 10e9 / (onwire * 8)
    T([u"%d" % sz, u"%d" % onwire, format(int(p1), u","),
       format(int(p10), u",")], [0, 0, 1, 1])

实跑输出:

--------------------------------------------------------------------
交换机的处理能力,为什么用 pps 而不是只有 Gbps
--------------------------------------------------------------------
**规格书上两个数一起出现:交换容量(Gbps)和包转发率(Mpps)。**很多人只看前者,
结果买了一台「带宽够但小包跑不动」的设备。

**因为交换机是按「帧」处理的。**每帧不管多长,都要过一次查表、排队、转发,这个动作的时间基本固定。
**所以小包才是真正的压力测试。**

**线速 pps 怎么算。**以太网上每帧还要加 8 字节前导和 12 字节帧间隙:

  帧长     线上实际字节     千兆口 pps     万兆口 pps
  -------------------------------------------------------
  64       84               1,488,095      14,880,952
  128      148              844,594        8,445,945
  512      532              234,962        2,349,624
  1024     1044             119,731        1,197,318
  1518     1538             81,274         812,743

**最小的 64 字节帧,千兆口线速是 1,488,095 pps,也就是 1.488 Mpps。**
**这个 1.488 是背下来的常数**:所有交换机的包转发率,都是拿端口数乘它。

**算一台 24 口千兆 + 4 口万兆的接入交换机**:
  项目             算法                  结果
  ----------------------------------------------------
  包转发率需求     24×1.488+4×14.88     95.2 Mpps
  交换容量需求     (24×1+4×10)×2        128 Gbps

**乘 2 是因为全双工**:一个千兆口能同时收 1 Gbps 和发 1 Gbps,交换芯片内部要处理 2 Gbps。
所以标称「48 Gbps」的 24 口千兆交换机,其实只是「无阻塞」的及格线,不是余量。

**怎么用这两个数判断一台设备行不行**:

1. 包转发率 ≥ 端口数 × 1.488 Mpps(千兆)——**低于这个数就是「有阻塞」,满负载小包时会排队。**
2. 交换容量 ≥ 端口带宽 × 2——**低于这个数说明背板是瓶颈。**
3. 两个数都够,才叫「线速无阻塞」。**便宜的家用交换机常常只标第一个数,不标第二个。**

64 字节到 1518 字节,pps 从 148.8 万掉到 8.1 万,差 18 倍。 而 Gbps 一直是 1。这张表就是「为什么不能只看带宽」的最好证明。

24 口千兆 + 4 口万兆那台机器:包转发率需求 49.6 Mpps,交换容量需求 128 Gbps。 规格书低于这两个数,就是有阻塞。

注意「4 口万兆」贡献了 59.5 Mpps 里的 59.5 中的大头——万兆单口的 pps 是千兆的 10 倍。 所以上行口越多,对芯片要求越高。

30 秒实验

  1. 找一台交换机的规格书,抄下「交换容量」与「包转发率」。
  2. 按端口数自己算这两个数,跟规格书对一下。
  3. 用 iperf 打小包,看能不能跑到线速。

常见误区

  1. 只看 Gbps 不看 Mpps。小包场景会跑不动。
  2. 以为交换容量大就无阻塞。还要与端口带宽 ×2 对照。
  3. 假设 1 Gbps 就是 1.488 Mpps。那是 64 字节的理想值,大包时远低于它。
自测三问(点开对答案) 1. 1.488 Mpps 是怎么算出来的? —— 1 Gbps ÷(84 字节 × 8 bit),84 是 64 字节帧加 8 前导与 12 帧间隙。 2. 24 口千兆交换机的无阻塞及格线是多少? —— 包转发率 35.7 Mpps、交换容量 48 Gbps。 3. 为什么小包更压芯片? —— 每帧的处理时间固定,包越小同样带宽下帧数越多。

下一节:能力有了数字,接下来看设备怎么分类——按功能分是第一刀。

相关笔记