交换机笔记(二)
上一篇说过,交换机默认所有端口在同一个广播域里,广播帧会泛洪到每一个端口。这篇记录 VLAN(Virtual LAN,虚拟局域网)怎么把一个物理广播域切成多个逻辑广播域,以及 802.1Q、端口类型、VLAN 间通信这些绕不开的内容。
一、广播域的麻烦
一台不做任何划分的交换机,ARP 请求这样的广播帧会送到所有端口。网络小还好,规模一大问题就来了:
- 带宽浪费:每台主机都要接收和处理与自己无关的广播。
- 安全隐患:任何一个端口都能收到全网的广播流量,等于没有隔离。
- 管理僵硬:部门调整、工位搬迁,逻辑分组想变就得重新布线。
用路由器可以隔离广播域,但路由器端口数量有限、成本高,不可能每个部门接一个路由器口。VLAN 的思路是在交换机内部做文章:把一台物理交换机逻辑上切成多台,每台逻辑交换机就是一个 VLAN,VLAN 之间二层互不相通。
二、802.1Q:给帧打标签
跨交换机的链路要同时承载多个 VLAN 的流量,帧在线路上跑的时候必须带一个“我属于哪个 VLAN”的标识。IEEE 802.1Q 定义的做法是在源 MAC 和 Type 字段之间插入一个 4 字节的 Tag:
| 目的MAC 6B | 源MAC 6B | TPID 2B | TCI 2B | Type 2B | 数据 | FCS 4B || 字段 | 长度 | 含义 |
|---|---|---|
| TPID | 16 bit | 标签协议标识,固定为 0x8100,表示这是一个 802.1Q 帧 |
| PCP | 3 bit | 优先级(802.1p),取值 0~7,用于 QoS |
| DEI | 1 bit | 丢弃资格指示,拥塞时优先丢弃标记为 1 的帧 |
| VID | 12 bit | VLAN ID,取值 0~4095 |
VID 用 12 bit,共 4096 个值,但0 和 4095 是保留值:VID=0 表示这是一个“只带优先级、不属于任何 VLAN”的优先级标记帧,VID=4095 保留未用。所以可用的 VLAN 是 1~4094,共 4094 个。
两个默认行为要记住:交换机缺省时所有端口属于 VLAN 1,思科设备上 VLAN 1 还不能删除;帧打上 Tag 后变长 4 字节,最大帧从 1518 字节变成 1522 字节,老式设备可能要把这类帧当“小巨帧”处理,现代设备无需关心。
过时结论:老教材把 Tag 里那 1 bit 叫作 CFI(Canonical Format Indicator),是给令牌环网兼容用的。令牌环消失后这一位没有意义,802.1Q-2011 起正式改名为 DEI。现在写 CFI 的资料都是沿用了旧标准的说法。
三、VLAN 的划分方式
| 方式 | 说明 | 现状 |
|---|---|---|
| 基于端口 | 端口配死属于哪个 VLAN | 最常用,本文默认指这种 |
| 基于 MAC 地址 | 按终端 MAC 决定 VLAN,终端换端口不用改配置 | 要预先登记所有 MAC,管理量大,少见 |
| 基于子网 / 协议 / 策略 | 按三层网段、协议类型或策略规则匹配 | 特定场景使用 |
过时结论:早期资料常提到用 GVRP(GARP VLAN 注册协议)在交换机之间动态同步 VLAN 配置,省去逐台手工创建。GVRP 配置错误会大范围扩散,实践中鲜有人用,华为新设备已默认不支持,取而代之的是更可控的手工配置或网管统一下发。思科的同类私有协议 VTP 也一样,新版本最佳实践是透明模式或直接关闭。
四、端口类型:Access、Trunk、Hybrid
1. Access 端口
Access 端口只属于一个 VLAN,用于连接终端(PC、服务器、打印机)。终端网卡不认识 Tag,所以:
- 收方向:收到无 Tag 帧,打上端口默认 VLAN(PVID)的 Tag 再进入转发流程。
- 发方向:转发给终端前把 Tag 剥掉。
终端完全感知不到 VLAN 的存在。
2. Trunk 端口
Trunk 端口用于交换机之间、交换机与路由器之间的链路,可以同时承载多个 VLAN 的流量,帧带着 Tag 过线。它也有一个 PVID:属于 PVID 的那个 VLAN 的帧在 Trunk 上不带 Tag 发送,思科把这个 VLAN 叫 Native VLAN(华为就叫 Trunk 口的 PVID)。
Trunk 两端对 Native VLAN / PVID 的理解必须一致,否则无 Tag 帧会被对端归进错误的 VLAN,造成 VLAN 间串流。这也是 VLAN 跳跃攻击利用的点,工程上常把 PVID 改成一个不使用的 VLAN。
过时结论:思科设备曾默认开启 DTP 动态协商,端口会自动协商成 Trunk。攻击者伪装成交换机就能把接入口谈成 Trunk 口,进而拿到所有 VLAN 的流量。现在的安全基线是手工指定端口模式并关闭协商(
switchport nonegotiate),DTP 已不建议使用。
3. Hybrid 端口
Hybrid 是华为设备上的第三种类型,可以把它理解为“更自由的 Trunk”:它能放行多个 VLAN,并且每个 VLAN 可以单独指定带不带 Tag。一个典型场景是 IP 电话加 PC:语音 VLAN 带 Tag 发给电话,数据 VLAN 不带 Tag 直通 PC,一个端口搞定。
三种类型的收发处理对比:
| 端口类型 | 收到无 Tag 帧 | 发送处理 |
|---|---|---|
| Access | 打上 PVID 的 Tag | 剥掉 Tag 发出 |
| Trunk | 打上 PVID 的 Tag | PVID 的 VLAN 去 Tag,其余保留 Tag |
| Hybrid | 打上 PVID 的 Tag | 按 per-VLAN 配置决定去 Tag 或保留 |
思科体系只有 Access 和 Trunk 两种叫法,Hybrid 是华为的叫法,配置命令自然也不同。
4. 华为配置示例
[SW] vlan 10[SW] interface GigabitEthernet 0/0/1[SW-GE0/0/1] port link-type access[SW-GE0/0/1] port default vlan 10
[SW] interface GigabitEthernet 0/0/24[SW-GE0/0/24] port link-type trunk[SW-GE0/0/24] port trunk allow-pass vlan 10 20Trunk 口默认只允许 VLAN 1 通过,其余 VLAN 要用 port trunk allow-pass 显式放行,这是初学者最常踩的坑之一。
五、VLAN 之间怎么通信
不同 VLAN 是不同的广播域,二层天然不通,必须经过三层设备。注意一个前提:不同 VLAN 要对应不同的 IP 网段。
1. 单臂路由(Router-on-a-Stick)
早期做法:路由器的一个物理口连到交换机的 Trunk 口,物理口上划子接口,每个子接口终结一个 VLAN 的 Tag(如 dot1Q termination vid 10),配上该网段的网关地址。VLAN 间流量要走“交换机 → 路由器 → 交换机”的折返,单臂的链路带宽就是上限。
2. 三层交换(SVI / VLANIF)
主流做法:在三层交换机上为每个 VLAN 建一个逻辑三层接口——思科叫 SVI,华为叫 VLANIF——配上各网段的网关地址,路由转发在交换机内部由硬件完成,线速转发,不再需要外部路由器。
[SW] interface Vlanif 10[SW-Vlanif10] ip address 192.168.10.254 24六、ISL:输给 802.1Q 的私有方案
802.1Q 成为主流之前,思科推过私有封装 ISL(Inter-Switch Link)。两者思路不同:
| 对比项 | ISL | 802.1Q |
|---|---|---|
| 厂商 | 思科私有 | IEEE 开放标准 |
| 封装方式 | 原始帧外面再包 26 字节头部 + 4 字节新 CRC | 帧内部插入 4 字节 Tag |
| 原始帧 | 不修改 | 插入 Tag 后需重算 FCS |
| VLAN 数量 | 10 bit,1024 个 | 12 bit,4094 个(0/4095 保留) |
ISL 整帧外套装,开销大、不通用,早已被淘汰,近几年的思科设备也不再支持。
为什么保留这个过时知识点:老教材和旧题库很喜欢考“ISL 与 802.1Q 的区别”。它也是一个很好的标准化案例——私有方案即便先发,只要开放方案足够好,最终都会被挤出市场。
七、4094 个不够用之后
4094 个 VLAN 对园区网绰绰有余,但对运营商和多租户数据中心就不够了。两条扩展路线:
- QinQ(802.1ad):帧里套两层 Tag,运营商外层、客户内层,4094×4094 的组合空间。
- VXLAN(RFC 7348):数据中心主流方案,24 bit 的 VNI 提供约 1677 万个隔离域,二层帧封装在 UDP(目的端口 4789)里跨三层网络传输。
注意“VLAN 最多 4094 个”这条结论本身没有过时——802.1Q 的规定至今如此,过时的是“4094 永远够用”的假设。
八、小结
- VLAN 把一台交换机切成多个逻辑广播域,802.1Q 用 4 字节 Tag 标识帧所属的 VLAN,可用 VID 为 1~4094。
- Access 接终端、Trunk 走交换机间链路、Hybrid 可以按 VLAN 灵活控制是否带 Tag;Trunk 两端 PVID 必须一致。
- 不同 VLAN 之间通信必须走三层:单臂路由已被三层交换(SVI/VLANIF)取代。
- ISL、GVRP、DTP、VTP 都已淘汰或不建议使用,但它们是理解“私有协议 vs 开放标准”和二层安全的经典案例。
- VLAN 数量不够时,运营商用 QinQ,数据中心用 VXLAN。