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(10 / 20 / 30);
- 交换机只看"帧从哪个口进来"判断 VLAN(按端口划 VLAN,6.13)——帧本身没有携带"我属于哪个 VLAN"的任何信息;
- 于是要让两栋楼的 VLAN 10 互通,就得专门拉一根线接在两台交换机的 VLAN 10 端口上;VLAN 20 再一根、VLAN 30 再一根;
- N 个 VLAN = N 根线。端口有限、桥架有限、钱也有限,VLAN 一多就撑不住。
问题的根子很清楚:帧不说话,只能靠位置猜身份。要让一根线承载多个 VLAN,就必须让帧自己开口说"我是谁"——这就是标记(tagging)。
二、解法:一根主干跑全部 VLAN(第一张配图)
802.1Q 的做法朴素到极点:在帧里插一段 4 字节的标签,把 VLAN ID 写进去。
- 交换机在主干口发出帧时打上标签(tagging),收到带标签的帧时看标签就知道该往哪个 VLAN 送;
- 于是两台交换机之间只要一根线(Trunk 口对接),就能承载全部 VLAN 的流量;
- 这根线上跑的帧是混在一起的——标签就是每帧的车牌,交换机靠车牌分流。
📌 三点要立刻记住:
- 打了标签的帧叫 tagged 帧,没打标签的叫 untagged 帧;
- 标签只在主干(Trunk)上活着——帧从 Access 口出去见终端时,标签会被剥掉(6.13),所以终端从头到尾不知道 VLAN 存在;
- 因此"标记 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 的两个数字):
- 普通以太帧:最小 64、最大 1518(14 字节头 + 1500 载荷 + 4 字节 FCS);
- 带标签的帧:多出 4 字节 → 最大 1522;
- MTU 仍是 1500——标签加在"数据字段之外",它不是载荷的一部分。所以主机侧该发多大的包还是多大,不需要为了 VLAN 调 MTU。
四、两端怎么配合:Access 与 Trunk 的标记行为
把 6.13 的两种端口角色,换成"标签视角"重新说一遍:
| 端口角色 | 接什么 | 出方向 | 入方向 |
|---|---|---|---|
| Access | 终端 | 剥掉标签(untagged) | 按本口 VLAN 打上标签 |
| Trunk | 交换机 / 三层设备 | 保留标签(tagged) | 读标签决定归属 |
厂商术语对照(配交换机时会对上):
- 华为 / 华三:
port link-type access、port link-type trunk、port trunk allow-pass vlan 10 20 30;还有一个 Hybrid 口,能逐个 VLAN 指定"打标 / 不打标",灵活性最高; - 思科:
switchport mode access/trunk、switchport trunk allowed vlan 10,20,30; - 查状态:华为
display port vlan、思科show interfaces trunk——能直接看到哪些口是 tagged、哪些是 untagged。
五、Native VLAN:那个"不打标签"的特例
Trunk 上有个反常识的规矩:有一个 VLAN 的帧不打标签就穿过主干——这个 VLAN 叫 Native VLAN(本征 VLAN),默认是 VLAN 1。
为什么要留这个特例:
- 兼容:老设备、某些不认标签的转发设备能继续工作;
- 控制协议要通过:STP 的 BPDU(5.7 的环路防护)、CDP/LLDP 这类二层控制帧是 untagged 的,得有个 VLAN 收留它们。
⚠️ 两端 Native VLAN 必须一致——这是经典故障源:A 端把 VLAN 10 当 Native(不打标发出),B 端却把不打标的帧归给 VLAN 20,结果帧串了门,A 的 VLAN 10 流量跑进了 B 的 VLAN 20。
✅ 工程建议:把 Native VLAN 换成一个不用的号(比如 999),业务 VLAN 全部只走 tagged——既不串门,也让"不打标的流量"变成可疑流量,便于排查。
六、动手 Demo(Demo85):看一眼标签到底长什么样
家里能做的不多(IPTV 口不带可见标签),但下面几招足够把概念验证掉。
A. 单位/学校交换机(有账号就能做)
display port vlan(华为)或show interfaces trunk(思科)——看哪些口是 tagged、哪些是 untagged,以及 Native VLAN 是多少;display vlan看每个 VLAN 的成员口——Trunk 口会出现在多个 VLAN 里(一线上跑多 VLAN 的直接证据);- 顺手对一下:两台交换机的 Native VLAN 是同一个号吗?不一致就是隐患。
B. 抓包看标签(最直观)
- 笔记本装上 Wireshark,接到交换机的 Trunk 口(或镜像口),抓几个包——在 "Ethernet II" 那层展开,会看到 802.1Q Virtual LAN 字段:TPID 0x8100、Priority(PCP)、VLAN ID 一目了然;
- 对比一个从 Access 口抓的包——没有 802.1Q 这一层。这就是"标签只在主干上活"的实证。
C. 家里 / 个人电脑也能验(网卡打标)
- 设备管理器 → 网卡属性 → 高级 → 找 "VLAN ID" / "Priority & VLAN"(Intel 网卡常见)。给它填个 VLAN 号,再抓包——你的电脑就能发出带标签的帧了(一般不需要这么做,因为交换机会帮你处理;但这是最便宜的"亲眼看见标签"的办法)。
D. 30 秒实验:证明标签不改 MTU
- 在命令行跑
ping -f -l 1472 8.8.8.8(-f不许分片、-l 1472指定载荷)。1472 + ICMP 头 8 + IP 头 20 = 1500,刚好卡在 MTU 上——能通,说明带标签的链路上 MTU 依然是 1500; - 把
-l改成 1473 再试——不通(需要分片但被禁止)。这个实验证明:标签的 4 字节没有算进载荷,交换机只是在帧上"外挂"了它。 - 全部完成。你现在能说清:标记为什么必须存在、4 个字节各记什么、标签在哪打在哪剥、Native VLAN 为什么是个坑。
七、常见误区
- "802.1Q 就是 VLAN"——802.1Q 是标记标准(怎么在帧上写明归属),VLAN 是划域概念(把广播域切开)。前者是后者的实现手段之一(另有 802.1ad / QinQ 做双层标签)。
- "多了 4 字节,MTU 就该改成 1504"——错。MTU 仍是 1500;标签在载荷之外,只把帧的最大长度变成 1522。不用动主机的 MTU。
- "Access 口也打标签"——Access 口对终端进出都不带标签(出口剥掉),标签只活在主干上。
- "VLAN ID 是 1~4096"——12 位 → 0~4095,0 与 4095 保留,可用 4094 个;VLAN 1 通常还是默认与 Native VLAN。
- "Native VLAN 两端设不一样也没事"——会串 VLAN(同一条 untagged 流量在两端被判成不同 VLAN),是典型配置事故。
- "把业务 VLAN 设成 Native VLAN 更省标签"——省不了多少,反而丢掉"untagged 流量一律可疑"这个排查抓手,还增加串门风险。
- "标签越多越高级"——QinQ(两层标签)是运营商用来区分不同客户的,普通企业网用不上;标签是有开销和复杂度的。
八、动手自测
点开自测(先自己答,再展开)
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 对终端完全透明。
九、下一步学什么
- ☑ 6.16(按教材顺序) —— 无须添加设备或更改线路即可修改网络(VLAN与标记VLAN) ✅ 已完成:本节把 VLAN 这条线收口——网络结构从"焊死在铜缆上"变成"可编辑的配置",挪人、扩楼、改结构三类改动各只需一行,前提是 802.1Q 标记。
相关笔记
- 无须添加设备或更改线路即可修改网络(VLAN与标记VLAN) —— 下一节:这套机制换来的最大本事——网络结构成了可编辑的对象
- 使用VLAN的好处(使用VLAN的好处) —— 上一节讲"切了赚什么",本节讲切开的两半怎么在半路认亲
- 使用二层交换机切分网络(VLAN) —— 802.1Q 的第一次亮相:Access/Trunk 与 1522 的出处
- 数据的格式(以太网的数据帧格式) —— 1518 / 1522 / MTU 1500 三个数字在这里第二次对账
- 如何连接(网络拓扑) —— STP 的 BPDU 是 untagged 控制帧,正是 Native VLAN 要收留的对象
- 二层交换机的操作(Unknown单播数据帧、泛洪) —— 交换机靠"查表 + 泛洪"转发,VLAN 与标签决定了它查的是哪张表
- 同时具备路由器和二层交换机功能的传输设备(三层交换机) —— 三层设备之间的链路同样跑 Trunk 标签,SVI 才知道帧该进哪个 VLAN