华为交换机的配置及:access、trunk、hybrid端口详解
做网络工程这行,如果你去问一个刚入行的同事"交换机端口模式怎么选",十有八九会得到一句"access接电脑,trunk接交换机"——这话没错,但也就说对了一半。真正在项目里跑过、排过障的人心里都清楚,端口模式选错了,轻则业务不通,重则广播风暴、环路、VLAN数据串扰,半夜被叫起来处理故障的滋味可不好受。
我最近刚好在帮一家公司做网络改造,现场用的就是华为S5730系列交换机,客户原有网络里居然还有几个端口配成了hybrid,导致新接入的办公终端怎么都拿不到正确的IP地址。借着这次排障的劲头,我把华为交换机上access、trunk、hybrid这三种端口模式从头到尾梳理了一遍,结合S5720/S5730的真实操作命令,写成这篇东西。不管你是刚接触华为设备的网络小白,还是被混合端口模式搞得头疼的运维老手,这篇都能给你一点参考。
先说清楚这篇文章能解决什么问题:看完之后,你能明白三种端口在收帧和发帧时的处理差异,知道什么场景该用哪种模式,掌握华为交换机上最常用的端口配置命令,并且我还会把实际排障中容易踩的坑、判断思路一并交代清楚。
1. 三种端口模式:官方定义和我的理解
1.1 为什么交换机会有端口模式这个概念
要讲清楚三种模式,得先理解VLAN帧的基本格式。交换机在转发数据时,为了让对端设备知道这个帧属于哪个VLAN,会在以太网帧头里塞进去一个4字节的Tag字段,里面最关键的是12比特的VLAN ID,取值范围1到4094。没打Tag的帧叫untagged帧,带Tag的叫tagged帧。
早期交换机每个端口只能属于一个VLAN,后来为了灵活,才发展出端口可以配置成不同模式,来约定"这个端口进来和出去的帧应该怎么处理Tag"。说白了,端口模式就是一套关于Tag的收发规则,就这么简单。
1.2 Access端口:最基础的接入端口
Access端口在华为交换机上是最常见的配置,通常用来连接终端设备,比如PC、打印机、IP电话。一个Access端口只能属于一个VLAN,也就是只能有一个PVID(Port VLAN ID),这个PVID就是端口默认所属的VLAN编号。
Access端口收到一个不带Tag的帧时,会打上PVID对应的Tag,然后交给交换芯片去查MAC地址表转发。收到带Tag的帧时,如果Tag里的VLAN ID和PVID一致就收下,不一致就直接丢弃。发送帧时则相反,不管这个帧原来是哪个VLAN的,只要从Access口出去,一律把Tag剥掉,还原成无Tag的原始以太网帧。
这就意味着,Access口下接的终端设备完全感知不到VLAN Tag的存在,对终端来说,它就是在和一个普通二层端口通信,简单、稳定、不出错。正因如此,所有接PC、服务器、摄像头的端口,几乎无脑选Access就行。
1.3 Trunk端口:交换机之间的骨干通道
Trunk端口是交换机与交换机之间的高速公路,它最大的特点是允许VLAN列表里的多个VLAN通过,并且默认情况下帧带着Tag出去,接收时也要求帧带Tag。
但这里有个被很多人搞混的点:Trunk口也有PVID。华为交换机上Trunk口的默认PVID是VLAN 1。当Trunk口收到一个不带Tag的帧时,同样会打上PVID的Tag,所以VLAN 1的帧在Trunk口上走的是无Tag的形式。如果Trunk口允许的VLAN列表里没有包含PVID对应的VLAN,那这个PVID的untagged帧就会在入口被直接丢弃,因为入口检查时发现PVID对应的VLAN不在允许列表里。
发送端处理也有讲究:Trunk口要发一个帧,先看这个帧的VLAN是否在allow-pass vlan列表里,不在就丢。然后看VLAN是否等于PVID,等于就去Tag,不等于就保留Tag。所以默认状态下,VLAN 1在Trunk链路上是不打Tag的,其他VLAN带着Tag走。
这个细节极其重要。很多人在做交换机级联时,明明allow-pass列表都放行了,但VLAN 1的业务就是不通,查来查去才发现是PVID和Untagged的联动关系没搞明白。
1.4 Hybrid端口:华为的特有产物,灵活得让人又爱又恨
Hybrid是华为私有的端口模式,思科交换机上不存在这个概念。它的设计初衷,是把Access和Trunk的能力揉在一个端口里:既能像Access那样对接终端时剥Tag,又能像Trunk那样让多个VLAN穿过,而且每个VLAN是打Tag出去还是不打Tag出去,全凭你说了算。
具体来说,Hybrid口的PVID可以自定义,Untagged VLAN列表和Tagged VLAN列表也是独立的。收到无Tag帧时打PVID的Tag;发帧时,如果目标VLAN在Untagged列表里就剥掉Tag,在Tagged列表里就保留Tag。
这种"每个VLAN单独指定是否打Tag"的精细控制能力,让Hybrid口在上下行混合场景里非常好用。比如一个端口既需要接一个无Tag的傻瓜交换机,又需要透传两个VLAN到上级设备,用Hybrid一条命令就能搞定。但灵活性高也意味着配置时要更加小心,因为你得同时维护PVID、Untagged列表、Tagged列表三组信息,任何一个设置错位,故障都很隐蔽。
2. 华为交换机上的配置命令与实操要点
2.1 从登录到进入端口视图
拿到一台华为S5720或者S5730,第一次配置时,通常会通过Console口或者SSH登录。Console口登录一般用9600波特率,8位数据位,1位停止位,无校验,这些是串口连接的基础参数,搞错了连不上。
登录成功后在用户视图下输入system-view进入系统视图,然后输入interface GigabitEthernet 0/0/1进入具体的接口视图。华为设备的接口编号规则是"槽位号/板卡号/端口号",S5720-28TP的24个千兆电口编号就是GigabitEthernet 0/0/1到0/0/24。也可以用display interface brief先看看当前所有接口的状态,确认你找到的编号是对的。
注意:华为新版本部分设备支持interface范围批量配置,比如interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/10,可以一次把1到10号口全部配置成同样模式,效率极高,但配置前务必确认这些端口的用途一致,别误伤了不该动的口。
2.2 Access端口的标准配置流程
配置Access口,核心就三步:设置端口模式为access、设置默认VLAN、确认端口启用。
以把GE0/0/1划到VLAN 10为例:
system-view interface GigabitEthernet 0/0/1 port link-type access port default vlan 10 quit这里解释一下每一条命令的作用。
port link-type access是必须的,华为交换机端口默认是hybrid模式,很多人刚上手时想当然地以为默认是access,结果配置完default vlan后发现终端怎么都ping不通,一看display port vlan,才发现端口是hybrid。所以在改模式前最好先执行display port vlan查看当前模式,心里有数再动手。
port default vlan 10就把这个端口的PVID设置成10,同时该端口也就自动只属于VLAN 10了。华为的access口和思科有一点细微差异:思科是switchport access vlan 10,华为是port default vlan 10,建议记成"默认VLAN"而不是"访问VLAN",这样理解PVID的语义会顺很多。
端口启用其实默认就是开启的,但如果设备曾被人shutdown过,或者端口因安全策略被锁定,就需要在接口视图下输入undo shutdown来激活端口。配置完可以用display port vlan查看端口模式和PVID,用display vlan 10查看该VLAN下有哪些端口。
2.3 Trunk端口的标准配置流程
Trunk口的配置也不复杂,但要注意allow-pass列表和PVID的关系。以下演示把GE0/0/24设置成Trunk口,放行VLAN 10和20:
system-view interface GigabitEthernet 0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 quit如果不指定VLAN直接执行port trunk allow-pass vlan all,就是把1到4094所有VLAN全部放行,这在测试环境里很省事,但生产环境千万别这么干。allow-pass列表越宽,广播域就越大,万一上联口的配置有误,影响面会呈指数级扩大。我见过不止一次,因为运营商接入交换机上配了vlan all,导致客户内网不同VLAN间二层直接互通,安全策略全部形同虚设。
再说PVID的问题。如果Trunk口的PVID保持默认的1,而VLAN 1又不在allow-pass列表里,那么从该口进来的无Tag帧会被丢弃。很多人的Trunk口只放行了VLAN 10和20,忘了把VLAN 1加进去,结果管理VLAN的流量全部不通,设备直接失联。解决办法有两个:要么在allow-pass里加上vlan 1,要么干脆把这个Trunk口的PVID改到别的VLAN。
如果要把Trunk口的PVID改成别的值,命令是:
port trunk pvid vlan 10这条命令背后有很强的实战意义。当下联跟的是一个傻瓜交换机,傻瓜交换机上没有VLAN概念,所有帧都是无Tag出去的。这时你用Trunk口去连它,就必须把Trunk口的PVID设成和业务VLAN一致,否则傻瓜交换机发上来的无Tag帧会被打上错误的VLAN ID,转发全乱。
2.4 Hybrid端口配置示范:它在华为上到底怎么用
Hybrid的配置比前两种多一组Untagged列表的设置。假设这样一个场景:GE0/0/5接了一台普通的办公PC,属于VLAN 10,但这条线路上还想让VLAN 20的语音流量也能透传到上级语音网关。用Access口做不到,因为Access口只认一个VLAN。用Trunk口又会把PC的流量也打成Tag,PC端不一定认。这时候Hybrid就是最合适的方案。
配置如下:
system-view interface GigabitEthernet 0/0/5 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 20 port hybrid tagged vlan 20 quit等等,这段配置乍看起来有点绕。让我详细解释一下:
port hybrid pvid vlan 10,设置端口的PVID为10,这样从该口进来的无Tag帧会被打上VLAN 10的Tag。
port hybrid untagged vlan 10 20的意思是,当该端口要发送VLAN 10和VLAN 20的帧时,都剥掉Tag再发出去。对于下联的PC来说,它收到的VLAN 10流量是无Tag的,完全正常。对于上联的语音网关来说,它需要的VLAN 20的流量也是无Tag进来的?不对,这里还需要另一侧配合。
实际上这个场景更合理的做法是,GE0/0/5一侧接PC,另一侧接到上级交换机时,VLAN 20需要透传带Tag的帧。所以更常见的配置是这样:PC接在GE0/0/5上,PVID为10,Untagged列表为10;VLAN 20是打Tag走的,所以Tagged列表加20。
改成这样:
port hybrid pvid vlan 10 port hybrid untagged vlan 10 port hybrid tagged vlan 20这样PC发的无Tag帧进来后被打上VLAN 10的Tag,往上级交换机转发时,VLAN 10的帧由于在Untagged列表里,会剥Tag后从该口出去?不对,如果上级设备也是一台交换机,它期望收到的是带Tag的帧,这就矛盾了。
这里我不卖关子,直接说结论:Hybrid口的真正常用场景,是它一边接终端,一边接上联设备时,可以根据目标VLAN灵活决定出去时打不打Tag。但你必须先想清楚"这个端口出去时,对哪个VLAN打Tag、对哪个VLAN不打Tag",然后再动手配置。如果你自己都没理顺Tag的流向,配置必然出错。
我建议在使用Hybrid前,先在草稿纸上画一个简单的流向图:哪个VLAN从哪个方向进来,出去时目标是哪个设备,那台设备期望的是tagged还是untagged帧。想清楚了再上设备敲命令,成功率会高非常多。
2.5 配置后如何验证端口状态
配置完不能拍拍屁股就走,验证环节必不可少。常用的验证命令有几个:
display port vlan display vlan summary display vlan 10 display interface GigabitEthernet 0/0/1display port vlan的输出会列出所有端口的模式、PVID、允许通过的VLAN、Untagged列表等信息,这个命令基本是端口排查的第一选择。display vlan 10会列出VLAN 10下所有的接口,包括Access口和Trunk/Hybrid中放行了VLAN 10的口。
还有个容易被忽略的命令是display mac-address,用来查看MAC地址表。当你怀疑某个端口下挂的终端是否正常通信时,看这个端口下有没有学习到终端的MAC地址,一目了然。有时终端明明连着交换机,但display mac-address里就是看不到,这时候多半是端口下还有一层傻瓜交换机,或者终端网卡没起来。
3. 典型项目实战:公司五部门VLAN划分实操
3.1 场景描述与VLAN规划思路
这次改造的客户是一家制造企业,办公楼里五个部门:行政部、财务部、技术部、销售部、生产部。原有网络结构混乱,所有电脑都在同一个网段,广播报文满天飞,动不动就有人反映网络卡顿。我的任务是利用一台华为S5730交换机做网关,把五个部门隔离成五个独立的子网。
根据客户的终端数量,我做了如下规划:
- 行政部约20人,VLAN 10,网段192.168.10.0/24,网关192.168.10.254
- 财务部约15人,VLAN 20,网段192.168.20.0/24,网关192.168.20.254
- 技术部约35人,VLAN 30,网段192.168.30.0/24,网关192.168.30.254
- 销售部约30人,VLAN 40,网段192.168.40.0/24,网关192.168.40.254
- 生产部约50人,VLAN 50,网段192.168.50.0/24,网关192.168.50.254
VLAN和网段一一对应,方便记忆也方便后期写ACL策略。在真正的企业网络里,这种一一对应的规划习惯能帮你省下大量排查时间——看到IP地址就能立刻判断出它在哪个VLAN、属于哪个部门,这种"望文生义"的便利是很多东西换不来的。
3.2 创建VLAN并配置Access端口
先创建VLAN,华为的命令是vlan batch,可以一条命令批量创建多个不连续的VLAN:
system-view vlan batch 10 20 30 40 50创建完VLAN后,再把下联终端的端口挨个划入对应的VLAN。如果客户的信息化管理员能提供一个端口和IP的对照表,这一步会快很多,但现实中往往没有完整的台账,只能靠人工去终端侧看IP、看网线编号来对应。我通常的做法是先配置一个批量端口组,把同一部门的端口一次性配置完,省得一条条敲。
interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/8 port link-type access port default vlan 10 quit技术部有35台终端,分布在GE0/0/9到GE0/0/24,加上GE0/0/25到GE0/0/26,这种跨多个端口范围的,我一般分两次配置,或者用逗号分隔端口组。华为支持interface range里写多个非连续的接口,比如:
interface range GigabitEthernet 0/0/9 to GigabitEthernet 0/0/24 port link-type access port default vlan 30 quit这里必须提醒新手一句:批量配置时千万别把上联口一起框进去。有一次我批量配置时没细看,把上联到核心交换机的GE0/0/24也改成了access模式,一下把整个楼的网络都断了。这个教训让我后来在批量操作前,必定先执行display interface brief确认哪些端口是上联口,哪些是接终端的口。
3.3 Trunk链路配置与三层网关设置
这台S5730既做二层接入,也兼任各部门的网关,所以需要在设备上创建VLANIF接口来充当各子网的网关:
interface Vlanif 10 ip address 192.168.10.254 255.255.255.0 quit依次为其他VLAN配置对应的网关地址。如果这台交换机上面还有核心交换机,那核心与接入之间就需要Trunk链路。以核心交换机连接接入交换机的上联口为例,在接入交换机侧:
interface GigabitEthernet 0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 30 40 50 quit在核心交换机侧,对应的下联口同样配置成Trunk,允许相同的VLAN列表通过。这里有一个非常关键的原则:链路两端的Trunk口放行的VLAN列表必须一致,否则数据包到了对端会因为找不到对应VLAN而直接被丢弃。而且两个Trunk口的PVID语义也要对齐,如果一侧PVID是1,另一侧PVID改成了10,那VLAN 1的流量就会在两侧表现出截然不同的Tag处理方式,故障会非常隐蔽。
配置完成后,建议用display port vlan分别在两侧查看端口状态,确认允许列表一致。一旦发现不一致,立刻修正,别等问题积累到业务上线才发现。
3.4 部门间互访控制与安全策略
VLAN隔离之后,部门间默认是不能互访的,但实际业务往往需要某些特定的互通。比如技术部要访问财务部的ERP服务器,销售部要访问技术部的邮件服务器。这种场景就需要配置VLANIF间的路由策略,或者直接用ACL限制互访。
华为交换机上可以通过traffic-filter结合ACL来实现简单的访问控制。比如只允许技术部访问财务部ERP服务器的5000端口,其他访问全部拒绝:
acl 3000 rule 5 permit tcp source 192.168.30.0 0.0.0.255 destination 192.168.20.100 0.0.0.0 destination-port eq 5000 rule 10 deny ip source 192.168.30.0 0.0.0.255 destination 192.168.20.0 0.0.0.255 quit interface Vlanif 20 traffic-filter inbound acl 3000 quit这种配置在真实项目中非常实用,但也要提醒一句:ACL规则是从上到下顺序匹配的,先写的规则优先级更高,一旦前面的规则命中,后面的规则就不再检查。所以规则顺序一定要从"最精确的放行"到"最宽泛的拒绝"来排,否则会出现放行规则被拒绝规则盖住的情况,导致该通的业务通不了。
4. 常见问题排查与避坑技巧
4.1 配置后终端获取不到IP地址
这是最常见的故障现象之一。终端连着交换机,但拿不到DHCP分配的IP,或者拿到了错误的网段地址。我的排查思路从底到顶走一遍:
先看物理链路是否正常,交换机侧看display interface brief,看端口状态是否UP,有没有大量的错误包。再看终端网卡是否正常识别到链路,获取到的是169.254开头的地址通常就是没拿到DHCP的典型表现。
如果链路正常,接下来查端口配置。执行display port vlan确认端口模式和PVID是否和规划一致。最常出现的错误是:端口忘了改成access模式,还在hybrid模式,而Hybrid口的Untagged列表里又没有包含PVID对应的VLAN,导致终端发出的广播帧到了交换机后被错误处理,DHCP discover报文根本送不到DHCP服务器。
再往下查就是VLANIF和DHCP服务器配置了。如果DHCP服务器在另一个VLAN里,需要在交换机上配置DHCP Relay,否则跨VLAN的DHCP请求无法被处理。华为交换机上启用DHCP Relay的命令大致是:
interface Vlanif 10 dhcp select relay dhcp relay server-ip 192.168.99.10 quit实话说,大部分"终端拿不到IP"的故障都出在端口模式或PVID错乱上,真正到DHCP Relay这一层的反而少。所以排查时先易后难,从端口配置入手基本不会错。
4.2 Trunk口透传失败:allow-pass和PVID的坑
如果两台交换机之间的Trunk链路配置好了,但某些VLAN的终端之间就是不通,最常见的两个原因我都可以展开说说。
第一个是allow-pass列表不一致。比如接入交换机放行了VLAN 10、20、30,但核心交换机只放行了VLAN 10和20,那VLAN 30的流量到核心交换机的端口就被丢弃了。这种问题诊断起来很直接,在接入交换机上ping VLAN 30的网关,如果ping不通,再从核心交换机上看VLAN 30的接口是否存在,就能定位到链路两端配置不一致。
第二个是PVID的坑。上面提到过,默认情况下Trunk口的PVID是VLAN 1,所以VLAN 1的帧在Trunk链路上是无Tag的。但如果你把其中一侧的Trunk口PVID改成了10,把另一侧保持为1,那么VLAN 1的帧在一侧是untagged,在另一侧却因为PVID不同而走了不一样的处理流程,最终的后果就是管理VLAN的流量在一台设备上通,另一台上不通。
我建议在做Trunk级联配置时,除非有特别的业务需求(比如下联傻瓜交换机),否则尽量保持Trunk口PVID为默认值1。这样省掉了一层心智负担,也让链路的Tag行为最符合直觉。
4.3 Hybrid口Untagged列表配置错误导致广播风暴
Hybrid口配置不当,后果可以非常严重。有一次我在现场遇到一个故障:核心交换机上配了一个Hybrid口,Untagged列表里包含了VLAN 1和VLAN 10,Tagged列表里是VLAN 20。下联的傻瓜交换机把多个部门的终端都接在一起,结果VLAN 1和VLAN 10的广播报文在傻瓜交换机上互相转发,形成一个广播环,整个二层网络瞬间瘫痪。
这个故障的根因在于:Untagged列表里同时包含了多个VLAN,但这些VLAN的帧从同一个Hybrid口出去时全都不带Tag,而下联的傻瓜交换机根本区分不了这些无Tag帧属于哪个VLAN,于是所有广播帧都在同一广播域里泛滥。正确的做法应该是:如果下联是傻瓜交换机,那就应该让这个Hybrid口只承载一个VLAN的流量,或者干脆把下联口改成Access模式,老老实实只放行一个VLAN。
这个案例给我们的教训是:Hybrid口的灵活性是把双刃剑。它能让一个端口同时承载Tagged和Untagged流量,但你必须非常清楚下联设备是否会正确处理无Tag帧。凡是下联是傻瓜交换机、IPC等不支持VLAN Tag的设备,就尽量不要让多个VLAN同时以Untagged形式通过该端口。
4.4 端口模式弄错导致环路排查实战
再分享一个我印象深刻的环路故障。客户反馈整个网络非常卡,部分终端断断续续掉线。登录交换机一看,CPU使用率飙到90%以上,display logbuffer里全是MAC地址飘移的记录,一台PC的MAC地址在两个端口之间来回跳。
我用display mac-address flapping-record命令查了MAC地址飘移记录,发现一个MAC地址在GE0/0/1和GE0/0/10之间反复横跳。查配置后发现问题出在这里:GE0/0/1本来应该接行政部的PC,但不知什么时候被人改成Trunk口,而GE0/0/10也是Trunk口,两个口之间接了一根网线,形成一个物理环路。因为Trunk口默认放行了VLAN 1,而两个口的PVID都是1,所以VLAN 1的广播帧就在这个环里无限循环,STP又恰好没启用,整个VLAN 1的广播域瞬间被塞满。
解决办法很简单:删除两个端口的Trunk配置,把GE0/0/1恢复成Access口,拔掉那根多余的网线,然后开启STP。这个案例说明,端口模式配置不只是"通不通"的问题,更可能是"会不会把整个网络搞垮"的问题。生产环境里,所有二层交换机必须启用STP/RSTP,端口模式下不要随意把终端口改成Trunk或Hybrid,这是最基本的安全底线。
4.5 问题排查速查表
| 故障现象 | 可能原因 | 排查命令 | 处理措施 |
|---|---|---|---|
| 终端获取不到IP | 端口PVID错误、端口模式错误 | display port vlan | 修正端口模式和default vlan |
| 跨交换机VLAN不通 | 两端allow-pass列表不一致 | display port vlan或display vlan | 对齐两端放行列表 |
| 管理VLAN失联 | Trunk口PVID不一致 | display port vlan | 统一PVID或放行对应VLAN |
| 广播风暴、MAC漂移 | 物理环路或Hybrid放行多个Untagged VLAN | display mac-address flapping-record | 消除环路、检查端口配置、启用STP |
| 单端口正常但时通时断 | 网线质量差或端口自协商异常 | display interface brief | 更换网线、检查双工模式 |
排障时最重要的不是急着重启设备,而是先冷静地看现象、收集数据,再结合拓扑判断故障点。我见过太多人在故障现场乱插拔网线,最后把原本正常的链路也弄断了,本来一个小问题变成大事故。
5. 从项目中学到的几条经验
这次项目做下来,我最大的感受是:配置华为交换机的端口模式本身不难,难的是在复杂拓扑里理清Tag的流动逻辑。Access适合接终端,Trunk适合接交换机,Hybrid适合那种单端口既要接终端又要透传的混合场景,但用Hybrid之前,一定要想清楚下联设备对Tag的容忍度。
另外,做任何端口模式修改前,先备份设备配置。华为的display current-configuration命令可以看到全部运行配置,重定向到文件或记录下来,出问题可以快速回滚。修改大批量端口前,先用display interface brief确认哪些是上联口,哪些是终端口,在纸上列一个修改清单,逐条执行,避免误操作。
最后一条实操小技巧:华为S5720/S5730上,配置错了想恢复默认,可以执行clear configuration interface GigabitEthernet 0/0/1,再执行reboot或者直接在接口视图下undo port link-type,就能把端口恢复成默认的Hybrid模式。但这条命令执行后会把端口下的所有配置清空,包括可能存在的IP地址、描述信息、shutdown状态,操作时一定谨慎,确认是目标端口再动手。
行文至此,关于华为交换机三种端口模式的梳理就告一段落了。端口模式说白了就是一纸收发规则,规则想透了,配置自然就顺了。你再回头看看手头那台S5720或S5730,如果还有没理清楚的端口配置,不妨先画一张Tag流向图,再对照着改配置,思路会清晰很多。