ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

交换机Tag与Untag原理详解:从数据帧到华为端口配置与排障

交换机Tag与Untag原理详解:从数据帧到华为端口配置与排障 1. 为什么要反复聊tag和untag在交换机运维这条路上tag和untag几乎是每个人都会卡住一次的坎。我见过不少同事把Access、Trunk、Hybrid的配置背得滚瓜烂熟一到排障还是懵尤其是两台交换机对接、VLAN死活不通的时候翻来覆去查配置最后发现就是tag和untag的理解出了偏差。这个知识点之所以容易混是因为它涉及的是数据帧在交换机端口上的“进门”和“出门”两个方向的行为而很多教程只讲结论不讲过程比如“Access口出去剥掉tag”“Trunk口保留tag”之类但真正在设备上抓包看的时候你会发现实际情况远不止这么简单。这篇文章我不想再重复课本上那些定义而是从运维实操的角度把端口对tag和untag的处理逻辑拆开揉碎。核心围绕几个问题tag到底是什么、untag到底意味着什么、数据帧进出端口时发生了什么、华为交换机上Access/Trunk/Hybrid三种端口分别怎么处理、以及实际排障中怎么判断到底是哪一侧的tag出了问题。无论你是刚接触交换机的小白还是被VLAN互通问题折磨过的老手这篇内容都值得你耐心看完。尤其是那些“明明配置看着没问题但就是不通信”的场景看完你应该能自己找到答案。2. Tag和Untag的本质数据帧上的一张贴纸2.1 为什么需要tag先想一个最基础的问题交换机的端口怎么知道一个数据帧属于哪个VLAN在交换机内部数据帧从一个端口进来交换机要查MAC地址表决定从哪个端口出去但同一台交换机上可能划分了十几个VLAN如果一个帧只是“裸奔”进来交换机根本不知道该把它归到哪个广播域里。所以交换机必须给这个帧打上一个标记这个标记就是tag。tag的全称是VLAN Tag标准定义在IEEE 802.1Q里。一个带tag的以太网帧会在源MAC地址和长度/类型字段之间多出4个字节这4个字节里最关键的是最后12个bit也就是VIDVLAN ID范围是0到4095。这样一来交换机看到VID为10的帧就知道它属于VLAN 10处理的时候只会在VLAN 10的端口范围内转发。用生活里的类比来说tag就像快递包裹上的面单。包裹从仓库发出来面单上写着收件地址快递分拣中心看到面单就能知道这个包裹该往哪个片区送。如果包裹没有面单分拣中心就得靠其他方式去猜效率低而且容易出错。交换机也是一样带tag的帧能被快速准确地识别归属不带tag的帧则需要交换机根据接收端口的配置去“补一张面单”。2.2 untag到底是什么untag的理解很多人是反的。有人觉得untag就是“不带标签”但真正的问题在于一个不带tag的帧进入了交换机以后交换机不会让它一直“裸奔”而是会强制给它打上一个tag。这个打上去的tag用哪个VLAN ID取决于接收端口的PVID。所以更准确地说untag是一个“端口收到的帧的初始状态”它不等于“没有归属”而是“等待交换机给他分配归属”。一旦帧进入了交换机它内部始终是以带tag的形式存在的。理解了这一点后面看Trunk和Hybrid的行为会轻松很多。还有个口误也要纠正很多人把untag和“剥离tag”混为一谈。剥离tag是一个动作发生在帧从端口出去的时候untag是一个状态描述的是帧本身的形态。两者有关联但不是一个层面的事。2.3 PVID端口的默认归属PVIDPort VLAN ID是理解tag和untag绕不开的概念。简单说PVID就是端口收到untag帧时给它打的默认VLAN ID。华为交换机上Access口的PVID就是它所在的那个VLAN比如端口划到VLAN 10PVID就是10。Trunk口的PVID默认是VLAN 1也可以手动改成其他值。Hybrid口的PVID同样默认是VLAN 1但可以单独设置。关键来了PVID不仅仅影响“入方向打标”还影响“出方向是否剥标”。一个端口在发送数据帧时如果帧的VID等于本端口的PVID那么默认情况下端口会把tag剥掉以untag形式发送如果VID不等于PVID则保持tag发送。这条规则是理解所有端口行为的钥匙。3. Access、Trunk、Hybrid三种端口的tag处理逻辑3.1 Access端口一根线接一个VLANAccess口是最好理解的它通常用来连接终端设备比如PC、打印机、IP电话。一个Access口只能属于一个VLAN数据帧进出这个口都遵循最简单的规则。入方向如果收到的是untag帧交换机给它打上PVID的tag也就是这个Access口所属的VLAN如果收到的是tag帧理论上Access口不会接收与自己PVID不同的tag帧收到就直接丢弃。出方向交换机要把属于这个VLAN的帧从Access口发出去之前会把tag剥掉以untag形式发给终端。因为PC网卡根本不认识802.1Q的tag你给它一个带tag的帧它反而会当成异常帧丢弃。所以Access口的行为可以用一句话概括进去打标出来剥标。这也是很多教程里“Access口出去是untag”的来源。3.2 Trunk端口一条链路跑多个VLANTrunk口用于交换机与交换机之间、交换机与路由器之间的链路。它的核心价值是允许多个VLAN的帧通过同一条物理链路传输。入方向Trunk口收到untag帧同样打上PVID对应的tag收到tag帧如果该VLAN在允许列表里就正常接收否则丢弃。出方向这是最容易混淆的地方。Trunk口发帧时分两种情况如果帧的VID等于本端口的PVID则以untag形式发出如果帧的VID不等于PVID则带着tag发出。也就是说Trunk口并不是所有帧都带tag出去它只对PVID对应的那个VLAN剥tag。华为交换机上Trunk口的PVID默认是VLAN 1这就是为什么很多场景里VLAN 1的流量在Trunk链路上是untag的而其他VLAN的流量都是带tag的。理解这一点的实际意义非常大。比如你排查两个交换机之间的VLAN 10不通两台交换机Trunk口都允许了VLAN 10看起来配置没问题但你把PVID都设成了10结果数据帧在链路上以untag形式传输而另一台交换机的Trunk口PVID是1收到untag帧后给它打了VLAN 1的tag帧就进错VLAN了。3.3 Hybrid端口规则更灵活的“混合体”Hybrid是华为私有的端口类型它比Trunk更灵活核心区别在于Trunk口只能对PVID对应的VLAN剥tag而Hybrid口可以指定任意VLAN在出方向剥tag。举个例子一个Hybrid口PVID是1允许VLAN 1、10、20通过出方向规则设为VLAN 10 untag、VLAN 20 tag。这个口发VLAN 10的帧时剥tag发VLAN 20的帧时保留tag而Trunk口做不到这种“选择性剥离”。Hybrid口在实际组网里特别有用。比如出口接一台不支持VLAN标签的傻瓜交换机你可以把上行口的VLAN 10设置为untag这样傻瓜交换机下面的终端不需要任何配置就能进VLAN 10。又比如一台接入交换机同时连接一个需要tag的上级设备和一些不需要tag的终端Hybrid口就能一个口搞定两种需求。3.4 三种端口行为对比为了让大家一目了然我把华为交换机上三种端口对tag和untag的处理总结成一张表端口类型入方向收到untag帧出方向默认行为特点与适用场景Access打上PVID的tag剥掉所有tag一个端口一个VLAN接终端Trunk打上PVID的tagPVID对应VLAN剥tag其他保留tag一条链路跑多个VLAN交换机互联Hybrid打上PVID的tag可自定义任意VLAN剥tag或保留tag灵活性最高混合场景需要强调一点不管什么端口类型如果一个带tag的帧进入端口后VID不在允许列表里帧都会被丢弃。这不是tag和untag的范畴而是端口VLAN过滤的规则但在实际排障中经常和tag问题搅在一起所以要留意。4. 帧的完整旅程从入口到出口的tag变化4.1 单台交换机内的流转过程我画一个典型的场景PC-A连接交换机的Access口属于VLAN 10PC-B连接另一台交换机的Access口也属于VLAN 10。PC-A发一个无tag的帧给PC-B。帧到达交换机端口1Access口时交换机看到这是一个untag帧立刻给它打上VLAN 10的tag这时帧在交换机内部是带tag的状态。交换机查MAC地址表发现目标MAC对应的端口是端口2Access口也在VLAN 10于是把帧从端口2发送出去。发送前发现端口2的PVID是10等于帧的VID于是把tag剥掉以untag形式发给PC-B。整个过程里tag只在交换机内部存在对终端设备完全不可见。这就是Access口的经典行为。4.2 跨交换机时tag的传输如果PC-A接在交换机A上PC-B接在交换机B上两台交换机之间通过Trunk口互联。PC-A发帧给PC-B帧进入交换机A的Access口后被打了VLAN 10的tag交换机A查MAC表发现目标从Trunk口出去于是带着tag发送。发出之前检查Trunk口的PVID默认是1不等于10所以保留tag直接发送。交换机B的Trunk口收到这个带VLAN 10 tag的帧发现VLAN 10在允许列表里正常接收。交换机B查MAC表决定从某个Access口发送发送前发现该Access口的PVID是10等于帧的VID剥掉tag发出给PC-B。如果这个过程中交换机B的Trunk口PVID被改成了10情况就变了。交换机A发的VLAN 10 tag帧到达交换机B的Trunk口后交换机B出方向对这个帧检查PVID如果要从某个Access口出去Access口剥tag没问题但如果在交换机B内部转发时这个帧被当作PVID对应的“特殊帧”某些处理逻辑会受影响。最典型的问题是交换机B的Trunk口自己产生或转发的untag帧会被打上VLAN 10的tag而如果交换机A的Trunk口PVID是1它收到一个带VLAN 10 tag的帧处理上没问题但如果交换机B发的是untag帧给交换机A交换机A会把它打成VLAN 1的tag两边就不在一个VLAN里了。这就是“PVID不一致导致VLAN悄悄改变”的典型坑。4.3 路由器和交换机之间的tag三层通信时经常用路由器子接口也叫单臂路由对接交换机的Trunk口。路由器子接口配置了dot1q termination vid 10那么从该子接口接收到的必须是带tag的帧。如果交换机Trunk口把VLAN 10的帧以untag形式发出去路由器根本不会收因为子接口只认带tag的帧。所以在配置单臂路由的时候交换机侧Trunk口的PVID一定不能设成10否则VLAN 10的帧到了路由器就被剥了tag路由器的子接口处理不了。这个坑我亲自踩过当时VLAN 20能通、VLAN 10就是不通查了半天才发现Trunk口的PVID被误改成了10。5. 华为交换机上的实操配置与验证5.1 基础配置命令华为交换机VRP系统上配置VLAN和端口类型的命令我直接贴出来方便对照。创建VLAN并进入VLAN视图system-view vlan 10 description PC_VLAN quit配置Access口interface GigabitEthernet0/0/1 port link-type access port default vlan 10配置Trunk口interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10 20 30这里有个细节华为设备上Trunk口如果想修改PVID用的是port trunk pvid vlan命令默认PVID是VLAN 1所以上面这段配置里VLAN 1的帧在Trunk链路上实际是untag传输的而VLAN 10、20、30的帧都是带tag的。如果想让某个VLAN在Trunk上以untag方式传输只能通过修改PVID实现所以一个Trunk口最多只能有一个“untag VLAN”。配置Hybrid口interface GigabitEthernet0/0/3 port link-type hybrid port hybrid pvid vlan 1 port hybrid untagged vlan 1 10 port hybrid tagged vlan 20这条配置的含义是端口PVID是1收到untag帧打成VLAN 1出方向VLAN 1和VLAN 10的帧以untag形式发送VLAN 20的帧以tag形式发送。5.2 查看端口tag/untag行为的关键命令配置完了最重要的是验证。华为设备上最常用的命令是display port vlan这条命令能看到每个端口的链路类型、PVID、允许通过的VLAN以及untagged VLAN列表。举个例子输出大概长这样Port Link Type PVID Trunk/VLAN Untagged VLAN GigabitEthernet0/0/1 access 10 - - GigabitEthernet0/0/2 trunk 1 1 10 20 30 1 GigabitEthernet0/0/3 hybrid 1 1 20 1 10注意看Trunk口那一行Untagged VLAN列显示的是1这表示只有VLAN 1的帧在出去时会被剥tag其他VLAN都带tag。Hybrid口那一行Untagged VLAN列显示的是1和10说明VLAN 1和10在出去时都是untag形式VLAN 20是tag形式。如果想看更详细的端口情况可以加参数display port vlan interface GigabitEthernet0/0/2这条命令会连端口的物理状态、允许的VLAN范围都列出来排障时信息更全。5.3 抓包验证tag的实际形态配置层面看完了如果想确认线上帧到底带没带tag最靠谱的方法是抓包。华为交换机上可以用内置的报文捕获功能但我更推荐在链路上串一台笔记本用Wireshark抓包。抓包时注意观察如果帧带有VLAN TagWireshark的协议解析里会出现802.1Q Virtual LAN这一层里面会明确标出VID。如果帧没有tag二层协议直接就是IP层没有802.1Q这一层。我之前排查过一起IPC摄像头VLAN不通的问题两台交换机之间Trunk配置看着完全一样VLAN 100也都允许了就是不通。抓包后发现帧根本没有出交换机A原因是交换机A上VLAN 100没有被创建只是Trunk口允许了VLAN 100华为设备上如果VLAN本身不存在允许列表里那个VLAN实际上不会生效帧直接被丢弃了。6. 常见故障排查思路与实战案例6.1 配置看着对但VLAN之间不通这种问题出现频率最高。我按排查顺序整理一下思路先看两端端口类型是否匹配Trunk对Trunk、Access对Access如果一头是Access另一头是Trunk除非有特殊需求否则大概率有问题。再看两端允许的VLAN列表是否一致。用display port vlan把两端的Untagged VLAN对比一下如果一边untag的是VLAN 10另一边untag的是VLAN 20那两边的帧出端口时一个带tag一个不带tag对端根本不会按期望处理。三看PVID是否一致。两台交换机互连的Trunk口PVID必须一致否则untag帧会被打成不同的VLAN ID流量直接进错VLAN。四看VLAN是否在交换机上创建。前面提到过VLAN不存在时允许列表里的VLAN不生效帧会被丢弃。用display vlan确认一下。最后看MAC地址表。display mac-address vlan 10看看交换机是否学到了正确的MAC地址如果没学到说明帧根本没进来。6.2 Hybrid口打标方向的问题关于“hybrid tag是入口打标还是出口打标”我可以明确回答tag和untag的配置只影响出方向的行为。入口方向无论什么端口类型处理逻辑都一样——untag帧打PVID的tagtag帧在允许列表里就收。Hybrid口的port hybrid tagged vlan和port hybrid untagged vlan命令操作的都是出方向的帧形态。举个例子Hybrid口配置了port hybrid untagged vlan 10意思是VLAN 10的帧从这个口发出去时剥掉tag以untag形式发送。但入方向收到一个untag帧打成什么VLAN由PVID决定跟前面那条untagged命令没有关系。很多人在配置Hybrid口时把入方向和出方向搞混总以为untagged vlan 10意味着这个口收到的untag帧会进VLAN 10这是错的。6.3 跨厂商设备互联的兼容性问题华为、H3C、思科、锐捷这些厂商对VLAN的实现都遵循802.1Q标准理论上互联没问题但实际运维中还是有几个坑。一个是术语差异。思科的Trunk口上switchport trunk native vlan对应的就是华为的PVIDnative VLAN就是那个唯一不打tag的VLAN。如果你在华为设备上把Trunk口的PVID设成了10对应思科设备上就要把native VLAN设成10两边才能对齐。另一个是默认VLAN的差异。老款思科交换机默认VLAN 1是所有端口都放行的华为设备上新建的VLAN默认不允许通过需要手动配置。两台设备对接时如果只配置了华为侧思科侧默认不放行链路照样不通。6.4 一个典型的跨交换机VLAN排查实录我挑一个真实案例完整走一遍过程。环境交换机A和交换机B通过GE0/0/24互联PC-A接A的GE0/0/1VLAN 10PC-B接B的GE0/0/1VLAN 10。现象PC-A能ping通网关但ping不通PC-B。第一步我在交换机A上看display port vlan发现GE0/0/24是trunk口PVID为1允许VLAN 10和20通过untagged VLAN只有1。这个配置看起来没问题。第二步看交换机B发现GE0/0/24的PVID居然被改成了10untagged VLAN变成了1和10。问题找到了交换机A发过来的VLAN 10帧是带tag的交换机B收到后在内部正常转发但数据要回发给交换机A时从GE0/0/24出去时因为PVID是10帧被剥了tag以untag形式发出去。交换机A收到这个untag帧因为Trunk口PVID是1于是给它打上VLAN 1的tag这个帧在交换机A上就变成了VLAN 1的帧再查MAC表发现目标PC-B在VLAN 10里交换机A认为VLAN 1和VLAN 10隔离直接丢弃。这就是典型的“PVID不一致导致往返路径VLAN不对称”问题。把交换机B的Trunk口PVID改回1重新测试PC-A和PC-B就可以通了。7. Tag和Untag的实际应用场景延伸7.1 终端设备也涉及tag网卡驱动和IPTV很多人以为tag只在交换机之间存在其实终端设备上也有场景。比如电信IPTV机顶盒很多地区的组网方式是一根网线从光猫出来同时承载上网和IPTV两个VLAN机顶盒需要配置VLAN ID才能正确收到组播流。这种情况下机顶盒的网卡驱动会主动打tag不再是“什么都不认识”的普通终端。再比如一些服务器的网卡支持VLAN过滤你在Linux上给子接口配置ip link add link eth0 name eth0.10 type vlan id 10这个子接口收到的就是带tag的帧物理网卡本身不关心tag虚拟子接口负责剥离和识别。7.2 无线网络里的tag处理ACAP组网里AP的上行口通常配成Trunk不同的SSID映射到不同的VLAN。当终端的流量到达AP时AP会根据用户关联的SSID决定给帧打哪个VLAN的tag然后上行到AC或汇聚交换机。这里tag和untag的处理逻辑是一样的只是打标的动作发生在AP内部。7.3 物联网与交换机VLAN如果物联网终端设备不支持VLAN标记最好的做法是让它们接入Access口靠交换机端口把自己划分到相应VLAN中。如果设备数量多可以采用按IP地址范围分流的方式在交换机上层做基于IP的子网划分而不是单纯依赖端口VLAN。VLAN的tag与untag机制不仅仅是交换机的配置语法它决定了数据帧如何在网络中按照既定规则流动。搞懂了它VLAN相关的故障会少掉一半配置的效率也会明显提升。8. 写在最后的个人经验用华为设备做实验最容易理解的验证方式就是在ENSP里搭一张拓扑两台交换机Trunk对接分别创建VLAN 10、20把PVID改成不同值然后用抓包工具抓链路数据帧亲眼看帧的tag变化——所有概念都会变得非常直接。另外真到排障的时候我习惯先问自己三个问题入口帧打成什么VLAN出端口时frame带不带tag对端的入口规则能不能正确处理这个状态把这三个问题想清楚90%以上VLAN不通的故障都能定位到具体原因。tag和untag的知识点本身不复杂但它是VLAN技术的底层逻辑值得花时间彻底掌握。很多人配置了几百台交换机依然在这个问题上栽跟头原因就是只背命令、不深究帧的生命周期。这条路上没有太多捷径把每个进出端口的细节都想透彻了才是长期最省力的做法。
返回列表