📡 第四章 理解L3交换机的性能与功能
📄 一句话概括

同 VLAN 走二层,跨 VLAN 要「上到三层再下来」——多一次查表,还要改 MAC 头。 一次跨网段约多 1 微秒,人眼看不出来,但在微服务与高频交易里会显现。

📝 本节和前面几节的关系

上一节讲标签,这一节讲标签决定的路。 这一节把四种情况列清,是排查「为什么这台机器访问那台慢」的基础。

一、四种情况

情况 经过什么 查表次数


同 VLAN 同交换机 二层转发表 1 同 VLAN 跨交换机 两端各查一次加 trunk 2 跨 VLAN 同交换机 二层到 SVI 再三层查表 2 跨 VLAN 跨交换机 四段都查 3~4

第三行是最值得记的:跨 VLAN 的包要「上到三层再下来」, 所以它比同 VLAN 多一次查表,还要改一次 MAC 头——这就是「跨网段比同网段慢一点点」的物理原因。

二、为什么必须先上三层

因为 VLAN 之间是「不同的广播域」,二层转发只在同一个广播域内有效。 要把包送到另一个广播域,必须有一个三层设备做「换信封」。

而这个「换信封」的动作就是 03.05.02 讲的那三件事:改源 MAC、改目的 MAC、TTL 减 1。 而 IP 地址不动。

所以「VLAN 隔离」与「VLAN 间路由」是同一件事的两面: 划 VLAN 的那一刻就决定了「必须有三层设备在中间」,就像 03.01.01 说「划网段与上路由器是同一件事」。

三、那 1 微秒的差别

一次跨网段大约多 0.5 到 1 微秒,而一次 ping 的往返是毫秒级——人眼完全看不出来。

但它在两个场景里会显现: 一、高频交易这类极致低延迟业务——「多一次查表」在纳秒预算里是可见的。 二、微服务之间几百万次跨网段调用——单次 1 微秒乘以百万次就是一秒。 这也是为什么「同机房部署、同网段部署」在性能优化里是一条真实建议。

四、排查时的用处

「A 访问 B 慢」这类故障,第一步就是判断「它们是不是同一个 VLAN」:

同 VLAN:问题在二层——环路、广播风暴、链路带宽、MAC 表泛洪。 跨 VLAN:问题多一层——SVI 的带宽、三层查表的开销、ACL 拦截。

这个判断能省掉大量无用功: 因为「查二层」与「查三层」用的命令完全不同,判断错了方向就全错了。

五、动手 Demo:同一个 VLAN 与跨 VLAN,数据走的路不一样

这段列出四种情况的经过路径与查表次数,再按「每段约 0.5 微秒」算经过 1、2、4 段各要多久。

for n in (1, 2, 4):
    P(u"  经过 %d 段:约 %.1f 微秒。" % (n, n * 0.5))

实跑输出:

--------------------------------------------------------------------
同一个 VLAN 与跨 VLAN,数据走的路不一样
--------------------------------------------------------------------
**同样是「从 A 机到 B 机」,走的路可能完全不同。**这一节把三种情况列清。

  情况                 经过什么                  查表次数
  -----------------------------------------------------------
  同 VLAN 同交换机     二层转发表                1
  同 VLAN 跨交换机     两端各查一次加 trunk      2
  跨 VLAN 同交换机     二层到 SVI 再三层查表     2
  跨 VLAN 跨交换机     四段都查                  3~4

**注意第三行**:跨 VLAN 的包要「上到三层再下来」,
**所以它比同 VLAN 多一次查表,还要改一次 MAC 头**——
**这就是「跨网段比同网段慢一点点」的物理原因。**

**算一下这个「一点点」是多少**:

  经过 1 段:约 0.5 微秒(按每段 0.5 微秒)。
  经过 2 段:约 1.0 微秒(按每段 0.5 微秒)。
  经过 4 段:约 2.0 微秒(按每段 0.5 微秒)。

**一次跨网段大约多 1 微秒,而一次 ping 的往返是毫秒级**——**所以这个差别在人眼里完全看不出来。**
**但它在两个场景里会显现**:**一是高频交易这类极致低延迟业务**,
**二是「同一对服务器之间几百万次跨网段调用」的微服务。**

「1 微秒在毫秒面前可以忽略」这句话要说清楚前提:它只对「单次请求」成立。 而现代系统的请求数是以百万计的,所以「微秒级差别」在总量上是秒级的。

「同 VLAN 与跨 VLAN 的排查方向完全不同」这一条最实用: 遇到「慢」,先确认拓扑关系,再选工具。 很多人在跨 VLAN 的问题上查二层的生成树,查了半天什么也没查到。

最后「VLAN 隔离与 VLAN 间路由是同一件事的两面」这句要记住: 它和 03.01.01 那句「划网段与上路由器是同一件事」是同一个道理。 理解了这一点,就不会再问「为什么划了 VLAN 反而不通了」。

30 秒实验

  1. 在你电脑上 trace 一下到同网段与跨网段两台机器的路径差别。
  2. 看你的网关地址是 SVI 还是路由器的物理口。
  3. 想一想:微服务为什么倾向同网段部署。

常见误区

  1. 以为跨 VLAN 只是「慢一点点」所以随便划。调用量大时会累积。
  2. 以为同 VLAN 就不用查三层。确实不用,这是它的优势。
  3. 以为 VLAN 划了就自动互通。必须有三层设备在中间。
自测三问(点开对答案) 1. 跨 VLAN 的包为什么要「上到三层再下来」? —— 不同 VLAN 属于不同广播域,二层转发无法跨越,必须由三层设备换信封。 2. 跨网段比同网段多做了什么? —— 多一次三层查表,并改源与目的 MAC、TTL 减 1。 3. 为什么「同 VLAN」与「跨 VLAN」的排查方向完全不同? —— 前者只涉及二层(环路、带宽、MAC 表),后者还涉及三层(SVI、查表、ACL)。

下一节:跨 VLAN 的三条路怎么选。

相关笔记