很多人学网络,背了一堆“Access 是接入链路、Trunk 是干道链路”,但一到真机上还是搞不清:为什么 PC 要接 Access?为什么交换机之间要插 Trunk?为什么同一个交换机上的两个口会 ping 不通?

这篇不堆术语,用一个办公室组网的例子把这三个概念讲明白。

先给结论

  1. VLAN:把一台物理交换机在逻辑上切成多个虚拟局域网,不同 VLAN 默认互相隔离;
  2. Access 口:接电脑、打印机等终端,一个口只属于一个 VLAN,出端口不带标签;
  3. Trunk 口:接交换机、路由器、防火墙,一个口可以同时跑多个 VLAN,出端口带标签。

一句话:电脑接 Access,交换机之间接 Trunk。

先看一个没有 VLAN 的办公室

假设你公司有一个 24 口交换机,行政部、财务部、技术部的电脑都插在这台交换机上:

  1. 行政部:3 台电脑
  2. 财务部:3 台电脑
  3. 技术部:4 台电脑

如果什么都不配,这 10 台电脑默认都在一个广播域里。意思是:

  1. 任何一台电脑发广播包(比如 ARP 找网关),其他 9 台都能收到;
  2. 财务部发的包,技术部的网卡理论上也能看到;
  3. 人一多,广播包越来越多,网络就容易卡。

这时候你就需要 VLAN。

VLAN 是什么?

VLAN(Virtual Local Area Network,虚拟局域网)的作用很简单:把一台物理交换机,在逻辑上切成好几台“虚拟交换机”。

还是上面那个例子,你可以在交换机上划 3 个 VLAN:

  1. VLAN 10:行政部
  2. VLAN 20:财务部
  3. VLAN 30:技术部

虽然这些电脑都插在同一台物理交换机上,但:

  1. VLAN 10 内部的电脑可以互相通信;
  2. VLAN 20 内部的电脑可以互相通信;
  3. VLAN 10 默认不能直接访问 VLAN 20 和 VLAN 30,就像它们接在不同交换机上一样。

这样广播包只在自己 VLAN 里转发,财务部的数据也不会被技术部电脑随便抓到。

Access 口是什么?

Access 口是交换机上接终端设备的口,比如电脑、打印机、服务器。

它有两个特点:

  1. 这个口只能属于一个 VLAN;
  2. 从这个口出去的数据包,是不带 VLAN 标签的(Untagged)。

为什么电脑要接 Access?因为普通电脑网卡根本看不懂 VLAN 标签。你把 IP 地址、子网掩码、网关填好就能上网,电脑不知道自己在哪个 VLAN 里——这个“归类”的工作是交换机替它做的。

举例:

  1. 行政部 PC1 插在交换机 G1/0/1 口;
  2. 你把 G1/0/1 划进 VLAN 10;
  3. PC1 发出的包是不带标签的;
  4. 交换机一查:这个口属于 VLAN 10,好,那它发出的包就按 VLAN 10 转发。

Trunk 口是什么?

Trunk 口是交换机连交换机、连路由器、连防火墙的口。

它和 Access 最大的区别:

  1. 一个 Trunk 口可以同时跑多个 VLAN;
  2. 从 Trunk 口出去的数据包,会带上 VLAN 标签(Tagged),让对端交换机知道这个包属于哪个 VLAN。

为什么需要 Trunk?

假设你办公室有两台交换机:

  1. 一楼交换机:接行政部和财务部;
  2. 二楼交换机:接技术部和部分财务部电脑。

你希望:一楼的财务部电脑和二楼的财务部电脑在同一个 VLAN 20 里,能互相通信。

如果两台交换机之间用 Access 口连,那这根线就只能跑一个 VLAN,你财务、行政、技术三个部门就没法跨交换机了。

所以交换机之间必须用 Trunk 口:一根线同时带着 VLAN 10、20、30 的标签数据过去,对端交换机收到包后,一看标签是 VLAN 20,就知道转发给财务部的电脑。

一张表对比 Access 和 Trunk

对比项

Access

Trunk

连接对象

电脑、打印机、服务器等终端

交换机、路由器、防火墙

所属 VLAN

只能属于 1 个

可以同时放行多个 VLAN

带不带标签

出端口不带标签(Untagged)

出端口带标签(Tagged)

典型用途

接终端

设备之间级联

电脑能不能直接接

能,通常就是这么接

普通电脑直接接 Trunk 通常上不了网

一个最简单的配置例子(H3C Comware 风格)

不同厂商命令不一样,但逻辑是一样的。下面以 H3C 为例:

# 进入系统视图
system-view

# 创建 VLAN 10
vlan 10
 name Xingzheng

# 创建 VLAN 20
vlan 20
 name Caiwu

# 把 G1/0/1 口设为 Access,并划进 VLAN 10
interface GigabitEthernet1/0/1
 port link-type access
 port access vlan 10

# 把 G1/0/2 口设为 Access,并划进 VLAN 20
interface GigabitEthernet1/0/2
 port link-type access
 port access vlan 20

# 假设 G1/0/24 是连到另一台交换机的口,设为 Trunk,放行 VLAN 10 和 20
interface GigabitEthernet1/0/24
 port link-type trunk
 port trunk permit vlan 10 20

华为 VRP 命令写法类似,只是把 port link-type access 写成 port link-type access、port trunk allow-pass vlan 10 20 这种形式。逻辑完全一样:Access 口定 VLAN,Trunk 口放多个 VLAN 通过。

新手最容易问的三个问题

1. 为什么我把电脑接在 Trunk 口上,就上不了网?

因为普通电脑网卡不会给数据包打 VLAN 标签。Trunk 口收到一个不带标签的包,不知道它该属于哪个 VLAN,就会丢掉。接终端请用 Access 口。

2. 不同 VLAN 之间怎么通信?

默认不能直接通信。如果要让行政部访问财务部的某台服务器,需要靠三层设备(路由器或三层交换机)做 VLAN 间路由,或者靠防火墙做策略放行。这就是为什么网络里经常听到“三层交换”“单臂路由”这些词。

3. Trunk 口上的 PVID / 默认 VLAN 是什么?

Trunk 口也有一个默认 VLAN(通常是 VLAN 1),收到不带标签的包时,就把它归到这个默认 VLAN 里。不同厂商对默认 VLAN 的处理细节不一样,真机配置时要注意两端保持一致,不然会出现“偶尔能通、偶尔不通”的诡异问题。

FAQ

Q1:VLAN 是干什么用的?

A:把一台物理交换机逻辑上分成多个虚拟局域网,隔离广播、隔离不同部门之间的访问。

Q2:Access 和 Trunk 怎么选?

A:接电脑、打印机、服务器用 Access;交换机之间、交换机连路由器/防火墙用 Trunk。

Q3:同一个 VLAN 能不能跨两台交换机?

A:能,前提是两台交换机之间级联的口配成 Trunk,并放行这个 VLAN。

Q4:VLAN 之间默认能不能 ping 通?

A:不能。需要三层路由或三层交换机做 VLAN 间转发。

本文以 H3C Comware 命令为例说明原理,不同厂商、不同版本命令细节有差异,实际配置请以设备官方配置指南为准。

参考资料

  1. H3C 技术认证体系官方介绍:https://www.h3c.com/cn/My_H3C/Examinee/Certification_System/Technology_Certification/
  2. 新华三大学培训与认证体系:https://www.h3c.com/cn/Training/Training_and_Certification/
  3. H3CNE-RS+ 官方课程:https://www.h3c.com/cn/Training/Boutique_Activities/open_class_list/H3CNE_RS/
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐