ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

VLAN与Trunk技术详解:从设计、配置到排障实战

VLAN与Trunk技术详解:从设计、配置到排障实战 VLAN与Trunk技术这个词很多刚接触网络的朋友都会觉得有点虚。说白了VLAN就是在一台交换机上把一个大的二层广播域切成多个小房间Trunk就是在这台交换机和另一台交换机之间拉一根管子把这几个小房间的流量都搬到对面去。这篇文章不打算抄教材我想按实际项目里“从设计到落地再到排障”的顺序把VLAN和Trunk掰开揉碎讲一遍适合刚入门想搞懂二层交换原理的人也适合那些配过交换机但遇到VLAN不通就头大的运维同学。1. VLAN与Trunk的整体设计思路1.1 先搞明白VLAN到底在解决什么问题VLANVirtual Local Area Network虚拟局域网这个词翻译成“虚拟局域网”其实挺容易让人误解好像跟“虚拟化”有什么关系。实际上它解决的是一个很实在的痛点二层广播域太大。在一个没有任何隔离的交换网络里所有接在交换机上的设备都在同一个广播域。但凡有一台设备发出ARP广播去找网关整个广播域的设备都要收一遍。如果业务网段和数据网段混在一起广播报文满天飞网络稍大一点就开始卡顿。更麻烦的是二层网络里如果出现了环路广播帧会在交换机之间反复转发直接打满交换机CPU整个网络瘫痪。我见过不止一次因为设备接错口导致广播风暴的情况那种全员断网的酸爽经历过的人都懂。VLAN的做法就是在一台交换机上把端口划分到不同的广播域里。从主机的角度看它感知不到VLAN的存在它只知道自己的网卡连了一根网线但交换机会根据端口所属的VLAN来决定帧往哪里转发。VLAN 10里的广播只会到达VLAN 10的端口不会干扰VLAN 20。不同VLAN之间默认是二层隔离的。这个“逻辑隔离”的思路非常关键。它不需要额外的物理设备不用重新拉线改一下交换机配置就能把原来的一个大网切成多个小房间。每个小房间就是一个小广播域广播被限制在房间内部性能和安全都上来了。这也是VLAN能成为所有交换机基本功的原因。1.2 Trunk是给一条物理链路“开多条通道”VLAN解决了隔离问题但新的问题马上出现公司里有十几台交换机不同交换机上的设备如果属于同一个VLAN它们之间怎么通信举个例子你的工位在二楼接入交换机是A同事的工位在三楼接入交换机是B。你们两个都属于研发部都在VLAN 10。A和B之间只有一根网线连着这根网线上要跑VLAN 10的流量可能还要同时跑财务的VLAN 20和管理员VLAN 99的流量。一根线怎么区分这些不同的流量答案就是给每个帧“打标签”。Trunk端口在发送某个VLAN的帧时会在以太网帧头里插入一个4字节的标签里面用12个比特记录这个帧属于哪个VLAN。接收端交换机一看标签里的VLAN号就知道该把这个帧丢到哪个广播域去处理。所以Trunk的定义可以理解为一条可以承载多个VLAN流量、并且通过标签来区分帧所属VLAN的链路。它通常用于交换机与交换机之间或者交换机与路由器之间。相对于一个端口只属于一个VLAN的Access口Trunk口更像是“多条虚拟线路的集合体”。还记得我第一次配Trunk的时候就简单把它当成“把链路两端的口都设成Trunk”就完事了。后来才发现完全不是这样Trunk口的放行列表、native VLAN、标签处理规则哪个没想清楚都会出问题。这部分后面细说。1.3 为什么说VLAN和Trunk必须一起设计很多人学这两个概念是分开学的觉得一个是划分逻辑隔离域一个是链路封装协议各学各的。但在实际项目里这两个东西从来都是绑定在一起设计的。你划分VLAN的边界在哪Trunk链路口就要把哪些VLAN放行过去。VLAN划分决定了部门之间、网段之间的访问控制粒度Trunk决定了这些隔离后的流量能不能跨设备自由流动。设计一个网络时VLAN的规划表要跟物理拓扑图放在一起看哪个口属于哪个VLAN哪条链路要Trunk哪些VLAN全得揉在一起考虑。举个例子某公司的接入层只有两台交换机每台交换机下面接了几十个终端。如果只是把研发放VLAN 10、财务放VLAN 20但中间Trunk上没有放行业务那两栋楼里的研发同事之间根本ping不通。反过来如果Trunk把全部VLAN都放行了本来想隔离的两个部门又会互相可见。所以要真正掌控网络就得把VLAN规划和Trunk设计当成一个整体来做这也是本文后面实操部分想重点讲清楚的事情。2. 核心细节解析与实操要点2.1 VLAN ID的分配与规划VLAN 1要慎用VLAN ID一共12个比特范围从0到4095但真正能用的只有1到4094。其中VLAN 0和4095是保留的VLAN 1002到1005是给令牌环、FDDI这些老古董用的。如果手动创建VLAN时用了一个超出范围的ID交换机会直接报错这一点新手要注意。日常规划上最常见也最稳妥的做法是VLAN 1留给管理用或者干脆不用业务VLAN从10、20、30开始按部门或用途递增。为什么不要把所有东西都堆在VLAN 1很现实的原因VLAN 1是交换机的默认VLAN所有端口默认都在VLAN 1里。如果不加区分地使用等于默认把所有设备放进了同一个广播域跟没做VLAN没区别。另外不少默认配置和协议报文都跟VLAN 1有关把业务流量放进去容易出幺蛾子。我自己习惯的规划是这样VLAN 10放办公终端VLAN 20放服务器VLAN 99放设备管理。每个VLAN对应一个网段网关在三层交换机上。规划前先把未来几年会有多少台设备、会不会扩容想清楚留出足够的VLAN编号空间别到时候编号用满了再改配置那绝对是灾难。2.2 Access口和Trunk口的转发逻辑用一张表说清楚很多人分不清Access口和Trunk口的区别其实它们的区别不在物理形态而在对“带标签帧”和“不带标签帧”的处理策略上。Access口属于某一个VLAN。它收到不带标签的帧会打上自己所属VLAN的标签收到带标签的帧如果标签就是这个VLAN就接收否则直接丢弃。它往外发包时会把标签剥掉以普通以太网帧形式发给终端。所以Access口连接的是那类“不懂VLAN标签”的设备电脑、打印机、IP电话等。Trunk口则不同。它默认承载多个VLAN发送帧时可以带标签也可以不带标签这个取决于是不是native VLAN。它收到带标签的帧只有在放行列表里才接收收到不带标签的帧会按native VLAN来收。所谓native VLAN就是这条Trunk链路上不用打标签的那个VLAN两端必须保持一致否则就会出问题。我把两者的区别整理成了一张表方便对照理解端口类型收到不带标签帧收到带标签帧发送帧时的标签典型用途Access打上PVID对应的VLAN标签并接收标签等于PVID则接收否则丢弃剥离标签后发送连接终端设备Trunk按native VLAN默认VLAN 1接收放行列表中存在则接收否则丢弃非native VLAN打标签native VLAN不打标签交换机之间互联这里有个特别容易踩的坑Trunk的native VLAN如果两端不一致两边设备之间的标签处理逻辑就会错乱轻则某一个VLAN通信异常重则整个Trunk链路都不稳定。这个在后面的排障部分我会结合案例细讲。2.3 802.1Q标签并不是“改了帧头”而是“插了一段说明”既然Trunk要用标签来区分VLAN那标签到底加在帧的哪个位置、格式是什么值得花几分钟讲清楚。普通以太网帧的结构是目的MAC6字节、源MAC6字节、类型/长度字段2字节、载荷。802.1Q在这个基础上往类型/长度字段前面插入了4个字节的标签。插入的4字节包括两段内容前2个字节是TPIDTag Protocol Identifier固定为0x8100表示这是802.1Q标签后2个字节是TCITag Control Information里面又拆成几个部分PCP占3个比特用于优先级0到7DEI占1个比特VID占12个比特用于存VLAN ID。为什么要在帧里插入这么一段因为交换机在Trunk口上转发帧的时候本质上是看不懂业务数据内容的它只关心这个帧属于哪个VLAN所以把VLAN号写成一个数字塞在显眼的位置转发时可以单独提取。有个细节平时经常被忽略以太网帧的最大长度是1518字节加了4字节标签后就变成了1522字节。很多老旧的抓包工具或者网卡如果不支持接收大帧抓到的带标签帧就会被认为是异常帧。另外交换机内部转发时这个4字节标签始终存在发到Access口外的时候才剥掉。也就是说标签是只在网络设备之间传递的“内部说明”终端是看不见的。这一点对理解抓包结果特别有用。3. 实操过程与核心环节实现3.1 一个能跑通的小型组网示例空谈概念太虚咱们直接以一个常见的小型园区网络为例把VLAN和Trunk从头到尾配一遍。假设现在有两台接入交换机Switch A和Switch B接到一台核心交换机。A下面接了研发部的几台电脑B下面接了财务部的几台电脑。我打算把研发部划到VLAN 10网段192.168.10.0/24财务部划到VLAN 20网段192.168.20.0/24设备管理放VLAN 99网段192.168.99.0/24。A和B分别通过一条Trunk链路接到核心交换机上核心交换机上再做VLAN间路由让研发和财务可以按策略互相访问。位置设备端口所属VLAN说明接入层ASwitch AG0/0/1-G0/0/10VLAN 10研发终端接入层ASwitch AG0/0/24Trunk上联核心接入层BSwitch BG0/0/1-G0/0/8VLAN 20财务终端接入层BSwitch BG0/0/24Trunk上联核心核心层Core Switch对应接口Trunk/VLAN间路由三层网关这是一个非常典型的“二层接入、三层汇聚”结构。接入交换机只做VLAN划分和Trunk透传核心交换机既做二层中继又承担三层网关职责。3.2 从零开始的配置步骤我以主流企业级交换机为例讲讲关键配置思路。不同厂商的命令风格略有不同但原理完全一致。第一步在接入交换机上创建VLAN。假设我们登录的是Switch A。vlan batch 10 20 99这条命令一次性创建了三个VLAN。实际上如果只有研发终端接在A上A上只需要VLAN 10和99但为了方便后续扩展先统一创建也没问题。第二步把连接研发终端的端口配成Access口并划入VLAN 10。interface GigabitEthernet 0/0/1 port link-type access port default vlan 10这里有个习惯要说一下大多数交换机端口默认是Access口默认属于VLAN 1。我这边习惯把链路类型显式写出来避免因为默认配置不同造成后续排查困难。每个终端端口都这么配只是VLAN号不同而已。第三步配置上联口为Trunk口。interface GigabitEthernet 0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 99这条命令的关键在于“允许通过的VLAN列表”。默认情况下Trunk口只放行VLAN 1其他VLAN即使创建了也不会通过。所以如果忘了执行allow-pass业务流量是传不过去的。我见过不少新手配Trunk时只改了link-type忘了加放行列表结果两边的VLAN 10完全不通配置文件刷了好几遍都找不到原因。Switch B的配置思路完全一样只是终端口划到VLAN 20。第四步配置核心交换机。核心交换机与接入交换机相连的口也要设成Trunk放行同样的VLAN。然后给VLAN接口配上IP地址启用三层网关功能。interface Vlanif10 ip address 192.168.10.254 255.255.255.0interface Vlanif20 ip address 192.168.20.254 255.255.255.0到这里VLAN 10和VLAN 20的设备通过网关就能跨VLAN通信了。如果用的是外置路由器而不是三层交换机那就得在路由器上配子接口也就是常说的单臂路由原理一样只是把网关挪到了路由器上。3.3 配置完成后的验证动作别偷懒配置完不是结束验证才是重头戏。我每次配置完都会按顺序做几个检查。第一步查看VLAN信息确认端口和VLAN的对应关系正确。display vlan这个命令能看到所有VLAN的ID、名称、端口成员。如果某个端口没有出现在预期VLAN下说明端口没划进去。第二步查看Trunk口的放行状态。display interface GigabitEthernet 0/0/24重点看端口类型是否真的是Trunk放行VLAN列表是否包含所有业务VLAN以及native VLAN是几。第三步用两台终端的IP做连通性测试。从一台接在VLAN 10的电脑ping另一台VLAN 10的电脑通的话说明二层VLAN隔离和转发正常再从研发的电脑ping财务的网关192.168.20.254通的话说明三层路由也起来了。抓包验证的时候在核心交换机Trunk口上抓能看到带802.1Q标签的帧里面的VID字段会明确标出10或20。能看到这个标签说明标签打剥逻辑是正常的。一个偷懒小技巧如果身边没有两台电脑可以直接用交换机上的两个VLAN接口互相ping来验证三层转发能通就说明VLAN和路由配置基本没问题。4. 常见问题与排查技巧实录4.1 “VLAN不通”的排查顺序VLAN和Trunk相关问题在我接触的网络故障里出现频率相当高。我把最常见的几种原因整理了一下。现象可能原因排查方向同一交换机同VLAN设备ping不通端口没划入VLAN终端IP网段不对display vlan 查看端口归属跨交换机同VLAN ping不通Trunk没有放行该VLANnative VLAN不一致查看Trunk放行列表和native配置带标签的帧能通但终端上不了网Access口发出去了带标签帧终端不支持检查端口类型确认Access口会剥标签某些VLAN时通时不通链路两端Trunk放行列表不一致或物理链路不稳定对比两端配置检查端口状态三层VLAN间访问失败没有配置VLAN网关或路由策略不允许检查Vlanif接口和路由表排障的思路我是这样坚持的先通物理再查二层最后看三层。物理层面先看端口Up/Down、光模块收发光是否正常二层看VLAN划分和Trunk放行列表三层再检查网关、路由和防火墙策略。如果一上来就怀疑三层往往浪费时间。4.2 最容易忽略的三个“隐藏坑”排障排得多了有些坑是配置里根本看不出来的我想单独拎出来讲。第一个是native VLAN不一致。Trunk链路上native VLAN对应的流量是不打标签的。如果A交换机把native VLAN配成了99B交换机还默认是1那么A发出来的管理流量在B那里会被当成VLAN 1的流量B发过来的无标签帧在A那里又会被归到VLAN 99。两边的认知完全不同出问题的时候特别诡异。现在很多厂商已经允许修改native VLAN我建议要么统一保持默认VLAN 1要么在规划阶段就把所有Trunk两端的native VLAN明确写成同一个值写进文档里。第二个是Trunk放行列表被漏配。刚才实操部分已经提过Trunk默认只放行VLAN 1。所以给Trunk添加某个VLAN后一定要检查是否放行。有一种很隐蔽的情况配置人员用放行全部VLAN的方式来图省事结果所有VLAN都透传过去了跟当初做的隔离规划完全相反。这种问题在审计网络策略时才会被发现。第三个是接入交换机的VLAN范围限制。有些低端接入交换机默认只有部分VLAN ID可以通过Trunk超过范围的VLAN需要额外开启扩展功能。如果你发现配置都对但某个VLAN就是不通查一下交换机型号和VLAN范围限制往往答案就在这里。4.3 让排障更高效的两个习惯最后分享两个让日常维护轻松不少的好习惯。一是给端口做描述。不管是Access口还是Trunk口都写上连接对端和VLAN用途比如“Trunk-to-Core-Allow-10-20-99”。这样排障时不用翻文档一看配置就知道这根线是干嘛的省下大量时间。团队协作时尤其重要别人接手你的配置也不会一脸懵。二是定期备份配置并整理文档。VLAN架构这东西时间一长就很难有人说得清当年为什么这么划。我见过一个项目某公司核心交换机上几十个VLAN没人知道哪些是废弃的哪些还在用。后来我们按端口和VLAN用途整理了一张总表把Trunk放行列表和native VLAN也标上去后面无论扩容还是排障有了这份地图都从容得多。从个人经验来说VLAN和Trunk看起来是基础中的基础但恰恰是这些基础能力决定了你在一个大型网络里能不能稳得住。把这些细节想透了再看更复杂的VXLAN这些技术会发现底层逻辑是相通的。最后再说一个小技巧配Trunk之前先在纸上把两端的VLAN规划、native VLAN、放行列表画出来再动手敲命令出错率会直线下降。希望对你有用。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表