3、VLAN标签技术:802.1Q标准详解、Tagged与Untagged帧的区别、VLAN ID范围与保留ID、PVID的概念

好,咱们接着聊VLAN。上一章我讲了VLAN的基本划分思路,说白了就是把一个物理交换机切成几个虚拟的局域网。但问题来了——交换机怎么知道一个数据帧属于哪个VLAN?

答案就在帧里加个标签。这就是我今天要重点讲的802.1Q标准

3.1 802.1Q标准:给帧贴个“身份证”

802.1Q是IEEE定义的一个标准。它的核心思想很简单:在以太网帧头里插入一个4字节的标签(Tag),用来标识这个帧属于哪个VLAN。

我刚开始学的时候,总觉得这4字节很神秘。其实拆开来看,结构非常清晰:

| 前导码 | 目标MAC | 源MAC | **802.1Q标签(4字节)** | 类型/长度 | 数据 | FCS |

这4字节里,真正干活的是这几个字段:

  • TPID(Tag Protocol Identifier):固定值0x8100,告诉交换机“嘿,这是个带标签的帧”。
  • Priority(3位):802.1p优先级,用于QoS,我一般叫它“插队权”。
  • CFI(1位):规范格式指示器,以太网里通常为0。
  • VID(12位):VLAN ID,取值范围0~4095。这才是核心。

嗯,这里要注意:VID只有12位,所以最多只能有4096个VLAN。你想想看,为什么不是更多?因为设计标准的时候,12位已经够用了。现在大型数据中心里,4096个VLAN有时候还真不够用,那是后话了。

核心要点:802.1Q标签就是在原始以太网帧里硬塞了4个字节。交换机看到0x8100,就知道后面跟着VLAN信息。

3.2 Tagged与Untagged帧:带标签和不带标签的区别

这个知识点,我当年在项目里栽过跟头。咱们先搞清楚概念:

  • Untagged帧:就是普通的以太网帧,没有802.1Q标签。比如你的电脑发出来的数据,默认都是Untagged的。
  • Tagged帧:帧头里插了4字节的802.1Q标签,明确写着“我属于VLAN X”。

那什么时候用Tagged,什么时候用Untagged?

我个人的习惯是这么记的:

  • Access端口:只发Untagged帧。连接终端设备(PC、打印机、服务器)时用。设备不懂VLAN,给它发带标签的帧,它直接扔掉。
  • Trunk端口:只发Tagged帧。交换机之间互联时用。因为Trunk上要跑多个VLAN,必须用标签区分。

我曾经遇到过一个坑:有台服务器网卡支持VLAN,我配置了Trunk口,结果忘了在服务器端也打上标签。服务器收到的全是Untagged帧,交换机又不知道这些帧属于哪个VLAN,直接丢包。排查了半天,最后发现是两端标签策略不一致

避坑指南:我曾经在割接时,把一台交换机的Trunk口误配成了Access口。结果所有跨交换机的VLAN通信全部中断。记住:Trunk口必须发Tagged帧,Access口必须发Untagged帧。混用就是灾难。

3.3 VLAN ID范围与保留ID

VID是12位的,范围0~4095。但并不是所有ID都能随便用。我列个表,你一看就明白:

VLAN ID 范围 用途 说明
0 保留 优先级标签 表示帧只携带优先级信息,不指定VLAN
1 默认 默认VLAN 所有端口默认属于VLAN 1,一般不建议用
2~1001 正常范围 用户可用的VLAN 绝大多数场景用这个范围就够了
1002~1005 保留 FDDI、令牌环等 老古董技术,现在基本见不到了
1006~4094 扩展范围 用户可用 部分交换机支持,但兼容性要注意
4095 保留 保留 一般不用,有些厂商用来表示“所有VLAN”

我个人建议:生产环境里尽量用2~1001这个范围。为什么?因为很多老交换机不支持扩展VLAN。我有个客户,非要用VLAN 3000,结果一台接入交换机直接不认,数据全丢了。后来全部改成1000以内的ID,问题解决。

小技巧:VLAN 1是默认VLAN,所有端口默认都在里面。但安全角度讲,我建议把VLAN 1的端口全部移出来,或者干脆禁用VLAN 1。因为攻击者很容易猜到VLAN 1的存在,容易成为突破口。

3.4 PVID:端口默认的“归属”

PVID,全称是Port VLAN ID。这个概念其实很简单:当端口收到一个Untagged帧时,交换机给它打上哪个VLAN的标签?这个标签的ID就是PVID。

举个例子:

  • 你有一台电脑,接在交换机的G0/1口上。
  • 电脑发出来的数据是Untagged的。
  • 交换机收到后,发现这个帧没有标签。
  • 于是交换机查看G0/1口的PVID,假设是10。
  • 交换机就把这个帧打上VLAN 10的标签,然后转发。

说白了,PVID就是Untagged帧的“默认归属”

我记得有一次,帮一个朋友调试网络。他说“我电脑能ping通网关,但就是访问不了服务器”。我一看配置,Access口的PVID是20,但服务器所在的VLAN是30。电脑发出去的Untagged帧被交换机打上了VLAN 20的标签,当然到不了VLAN 30的服务器。把PVID改成30,问题解决。

记住这个公式:

  • Access口:PVID = 该端口所属的VLAN ID。收到Untagged帧,打上PVID标签;发送时,去掉标签变Untagged。
  • Trunk口:PVID通常为1(默认)。但你可以改。收到Untagged帧,打上PVID标签;发送时,保留标签(除非该VLAN被配置为untagged)。

嗯,这里要特别提醒:Trunk口的PVID一定要小心。我曾经见过有人把Trunk口的PVID改成100,结果所有从Trunk口进来的Untagged帧都被打上了VLAN 100的标签,导致VLAN 1的流量全部丢失。那叫一个惨。

3.5 实战中的小总结

讲了这么多,我帮你捋一捋:

  1. 802.1Q标签就是帧的“身份证”,4字节,核心是12位的VID。
  2. Tagged帧带标签,用于Trunk口;Untagged帧不带标签,用于Access口。
  3. VLAN ID范围0~4095,生产环境建议用2~1001。
  4. PVID是端口给Untagged帧打的默认标签,Access口的PVID就是它的VLAN,Trunk口的PVID默认是1。

你想想看,如果没有这些标签技术,VLAN根本没法跨交换机工作。每一帧都清清楚楚地写着“我属于谁”,交换机才能准确转发。这就是802.1Q的精髓。

下一章,我会讲VLAN的配置实战。到时候咱们真刀真枪地敲命令,把今天这些理论用起来。