🌐 第六章 路由
📄 一句话概括

IEEE 802.1Q(VLAN 标记 / tagging)=在以太帧里插 4 字节标签,让帧自己写明"我属于哪个 VLAN"。有了标记,交换机之间不用再"一个 VLAN 拉一根线",而是一根主干(Trunk)承载全部 VLAN——这就是"将多根网线合并成一根"。标签四段:TPID 0x8100(16 位,帧类型标记)+ PCP(3 位,优先级)+ DEI(1 位,可丢弃)+ VLAN ID(12 位,4094 个可用),插在源 MAC 与类型之间,帧长上限 1518 → 1522(MTU 仍 1500 不变)。

📝 本节和前面几节的关系

6.13 已经亮过相——Access 口打/剥标签、Trunk 口带标签过、1522 的出处;本节把 802.1Q 从配角提成主角,讲清"这几字节到底记了什么、两端怎么配合"。6.14 讲完"切了赚什么",本节补上"切开的两半怎么在半路认亲"。5.6 的帧格式与 MTU 1500,在这里第二次对上账。

一、为什么需要标记:不打标签,就只能一根线一个 VLAN

先把没有标记的世界推到底:

问题的根子很清楚:帧不说话,只能靠位置猜身份。要让一根线承载多个 VLAN,就必须让帧自己开口说"我是谁"——这就是标记(tagging)。

二、解法:一根主干跑全部 VLAN(第一张配图)

802.1Q 的做法朴素到极点:在帧里插一段 4 字节的标签,把 VLAN ID 写进去。

📌 三点要立刻记住:

  1. 打了标签的帧叫 tagged 帧,没打标签的叫 untagged 帧;
  2. 标签只在主干(Trunk)上活着——帧从 Access 口出去见终端时,标签会被剥掉(6.13),所以终端从头到尾不知道 VLAN 存在;
  3. 因此"标记 VLAN"这个动作,只发生在交换机与交换机(或交换机与三层设备)之间,终端侧永远是干净的帧。

这就像快递:城市间的干线运输车上,箱子都贴着分拣标签;送到小区门口时标签撕掉,住户只看到自己的包裹。

三、802.1Q 标签里记了什么(第二张配图)

4 字节 = 32 位,切成四段:

字段 位数 作用
TPID(值 0x8100) 16 位 帧类型标记——"我后面跟了个 VLAN 标签"
PCP 3 位 优先级(0~7),给语音/视频这类敏感流量开小灶(QoS)
DEI 1 位 可丢弃指示——网络拥塞时这帧可以优先丢
VLAN ID 12 位 主角:0~4095,可用 4094 个(0 和 4095 保留)

插入位置:源 MAC 地址与类型字段之间(6.13 那张图的同一处)。为什么不插在开头?因为目的 MAC 必须最先被读到,交换机拿到帧第一眼就得判断要不要收——标签插在这里,既不妨碍二层寻址,又能让交换机在读类型之前就知道 VLAN 归属。

帧长变化(回收 5.6 的两个数字):

四、两端怎么配合:Access 与 Trunk 的标记行为

把 6.13 的两种端口角色,换成"标签视角"重新说一遍:

端口角色 接什么 出方向 入方向
Access 终端 剥掉标签(untagged) 按本口 VLAN 打上标签
Trunk 交换机 / 三层设备 保留标签(tagged) 读标签决定归属

厂商术语对照(配交换机时会对上):

五、Native VLAN:那个"不打标签"的特例

Trunk 上有个反常识的规矩:有一个 VLAN 的帧不打标签就穿过主干——这个 VLAN 叫 Native VLAN(本征 VLAN),默认是 VLAN 1。

为什么要留这个特例:

⚠️ 两端 Native VLAN 必须一致——这是经典故障源:A 端把 VLAN 10 当 Native(不打标发出),B 端却把不打标的帧归给 VLAN 20,结果帧串了门,A 的 VLAN 10 流量跑进了 B 的 VLAN 20。

✅ 工程建议:把 Native VLAN 换成一个不用的号(比如 999),业务 VLAN 全部只走 tagged——既不串门,也让"不打标的流量"变成可疑流量,便于排查。

六、动手 Demo(Demo85):看一眼标签到底长什么样

家里能做的不多(IPTV 口不带可见标签),但下面几招足够把概念验证掉。

A. 单位/学校交换机(有账号就能做)

  1. display port vlan(华为)或 show interfaces trunk(思科)——看哪些口是 tagged、哪些是 untagged,以及 Native VLAN 是多少;
  2. display vlan 看每个 VLAN 的成员口——Trunk 口会出现在多个 VLAN 里(一线上跑多 VLAN 的直接证据);
  3. 顺手对一下:两台交换机的 Native VLAN 是同一个号吗?不一致就是隐患。

B. 抓包看标签(最直观)

  1. 笔记本装上 Wireshark,接到交换机的 Trunk 口(或镜像口),抓几个包——在 "Ethernet II" 那层展开,会看到 802.1Q Virtual LAN 字段:TPID 0x8100、Priority(PCP)、VLAN ID 一目了然;
  2. 对比一个从 Access 口抓的包——没有 802.1Q 这一层。这就是"标签只在主干上活"的实证。

C. 家里 / 个人电脑也能验(网卡打标)

  1. 设备管理器 → 网卡属性 → 高级 → 找 "VLAN ID" / "Priority & VLAN"(Intel 网卡常见)。给它填个 VLAN 号,再抓包——你的电脑就能发出带标签的帧了(一般不需要这么做,因为交换机会帮你处理;但这是最便宜的"亲眼看见标签"的办法)。

D. 30 秒实验:证明标签不改 MTU

  1. 在命令行跑 ping -f -l 1472 8.8.8.8(-f 不许分片、-l 1472 指定载荷)。1472 + ICMP 头 8 + IP 头 20 = 1500,刚好卡在 MTU 上——能通,说明带标签的链路上 MTU 依然是 1500;
  2. 把 -l 改成 1473 再试——不通(需要分片但被禁止)。这个实验证明:标签的 4 字节没有算进载荷,交换机只是在帧上"外挂"了它。
  3. 全部完成。你现在能说清:标记为什么必须存在、4 个字节各记什么、标签在哪打在哪剥、Native VLAN 为什么是个坑。

七、常见误区

八、动手自测

点开自测(先自己答,再展开) 1. 不打标签时,"一个 VLAN 一根线"的根本原因是什么? 2. 802.1Q 标签共几字节?插在帧的哪个位置? 3. 标签的四个字段分别是什么、各多少位? 4. VLAN ID 有多少位、可用多少个?哪两个是保留的? 5. 带标签的帧最大长度是多少?MTU 变了吗?为什么? 6. PCP 和 DEI 是干什么用的? 7. Access 口和 Trunk 口在"打标签/剥标签"上分别是什么行为? 8. 什么是 Native VLAN?为什么要有这个"不打标签"的特例? 9. Native VLAN 两端不一致会出什么问题?工程上怎么规避? 10. 为什么说"标签只在主干上活着"?终端能不能看到 VLAN 标签?

答案:① 交换机只能靠"帧从哪个端口进来"判断 VLAN,帧自身不携带 VLAN 信息,所以每个 VLAN 都要占一根专门的线。② 4 字节;插在源 MAC 地址与类型字段之间。③ TPID(值 0x8100,16 位,帧类型标记)、PCP(3 位,优先级)、DEI(1 位,可丢弃指示)、VLAN ID(12 位,VLAN 号)。④ 12 位 → 0~4095,可用 4094 个;保留的是 0 和 4095(VLAN 1 通常是默认 VLAN 与 Native VLAN)。⑤ 1522 字节(1518 + 4);MTU 不变,仍是 1500——标签加在数据字段之外,不计入载荷。⑥ PCP 给帧标优先级(0~7),让语音/视频等敏感流量优先转发(QoS);DEI 表示拥塞时这帧可优先丢弃。⑦ Access 口:出方向剥标签、入方向按本口 VLAN 打标签(对终端始终不带标签);Trunk 口:出方向保留标签、入方向读标签决定归属。⑧ Native VLAN 是 Trunk 上唯一不打标签通过的 VLAN,默认 VLAN 1。留它的原因:兼容不认标签的设备,以及让 STP 的 BPDU、CDP/LLDP 这类二层控制帧能通过。⑨ 会串 VLAN——同一条 untagged 流量在一端属于 VLAN 10、在另一端被判成 VLAN 20,流量跑错广播域。规避:两端 Native VLAN 设成同一个,并且用一个不用的号(如 999)当 Native,业务 VLAN 全部走 tagged。⑩ 因为交换机在 Access 口出方向会把标签剥掉;终端网卡不认识标签,所以终端看不到 VLAN 信息,VLAN 对终端完全透明。

九、下一步学什么

相关笔记