资讯动态

VLAN与单臂路由:从广播域隔离到跨VLAN通信的完整指南

发布时间:2026/10/19 11:07:16 来源:尧图企业网站定制
讲真VLAN 这一篇拖了挺久才敢动笔。前面教她 IP、MAC、ARP 的时候知识还算是一个一个的零件到 VLAN 这里突然要开始“搭房子”了同一台交换机凭什么要分成好几个互不相通的小房间更麻烦的是房间之间还得开一扇门让不同 VLAN 的电脑能互相访问于是 Trunk 和单臂路由又跟着冒出来。这一篇就是把这个过程从头捋一遍用最贴近直觉的方式讲明白 VLAN、Trunk、单臂路由到底是什么、为什么要这么设计以及配置的时候哪些地方最容易翻车。不管你是想给别人讲清楚还是自己刚学到交换这部分都可以照着动手做一遍。1. 为什么一台交换机就能上网却偏要拆成一个个“小房间”1.1 广播域所有人挤在一个大厅里喊话交换机默认情况下所有端口都在同一个“广播域”里。只要有一台设备发出广播帧比如最典型的 ARP 请求交换机就会把它从除了接收口以外的所有端口转发出去。这个网络里有多少台设备一次广播就会被复制多少份。设备少的时候问题不大几台、几十台都能忍一旦到了几百台有人频繁发起广播整个网络就会像开会时所有人同时说话一样谁也听不清谁在说什么。这就是常说的广播风暴。这里有个容易忽略的底层逻辑交换机转发单播帧靠的是 MAC 地址表能把数据精确送到目标端口但广播帧和未知单播帧没有精确目标必须“广撒网”。所以广播域越大无效流量越多网络越容易卡顿。换句话说交换机的本职工作是把数据快速送对地方但它天生不会主动帮你控制“嗓门大小”。用生活里的例子讲默认交换机就像一个大平层谁喊一嗓子全楼都听得见VLAN 就是在这个大平层里砌隔音墙把住户分成几个独立的套间。套间之间互不打扰各自安安静静过日子。1.2 VLAN 到底是怎么“隔离”的VLAN虚拟局域网的作用就是在二层把一个物理交换机切成多个逻辑交换机。每个 VLAN 是一个独立的广播域VLAN 10 的广播不会跑到 VLAN 20VLAN 20 的主机也看不到 VLAN 10 的主机。这样做有三个直接好处。一是减少广播流量。网络规模大了隔音墙把广播限制在小范围里谁喊一嗓子最多只有同房间的人听见整体网络自然清爽很多。二是安全隔离。财务部的电脑和研发部的电脑放在不同 VLAN 里敏感数据不会在二层被无关设备嗅探到就算有人把电脑插到同一个交换机上只要端口 VLAN 不属于财务部也看不到财务部的广播和单播。三是管理灵活。不需要重新布线改一下端口 VLAN 归属就能把设备从一个逻辑网络挪到另一个逻辑网络换部门、搬家、调整工位都方便。可能有人会问VLAN 和子网有什么区别答案很关键VLAN 是二层概念它隔离的是广播域子网是三层概念它划的是 IP 地址段。实际项目里两者通常一一对应VLAN 10 配 192.168.10.0/24VLAN 20 配 192.168.20.0/24但这不是强制绑定。理解这一点对后面学三层交换、SVI交换虚拟接口非常有帮助。1.3 一个关键认知VLAN 之间的“门”要靠三层来开VLAN 隔离以后不同 VLAN 的电脑默认是互相看不见的。但如果业务需要比如财务要访问研发部的打印机或者宿舍楼的电脑要访问教学楼的服务器就得有人给它们开一扇门。这里要特别强调这扇门不能靠交换机二层本身解决。二层交换只能在同一个 VLAN 内部转发帧跨 VLAN 就必须走三层路由。路由器和三层交换机都能干这个事而单臂路由就是其中一种很经典的开“门”方式——用一个路由器接口配合交换机 Trunk 口让多个 VLAN 的流量都从这扇门进出。把“为什么要拆房间”这个问题想清楚之后接下来就得面对更实际的问题数据包在交换机里到底是怎么被打上“房间号”标签的这就涉及 Access 口和 802.1Q。2. 给数据帧贴“门牌号”Access 口和 802.1Q 标签2.1 端口模式一个端口要么是普通门要么是走廊门交换机端口最常见的两种模式是 Access 和 Trunk。Access 口通常连接 PC、打印机、摄像头这类终端设备它只属于一个 VLAN。数据帧从 Access 口进交换机时会被打上这个 VLAN 的标签出 Access 口时标签会被撕掉再送给终端。终端设备完全感觉不到 VLAN 的存在它只知道自己在一个普通的局域网里不需要做任何额外配置。Trunk 口则不一样它通常用来连接交换机与交换机、交换机与路由器是承担多个 VLAN 流量的“走廊”。Trunk 口上的帧是带着标签跑的这样才能区分哪些帧属于 VLAN 10、哪些属于 VLAN 20。简单记Access 是“单间房门”Trunk 是“连接各房间的走廊”。用一个表格对比会更清楚维度Access 口Trunk 口常见连接对象终端设备PC、打印机交换机、路由器承载 VLAN 数量一个多个发送给对端的帧不带标签带 802.1Q 标签典型配置动作指定端口属哪个 VLAN指定允许哪些 VLAN 通过2.2 802.1Q 标签长什么样在以太网帧的源 MAC 地址和类型字段之间802.1Q 标准插入了一个 4 字节的标签。其中最重要的是最末尾的 12 位 VLAN ID一共能表示 0 到 4095去掉保留值可用 VLAN 范围是 1 到 4094。另外那几位分别是优先级和丢弃标志位用来做 QoS初学阶段可以先不细究。如果把一个以太网帧比作一份快递MAC 地址就是收件人地址而 802.1Q 标签就像贴在包裹上的“门牌号贴纸”。交换机看到贴纸就知道这份快递该送到哪个房间到达房间门口再把贴纸撕掉收件人看到的还是干净整洁的原始包裹。这个类比在教初学时特别好用因为终端设备根本不知道自己被贴过标签又撕掉了。2.3 打标签和撕标签同 VLAN 通信的完整路径假设 PC-A 在 VLAN 10PC-B 也在 VLAN 10PC-A 给 PC-B 发数据。帧从 PC-A 出来时是没有标签的到达交换机 Access 口后交换机根据端口配置的 PVID默认 VLAN ID给它打上 VLAN 10 的标签。帧在交换机内部带着标签进行转发交换机会查 MAC 地址表发现目标 MAC 对应的端口属于 VLAN 10于是把帧送到 PC-B 所在的 Access 口出端口时把标签撕掉PC-B 收到一个干净帧。整个过程终端无感标签只在交换机内部有意义。这也能解释一个常见误区很多人以为 Access 口收到带标签的帧就会直接丢弃。实际上不完全是Access 口收到带标签帧时要判断标签和端口 PVID 是否一致一致就收不一致才丢。在一些特殊场景下比如电话的语音 VLAN 功能Access 口甚至能同时处理数据和语音两种 VLAN 的帧只是切换规则更复杂初学阶段可以先放一放。3. Trunk让多个 VLAN 跨交换机迁移时不掉队3.1 两台交换机之间只拉一根线会怎样前面所有内容都假设网络里只有一台交换机。现实里交换机肯定不止一台那两台交换机之间的链路该怎么承载多个 VLAN如果直接把两台交换机的普通口连起来默认这根线只属于 VLAN 1VLAN 10 和 VLAN 20 的帧在二层根本过不去。举个例子SW1 上的 PC-A 属于 VLAN 10SW2 上的 PC-B 属于 VLAN 10。中间只拉一根线两边端口都保持 Access VLAN 10。照理说 PC-A 发的广播应该通过 SW1 和 SW2 之间的链路到达 PC-B但这条链路实际处于 VLAN 1VLAN 10 的帧不允许从 VLAN 1 的端口出去于是二层就断了。这里面的深层原因是Access 口只能属于一个 VLAN一条普通链路天然无法同时承载多个 VLAN 的数据。这时候 Trunk 就派上用场了。Trunk 端口不属于某一个 VLAN而是同时属于多个 VLAN。它像一条大的运输管道里面运载的所有帧都贴着 VLAN 标签交换机之间看到标签就知道往哪送。这也是为什么 Trunk 连接一定要用支持 802.1Q 的链路否则标签无法传递。3.2 Trunk 配置的几个关键动作配置 Trunk 有三件必须做的事第一把端口模式改成 Trunk第二声明这条链路上允许哪些 VLAN 通过一般写成 allow-pass vlan 10 20第三检查两端配置是否一致包括允许列表和 Native VLAN。三步缺一不可少了任何一步表面上看着配置了 Trunk实际可能还是半通不通。需要注意不同厂商对 Trunk 默认行为的定义不一样有的默认允许所有 VLAN有的只放行 VLAN 1。无论哪种生产环境里我都习惯明确写出允许列表一方面是为了安全另一方面也是方便后面排查问题——看到配置的第一眼就知道这条链路上有哪几个 VLAN 在跑。这是个很实用的习惯尤其设备一多以后配置可读性非常重要。Native VLAN 是 Trunk 里一个最容易忽略的点。默认情况下 Native VLAN 是 VLAN 1Trunk 链路在承载 Native VLAN 的帧时不打标签。如果交换机两端 Native VLAN 配置不一致就会出比较诡异的故障后面排错部分我会专门展开。3.3 一个小实验让两台交换机上的相同 VLAN 先捅破窗户纸我在模拟器里常做的验证方式是这样的SW1 和 SW2 之间用一条 Trunk 连接PC-A 接 SW1 的 Access VLAN 10PC-B 接 SW2 的 Access VLAN 10。两边配好后PC 上 ping 一下能通就说明 Trunk 正常工作。如果想要更深一点的验证可以在交换机上查看 VLAN 信息。如果抓包工具支持直接在 Trunk 链路上抓包能看到 802.1Q 标签里 VLAN ID 等于 10。这种“眼见为实”的方式对教学特别有用比背一百遍概念都管用。至少我在教她的时候抓过一次包之后她再也不会问“Trunk 到底有什么用”这种问题了。到这里同 VLAN 跨交换机的二层通路已经解决了。但不同 VLAN 之间的通信还没解决下一节就要让路由器出场。4. 单臂路由一个路由器接口为什么能管住所有 VLAN4.1 为什么 VLAN 间通信必须走三层VLAN 是二层隔离的它保证 VLAN 10 的广播不会泄漏到 VLAN 20。但电脑之间通信时第一步是判断目标 IP 是否和自己在一个网段。PC-A 的地址是 192.168.10.2它要给 PC-B 的 192.168.20.2 发包一算网段不同就把包扔给默认网关。关键就在这里网关必须配置在路由器或三层交换机上而不是终端上。终端只知道自己把包交给了网关至于网关怎么把包送到另一个 VLAN终端完全不关心。所以 VLAN 间通信的本质是把数据先送到网关再由网关做三层路由决策转发到目标 VLAN 对应的接口。这里顺便提一句很多人学到这里会把“路由”和“NAT”搞混。路由是改变帧的目标 MAC、保留源 IP 和目标 IP 的转发过程而 NAT 是修改 IP 地址的动作。单臂路由做的是前者它不会把 192.168.10.2 改成别的地址。4.2 方案选择物理接口还是子接口最原始的做法是路由器给每个 VLAN 配一个物理口VLAN 10 接一个口VLAN 20 接一个口VLAN 再多就把路由器插成刺猬。端口浪费、成本高、扩展性差而且很多路由器根本没有那么多物理接口这种方案很快就走到头了。单臂路由的思路完全相反路由器只用一个物理接口连接交换机 Trunk 口然后把物理接口拆成多个子接口每个子接口绑定一个 VLAN ID并配置对应 VLAN 的网关 IP。数据帧到达物理接口后路由器根据 802.1Q 标签把它交给对应的子接口处理。因为所有子接口共享同一条物理链路从拓扑图上看就像一条手臂伸进交换机所以叫“单臂路由”。4.3 单臂路由转发过程拆解一趟完整的旅行PC-A ping PC-B 的完整路径是这样的PC-A 发现目标不在本网段把 ICMP 请求发给网关 192.168.10.1交换机从 Access 口收到无标签帧打上 VLAN 10 标签沿着 Trunk 发给路由器路由器物理接口收下带标签帧后把 VLAN 10 的帧交给子接口 G0/0.10子接口查看目的 IP 192.168.20.2查路由表发现下一跳需要通过 G0/0.20 转发于是路由器给帧重新打上 VLAN 20 标签从同一个物理口发出去交换机收到 VLAN 20 的帧按照二层的 MAC 表把它送到 PC-B 所在 Access 口去掉标签PC-B 收到请求回包按同样路径反着走一遍。这里的关键是路由器的物理接口同时收和发多个 VLAN 的帧靠的是 VLAN 标签来分流。如果没有子接口路由器只看到一个物理口根本分不清哪个包属于哪个 VLAN也就没办法做多 VLAN 间路由。单臂路由的瓶颈也在这里所有 VLAN 之间的流量都挤在同一条物理链路上上行和下行共享带宽一旦跨 VLAN 流量大了就容易拥塞而且路由器是单点一旦物理链路或路由器出问题所有 VLAN 间通信都会中断。在真实项目里单臂路由一般用在小型网络或者实验教学里规模大一点就会换成三层交换机。5. “抄作业”级别的配置实例一台交换机加一台路由器5.1 实验拓扑和 IP 规划这里给一个可以直接照做的实验规划交换机 SW1 有两个 Access 口接 PC一个 Trunk 口接路由器 R1。PC-A 在 VLAN 10IP 192.168.10.2/24网关 192.168.10.1PC-B 在 VLAN 20IP 192.168.20.2/24网关 192.168.20.1。交换机连接路由器的口改为 Trunk 并放行 VLAN 10 和 20路由器物理接口启动两个子接口分别对应两个网关。我刻意不指定模拟器和设备品牌因为这套配置逻辑在各家主流设备上差异很小最多就是命令关键字略有不同。下面给的是最常见的命令行风格你在模拟器里照敲基本一致遇到命令不识别再查一下对应厂商的语法就行。5.2 交换机上的配置命令vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 interface GigabitEthernet0/0/2 port link-type access port default vlan 20 interface GigabitEthernet0/0/3 port link-type trunk port trunk allow-pass vlan 10 20这里有几个点值得注意端口 1 和端口 2 必须明确指定 VLAN不要赌默认值Trunk 口明确列出允许的 VLAN而不是让它默认放行所有如果有 DTP 之类的协商功能建议直接关闭手工指定模式因为协商机制在不同厂商设备互联时经常会出问题。配置完可以在交换机上查看display vlan display interface GigabitEthernet0/0/3第一行看 VLAN 创建情况和端口归属第二行看 Trunk 口的链路状态和允许列表。如果端口显示 DOWN优先检查网线和两端接口是否都开了。5.3 路由器上的子接口配置interface GigabitEthernet0/0/0 undo shutdown interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.1 255.255.255.0 arp broadcast enable interface GigabitEthernet0/0/0.20 dot1q termination vid 20 ip address 192.168.20.1 255.255.255.0 arp broadcast enable三条命令背后的意思是第一物理接口必须处于开启状态否则子接口都白搭第二dot1q termination vid 表示这个子接口只处理 VLAN 10 的带标签帧第三arp broadcast enable 在某些平台上必须开启否则子接口之间无法完成 ARP 解析。很多人配完发现 ping 不通就是漏了最后这一行。子接口的 IP 就是对应 VLAN 里所有 PC 的网关地址。PC-A 的网关填 192.168.10.1PC-B 的网关填 192.168.20.1这里填错哪怕一位数PC 都把包扔给了一个不存在的设备自然会通话失败。5.4 验证链路从 ping 到抓包配置完成后的验证顺序我一般是这样先在路由器上 ping 两个子接口的直连地址确认子接口本身配置没问题再在 PC-A 上 ping 192.168.20.2能通说明整条链路和路由逻辑都没问题如果不通再从交换机上逐段确认端口 VLAN、Trunk 状态、子接口状态。如果在交换机 Trunk 口和路由器之间挂抓包工具你会看到来回的数据帧都带着 802.1Q 标签VLAN ID 在 10 和 20 之间切换。这个画面一旦见过一次概念就算真正立住了。教学的时候这一步特别值比讲十遍原理都管用。6. 排错心法教别人时最容易被问住的几个问题6.1 从链路状态查起端口没起来一切白搭遇到“配置了但就是不通”第一步永远是查物理层和链路状态。在模拟器和真实设备上都一样先看端口是不是 UP再看端口类型、所属 VLAN、Trunk 允许列表是不是和设计一致。很多时候不是配置写错而是两台设备的接口根本没协商成功或者错把连接 PC 的口配成了 Trunk这些低级错误最浪费时间。排错一定要有顺序不要东一榔头西一棒子。我的习惯是先看端口状态再看端口类型和 VLAN 归属然后看 Trunk 放行列表最后才看 IP 和路由。物理层没通之前IP 配得再对也没用。6.2 VLAN 不匹配与 Trunk 黑洞第二个高发问题是 VLAN ID 对不上。PC-A 在交换机上实际属于 VLAN 10但配置笔记里记的却是 VLAN 20或者 Trunk 允许列表漏写了某个 VLAN。表现是什么样的同 VLAN 的主机能通跨 VLAN 走到交换机 Trunk 口附近就断但又找不到明确的报错。这种“二层的隐形黑洞”比端口 DOWN 更让人头疼因为它不会在接口状态上体现出来。排查手段也没什么捷径沿着转发路径逐个端口看 VLAN 归属和 Trunk 放行列表用“从终端到交换机、从交换机到路由器”的顺序逐段缩小范围。别急着看路由表二层不对三层再对也白搭。6.3 Native VLAN 不一致一个很隐蔽的坑Trunk 上的 Native VLAN 帧不打标签传输所以交换机收到一个没有标签的帧时会默认认为它属于端口 PVID 所在的 VLAN。如果两端的 Native VLAN 配置不同就可能出现很奇怪的互通现象某一个 VLAN 能通、另一个 VLAN 时通时断或者抓包里明明没有标签却一直能通。遇到这种问题我的办法是把两端 Native VLAN 统一设成 VLAN 1或者干脆明确指定同一个 VLAN。不要小看这个配置很多“玄学”故障最后都查出是 Native VLAN 不一致。这个知识点考试不一定考但排错时特别实用。6.4 路由器侧最容易犯的三个错子接口的坑集中在三个地方物理接口没启用dot1q 封装 VLAN 和子接口 IP 对应错了忘了开 ARP 广播。尤其是第三点很多平台的子接口默认不处理广播PC 发一次 ARP 请求子接口收不到网关永远响应不了表现为 PC 一直 ping 不通网关但子接口地址本身能 ping 通。检查时用查看路由表的命令看看有没有到目标网段的路由再看 ARP 表里子接口是否解析到了 PC 的 MAC 地址。如果 ARP 表里没有 PC 的条目问题多半出在 arp broadcast enable 没开或者封装 VLAN 配错了。这三个坑按出现频率排几乎能覆盖九成以上的单臂路由故障。7. 这不是终点规模大了以后单臂路由怎么“进化”7.1 单臂路由的短板带宽和可靠性前面提到单臂路由把所有跨 VLAN 流量都放在一条物理链路上这在小型实验环境里完全没问题但在真实办公楼里就有点不够看了。假设财务部经常要跨 VLAN 访问服务器大量流量挤在同一条线上上行和下行还会互相抢带宽一次链路抖动全网 VLAN 间通信都受影响。单臂路由在拓扑上虽然简单性能和可靠性都比较脆弱。还有一个容易被忽略的点单臂路由的转发性能受路由器 CPU 和处理能力限制。如果路由器还要做 NAT、防火墙过滤、流量管理等CPU 占用一高跨 VLAN 延迟就会明显变大。所以这个方案适合“入门”和“小规模”不适合“核心”。7.2 三层交换机把路由搬进交换机内部更常用的替代方案是三层交换机。它本质上还是一台交换机但内部集成了路由功能。做法是给每个 VLAN 创建一个 SVI交换机虚拟接口比如 interface Vlanif 10 和 interface Vlanif 20分别配置 IP 作为网关。跨 VLAN 的流量不再绕到外部路由器而是在交换机内部直接路由转发速度比路由器快得多部署上也少一条外部链路。配置逻辑大概是这样的interface Vlanif10 ip address 192.168.10.1 255.255.255.0 interface Vlanif20 ip address 192.168.20.1 255.255.255.0只要各端口 VLAN 归属正确三层交换机默认就会在 SVI 之间路由。相比单臂路由的“子接口 标签”SVI 更像给每个 VLAN 配了一个内置网关每个 VLAN 一份配置流量在交换机内部高速完成不用再挤一条外部单臂链路。7.3 给还在学习阶段的你一个建议我自己的习惯是纯学习阶段一定先在模拟器里把单臂路由完整敲一遍因为它能逼你把 VLAN 标签、Trunk、ARP、路由表这几件事串起来。等你能在脑子里完整画出一趟数据包的旅行路线再去学三层交换机的 SVI会轻松非常多。网络这东西概念之间是层层叠叠的。单臂路由是整个 VLAN 间路由链条里最容易理解、也最适合入门入脑的一环我把这套实验小学做一遍之后再去看三层交换的配置几乎是一路畅通。如果你现在正卡在“不同 VLAN 怎么互通”这个问题上别急着背命令先照着前面的拓扑敲一遍再抓一次包看看标签变化很多疑问都会自动解开。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑