802.1Q 的标签正好 4 个字节,把最大帧从 1518 变成 1522。 大包只多 0.26%,小包多 6.25%——所以「打标签降速」只在全小包业务里成立。
上一节给了功能地图,这一节从最基础的 VLAN 开始。 02.08.05 讲的是「VLAN 是什么、为什么划」,这一节讲「它在帧里长什么样」。
一、标签插在哪里
普通以太网帧:目的 MAC(6)+ 源 MAC(6)+ 类型(2)+ 载荷 + FCS(4)。 带标签的帧:在源 MAC 与类型之间插进 4 个字节。
这 4 个字节的构成:TPID 2 字节(固定 0x8100)+ TCI 2 字节。 而 TCI 里包含 3 位优先级、1 位丢弃指示、12 位 VLAN ID。
所以「优先级」与「VLAN」是装在同一个字段里的——这也是为什么 QoS 与 VLAN 总是一起讲。 改优先级不用换标签,只要改那 3 位。
二、1518 变成 1522
帧 长度 标签占比
普通帧(最大) 1518 无 带标签(最大) 1522 0.26% 普通帧(最小) 64 无 带标签(最小) 68 6.25%
大包只多 0.26%,小包多 6.25%——所以「打标签会明显降速」只在「全是小包」的业务里成立。 而语音与游戏正好是小包业务。
三、Access 与 Trunk 的区别
Access 口:接终端,收到的无标签帧打上本口 VLAN,发出的帧剥掉标签。 所以终端完全不知道有 VLAN 这回事。 Trunk 口:接交换机,两种帧都收,带标签的按标签转,无标签的归到「本征 VLAN」。
「本征 VLAN(native VLAN)」是个高频坑: 两端本征 VLAN 不一致,无标签帧会被划到不同的 VLAN 里——表现是「能通但通错地方」,而且很难查。 所以规范做法是「两端都改成同一个非默认值」或者「干脆不用无标签帧」。
四、MTU 要不要跟着涨
带标签的满包是 1522 字节,而很多设备的默认 MTU 是 1500。 所以「跨 trunk 传 1500 字节满包」时会撞上这个差,结果就是要分片或丢弃。
但多数厂商的默认值已经把这段算进去了(内部按 1522 处理),所以实际很少真的出问题。 真正会出问题的是「又加 VLAN 又加隧道」的场景——1522 再加 24 字节 GRE,就超过 1548 了。
这正是 03.05.07 讲的 MTU 问题在二层的版本: 每多一层封装就少一点可用空间,最后总有一层会撞墙。
五、动手 Demo:VLAN 标签那 4 个字节,吃掉多少带宽
这段列出普通帧与带标签帧的最大最小长度,再算两种极端下的标签开销占比。
P(u" 大包:4 除以 1522 等于 %.2f%%。" % (4 * 100.0 / 1522))
P(u" 小包:4 除以 68 等于 %.2f%%。" % (4 * 100.0 / 68))
实跑输出:
--------------------------------------------------------------------
VLAN 标签那 4 个字节,吃掉多少带宽
--------------------------------------------------------------------
**802.1Q 的标签正好 4 个字节**,插在源 MAC 与类型之间。**所以带标签的帧从 1518 变成 1522。**
帧 长度 标签占比
----------------------------------------
普通帧(最大) 1518 0
带标签(最大) 1522 4/1522
普通帧(最小) 64 0
带标签(最小) 68 4/68
**算两种极端下的开销比例**:
大包:4 ÷ 1522 = 0.26%。
小包:4 ÷ 68 = 5.88%。
**大包只多 0.26%,小包多 6.25%**——**所以「打标签会明显降速」只在「全是小包」的业务里成立。**
**而语音与游戏正好是小包业务。**
**还有一个更实际的影响**:**MTU 要跟着涨**。
**如果两端设备都按 1500 配 MTU,带标签的大包会变成 1522**,**超过物理上限就要分片或丢弃。**
**这正是 03.05.07 讲的 MTU 问题在二层的版本。**
**所以「VLAN 会不会影响 MTU」这个问题的答案是:**
**会,但只在「跨 trunk 传 1500 字节满包」时才会撞上**,**而多数厂商的默认值已经把这段算进去了。**
「0.26% 与 6.25%」差 24 倍, 这个差别说明「开销比例取决于包长」是一条通用规律——它同时适用于 VLAN 标签、GRE 隧道、PPPoE、以及所有封装。 记住这条规律,以后算任何封装开销都能自己推。
「优先级与 VLAN 在同一个字段里」这一条很实用:它意味着「改 QoS 优先级不用重新打标签」, 也意味着「一台交换机最多只能给 8 个优先级」(3 位)。 所以「给每个业务一个优先级」是做不到的,必须归并成 8 类。
最后「又加 VLAN 又加隧道」这个组合最容易出事: 数据中心里 VXLAN 加 VLAN 加 GRE 的情况很常见, 每层几个字节加起来,可用 MTU 可能只剩 1400 出头。 所以这类环境必须显式做 MSS 钳制。
30 秒实验
- 查一下你交换机上的 trunk 口本征 VLAN 是多少。
- 看两端的本征 VLAN 是否一致。
- 算一下:你的业务平均包长下,VLAN 标签占多少比例。
常见误区
- 以为 VLAN 标签在帧尾。它在源 MAC 与类型之间。
- 以为本征 VLAN 两端不用一致。不一致会「通错地方」。
- 以为加了 VLAN 就要改 MTU。多数设备已按 1522 处理。
自测三问(点开对答案)
1. 802.1Q 标签由哪几部分组成? —— 2 字节 TPID(0x8100)加 2 字节 TCI,TCI 内含 3 位优先级与 12 位 VID。 2. 为什么小包的业务更在意标签开销? —— 固定 4 字节在 64 字节的帧上占 6.25%,在大帧上只占 0.26%。 3. Trunk 口怎么处理无标签帧? —— 把它归入本征 VLAN,两端配置必须一致。下一节:VLAN 划好之后,一个包在里面的实际走法。
- ☐ (本节完,下一节 04.04.03 VLAN环境中的数据流向)