交换机基本原理与配置:从MAC表、VLAN到Trunk端口实战

发布时间:2026/10/26 12:49:16
交换机基本原理与配置:从MAC表、VLAN到Trunk端口实战

“交换机基本原理与配置”这八个字,摆在培训目录里毫不起眼,但真让它变得值钱的,是那些配错一个端口类型就得查到后半夜的现场。我带过几个刚入行的同事,命令敲得飞快,switchport mode trunk背得滚瓜烂熟,可链路一不通,第一反应永远是“重启试试”——他们脑子里缺一张图,不知道一个数据帧从主机网卡出来以后,在交换机内部到底经过了哪几道关卡、被做了什么判断。这篇东西想干的事很朴素:把交换机基本原理与配置这两件事绑在一起讲,先把“它凭什么这么转发”说透,再落到命令行上,把这些判断变成能直接抄的配置。内容覆盖二层转发流程、MAC 地址表、VLAN 划分、Access/Trunk/Hybrid 三种端口类型、管理面配置,以及我这些年踩出来的排障顺序,写给刚摸网络设备的新人,也写给那些“会配但说不清为什么这么配”的老手拿来对一遍思路。不聊认证考点,只讲现场能用的。

1. 先搞清楚交换机站在网络的哪个位置

1.1 从冲突域说起:它到底解决了什么问题

要理解交换机,得先回到它取代的那个东西——集线器。集线器是个纯物理层设备,一个口收到的电信号会原样复制到所有其他口,整个设备就是一个冲突域。所有接在它上面的机器共享同一份带宽,谁想发数据都得先听线路忙不忙,这就是早年 CSMA/CD 那套载波监听多路访问/冲突检测的机制。八台机器接一个百兆集线器,理想情况下每台平均只有十几兆,而且同时发送就会碰撞、退避、重传,实际体验比理论值还差一大截。

交换机做的最关键一件事,是把一个冲突域切成每端口一个冲突域。每个端口独立收发,支持全双工,收发各走一对线互不干扰,也就不存在“碰撞”这个概念了。这一步的价值经常被低估:它不是“变快了一点”,而是从“一群人抢一个话筒”变成了“每个人一条独立电话线”。理解了这一点,后面所有配置动作的动机就顺了——我们配 VLAN、配 Trunk、配端口安全,本质上都是在管理“谁和谁能听到谁说话”这件事。

还有个容易混淆的点:交换机分割的是冲突域,不是广播域。默认情况下,一台交换机上所有端口仍在同一个广播域里,一个广播帧照样会被泛洪到所有端口。要切广播域,就得上 VLAN。这个区别是新手最容易犯迷糊的地方,我见过有人以为“接了交换机广播就不扩散了”,结果几十台机器一个广播风暴直接把整栋楼的网打瘫。

1.2 一个帧进交换机以后,到底发生了什么

抛开所有厂商的实现细节,一台二层交换机处理一个入站帧,动作可以归成三步:学源、查目的、动起来。这三步是整篇文章的地基,配置出问题时,脑子里过一遍这三步,八成能定位到方向。

第一步,学习。帧从某个端口进来,交换机读它的源 MAC,连同这个入端口号和所属 VLAN ID,写进 MAC 地址表,同时打上一个老化计时器(常见默认 300 秒)。这里有个关键细节:表项是“源 MAC + VLAN + 端口”的三元组,不是单纯的 MAC。同一个 MAC 出现在不同 VLAN 里,会被记成两条独立表项,这也是为什么跨 VLAN 排障时不能只看 MAC 表就下结论。

第二步,查目的。拿目的 MAC 去表里查,结果有三种:查到且出端口就是入端口,丢弃(这叫过滤,说明两台机器已经在同一个口下面,不需要交换机转发);查到且出端口是别的口,从那个口转发出去(单播转发);查不到,或者目的 MAC 是广播/组播地址,就从同 VLAN 内除入端口外的所有端口发出去(泛洪)。

第三步,动起来。转发也好,泛洪也好,出去的帧要不要带 VLAN 标签,取决于出端口的类型和配置,这就是后面 Access/Trunk/Hybrid 要解决的问题。

理解了这三步,很多“玄学故障”就不玄了。比如“换了台机器网络就不通”,本质是新机器的 MAC 表里没有,靠泛洪本来也能通,但如果中间某个环节把泛洪挡住了(比如端口隔离、私有 VLAN、ACL),就会表现成完全不通。再比如“刚插上不通,等一会儿又通了”,往往是 MAC 表项老化或者 STP 收敛过程中的正常现象。

1.3 接入、汇聚、核心:分层不是摆样子

组网分层这件事,很多人觉得是厂商卖设备的说法,其实它对应的是真实的流量模型和故障域控制需求。接入层负责把终端接进来,端口密度高、单端口带宽需求低、功能简单;汇聚层做策略收敛和 VLAN 终结,是二层和三层交接的地方;核心层只求快和稳,尽量不做复杂策略。

落到选型上,我一般按这个思路算账。假设一层楼 200 个信息点,接入交换机 24 口一台,考虑预留和冗余,大概需要 10 台。每台接入给两个千兆上行做链路聚合,汇聚侧就需要 20 个千兆口。这里有个收敛比的估算:终端实际并发流量远小于线速,办公场景按 1:20 到 1:30 估收敛比是常见做法,200 个千兆口理论上限 200G,实际汇聚上行给 20G 绰绰有余。但如果是机房服务器区,收敛比要往 1:3 甚至 1:1 靠,因为存储和备份流量是真能吃满带宽的。

提醒一句:收敛比不是拍脑袋的数字,最好拿现网的端口流量趋势图反推。我见过一个项目照搬办公区的 1:25 收敛比去做研发测试网,结果一到批量编译、镜像拉取的高峰时段上行直接打满,丢包丢得莫名其妙。

分层还有个隐性好处是缩小故障域。接入层某台设备环路,影响范围被 STP 和上行带宽限制在一个小圈子里;要是全网扁平化组网,一台设备抽风能顺着广播域烧到整个网络。这个代价我在早期项目里付过,后面就再也不敢图省事扁平化了。

2. 三个绕不开的核心机制:MAC表、VLAN、端口类型

2.1 MAC 地址表是怎么“长”出来的

MAC 地址表不是配置出来的,是学出来的,这点必须先建立正确认知。设备上电时表是空的,第一个帧进来才开始长。所以任何“新接入设备不通”的问题,第一步都该问:它的帧有没有真的到达交换机的某个端口?端口有没有 up?VLAN 对不对?

表项分两类。动态表项靠学习得来,老化时间到了自动清掉,常见默认 300 秒,也就是说终端静默五分钟以上,表项就没了,之后第一个包还得泛洪一次。静态表项手工绑死,不会老化,通常用在需要固定转发路径或者安全绑定的场景。静态表不是越多越好,绑多了维护成本高,而且一旦终端换网卡就全废,我的习惯是只在确实需要防伪冒的少量关键端口上做。

项目动态表项静态表项
来源自动学习源 MAC手工配置
老化默认 300 秒,可调不老化
容量占用随终端数量增长固定占用
典型用途普通终端接入安全绑定、关键服务器
风险表被打满后泛洪终端更换需同步维护

表容量是个容易被忽略的坑。接入交换机 MAC 表通常几 K 到十几 K,看着够用,但如果下面挂了虚拟化环境或者级联了一堆小交换机,MAC 数量会爆炸式增长。表满之后新 MAC 学不进来,交换机退化成“全部泛洪”,表现就是网络突然变慢、广播量飙升,但看配置一切正常。这种情况查show mac address-table count一看就明白。

还有个进阶概念叫 MAC 漂移:同一个 MAC 在短时间内从两个不同端口学到,交换机就会反复改表。正常情况下不该出现,一旦出现,八成是环路,或者有人私接了台小路由/小交换机把网络搞成了环。这个后面排障章节细说。

2.2 VLAN:把一台物理交换机切成多台

VLAN 的本质是把广播域做逻辑切分。一台 48 口交换机不配 VLAN,就是一个大广播域,任何一台机器的 ARP 请求都会打到所有端口上;切成 10 个 VLAN,就相当于逻辑上变成 10 台独立的交换机,广播只在本 VLAN 内泛洪。

这个“逻辑独立”带来三个直接收益。第一是广播抑制,VLAN 越多,单个广播域越小,广播风暴的破坏半径越小。第二是安全隔离,不同 VLAN 默认二层不通,要通必须经过三层设备做策略,天然多了一道闸。第三是管理灵活性,按部门、按楼层、按业务划 VLAN,人员搬工位不用重新拉线,改个端口 VLAN 就行。

VLAN ID 的可用范围是 1 到 4094,其中 VLAN 1 是默认 VLAN,所有端口初始都属于它。我的习惯是永远不往 VLAN 1 里放业务,原因有三:一是它是所有设备的默认值,谁插上都在里面,隔离形同虚设;二是很多协议报文默认走 VLAN 1,容易和业务混在一起;三是万一配置失误,VLAN 1 的问题排查起来最乱。管理 VLAN 我也会单独开一个,比如 VLAN 99,业务和管理彻底分开。

规划 VLAN 时最好落一张表,别到现网里现编:

VLAN ID名称用途网段规划备注
10office办公终端按点位规模规划接入端口 Access
20voice语音终端独立小网段需要 QoS 配合
30server服务器区按业务细分收敛比要低
99mgmt设备管理小型管理网段仅管理员可达

VLAN 划完之后必须清楚一件事:VLAN 只解决二层隔离,不解决三层互通。两个 VLAN 之间要通信,必须有三层设备(路由器、三层交换机、防火墙)做网关,VLAN 接口上配 IP 才能当网关用。新手最常见的误解是“我建了两个 VLAN,为什么它们不通”,答案是它们本来就不该通,通才需要额外配。

2.3 Access、Trunk、Hybrid:三种端口类型怎么选

这是交换机配置里最容易出错、也最值得反复讲的部分。三种端口类型的差别,说到底就两个问题:这个口下面接的是什么,以及帧出去的时候带不带标签。

Access 口接终端。帧进来时,如果没带标签,就打上该口 PVID(默认就是端口所在 VLAN)的标签;帧出去时,剥掉标签再发。终端网卡不懂 802.1Q,只能收无标签帧,所以接 PC、打印机、摄像头这类哑终端,一律 Access。

Trunk 口接交换机、路由器这类懂标签的设备。它可以承载多个 VLAN,帧出去时默认带标签,只有 Native VLAN(默认 VLAN 1)的帧不带标签。Trunk 上必须配允许通过的 VLAN 列表,这条规则是本篇最容易翻车的地方——两端列表不一致,或者中间某段漏了一个 VLAN,就只有那一个 VLAN 不通,其他都正常,非常迷惑人。

Hybrid 口介于两者之间,可以按 VLAN 精细控制每个 VLAN 出去时带不带标签,灵活但也更容易配错。它适合一个口既要接终端又要承载特殊业务的场景,实际项目里我用得不多,因为可读性差,交接给别人容易看不懂。

端口类型常见对端入方向出方向使用建议
AccessPC、摄像头、打印机打 PVID 标签剥标签接哑终端默认选它
Trunk交换机、路由器、AP带标签则透传,不带则打 PVID除 Native VLAN 外都带标签级联链路首选
Hybrid混合场景同 Trunk按 VLAN 单独指定 tag/untag用得少,配置需注释

端口类型改错是断网的高频原因。把一个本该 Access 的口配成 Trunk,终端发来的无标签帧会被打上 PVID 之后按 Trunk 规则处理,表现可能是“能拿到地址但访问异常”,也可能是干脆不通,取决于对端怎么配。改之前先确认对端是什么设备。

还有两个细节值得记一下。第一,Trunk 两端的Native VLAN 最好显式改成同一个不承载业务的 VLAN,别都留在默认值上,否则两端不一致会造成 VLAN 跳跃,属于安全隐患。第二,Access 口的 PVID 改了之后,别忘了端口本身的 VLAN 归属也会跟着变,有些命令体系里这两者是同一个值,改一个等于改另一个,操作前先想清楚影响范围。

3. 从零配通一台接入交换机:完整实操记录

3.1 开局准备:Console 连接与初始体检

新设备到手,第一件事不是插网线,是走 Console。原因很实在:新设备没有管理 IP,网络上也没人认识它,Console 是唯一的带外入口。用一根 Console 线(现在多是 USB 转串口)接上,终端软件里波特率一般 9600、8 位数据位、无校验、1 位停止位、无流控,这个参数组合是行业惯例,配错了就是一片乱码。

连上之后先别急着敲配置,做三件事。第一,看设备型号、软件版本、序列号,记下来存档,后面升级和报障都用得上。第二,看现有配置,确认是不是二手设备带着历史配置,有的话先备份再清空,别在一个不明来路的配置上叠加。第三,看端口状态和日志,确认没有硬件告警、没有反复 up/down 的端口,硬件问题越早发现越好。

# 通用命令风格示例,不同设备命令有差异,按自家手册对齐 show version show running-config show interface status show logging

初始配置我固定做这几项:改设备名(带位置信息,比如楼层-机柜-序号,方便日后定位)、设置时区与时间、配置管理 VLAN 接口 IP、开 SSH 关 Telnet、配置本地管理员账号、设置 Console 和远程登录的超时。这几步看着琐碎,但都是后面运维省事的关键。设备名不带位置,出了故障你在几百台里靠 IP 找机器,那才叫遭罪。

时间同步别跳过。日志时间戳不准,事后排查等于两眼一抹黑,尤其涉及“几点几分断的”这种问题,时间对不上就没法关联多个设备的日志。

3.2 划 VLAN、配 Access 端口

假设这台接入交换机下挂办公终端,规划 VLAN 10 办公、VLAN 20 语音、VLAN 99 管理。先建 VLAN,再往端口上挂。

configure terminal vlan 10 name office vlan 20 name voice vlan 99 name mgmt exit

然后配 Access 口。假设 1 到 20 口接办公 PC:

interface range GigabitEthernet0/0/1-20 switchport mode access switchport access vlan 10 spanning-tree portfast no shutdown exit

这里portfast(有的体系叫边缘端口)值得单独说一句。接终端的口不会有环路风险,开启之后端口 up 立刻进入转发状态,跳过 STP 的监听学习阶段,终端拿地址能快十几秒。不开的话,用户感觉就是“插上网线要等半天才能上网”,投诉率极高。但只对确认接终端的口开,级联口绝对不能开,否则环路保护就失效了。

语音口一般配成 Access 挂 voice VLAN,或者用 Hybrid 让语音和数据分别走不同 VLAN。实际部署里更常见的是 IP 话机串接 PC 的方式,话机自己打 voice VLAN 标签,PC 的无标签流量走数据 VLAN,这需要在端口上同时指定两个 VLAN。这块配置各厂商差异较大,建议照着自己设备的配置手册来,别凭记忆套。

配完一定要验证:

show vlan brief show interface switchport

show vlan brief看 VLAN 建没建对、端口有没有真的加进去;show interface switchport看单个口的模式、PVID、允许 VLAN。我养成的习惯是每配完一组口就核对一次,别一口气配完几十个口再回头查,出了错根本不知道是哪一步偏的。

3.3 上行 Trunk 配置与放行规则

上行口是这台接入交换机连汇聚的链路,通常配 Trunk 并做链路聚合。假设用两个万兆口做聚合,放行 VLAN 10、20、99。

interface range TenGigabitEthernet0/0/49-50 switchport mode trunk switchport trunk allowed vlan 10,20,99 switchport trunk native vlan 999 channel-group 1 mode active exit

几个要点。第一,允许列表要显式写全,不要图省事用all,一是安全上收窄暴露面,二是避免不必要的广播泛洪穿过上行。第二,Native VLAN 改成一个不承载业务的空闲 VLAN(上面例子里的 999),两端必须一致。第三,聚合模式两端要匹配,主动/被动或者静态捆绑,一边主动一边被动能协商上,两边都被动就起不来,这是聚合不通的头号原因。

聚合起来之后,别以为就万事大吉。要确认聚合组真的成了、成员口都在转发:

show etherchannel summary show interfaces trunk

show interfaces trunk这张表特别值得看,它会列出每个 Trunk 口允许的 VLAN、活动的 VLAN、以及 Native VLAN,两端对一遍,能省掉大量“某个 VLAN 就是不通”的排查时间。

带宽这块也说一句。两个万兆聚合不等于 20G 单流带宽,聚合是按流哈希分流的,同一条 TCP 流只会走其中一条成员链路。所以别指望聚合能解决单流大带宽需求,它解决的是多会话并发的总带宽和链路冗余。

3.4 管理面:管理 VLAN、SSH、时间与保存

管理面配置的原则是:能远程管,但不给别人管。管理 VLAN 单独开,只允许管理员网段访问,ACL 收口。

interface Vlan99 ip address 10.99.0.11 255.255.255.0 no shutdown exit ip route 0.0.0.0 0.0.0.0 10.99.0.1 username netadmin privilege 15 secret <密码占位> ip domain-name example.local crypto key generate rsa modulus 2048 line vty 0 4 transport input ssh login local exec-timeout 10 0 exit

注意这里<密码占位>不是让你真写这个字符串,实际部署要么用强密码,要么接统一认证。密码策略我一般要求 12 位以上、大小写数字符号混合、定期更换,且不同设备不能复用同一个密码——一台设备泄露导致全网沦陷的案例太多了。

时间同步和管理面是一套的:

clock timezone CST 8 0 ntp server 10.99.0.5

再配个日志服务器把日志推出去,设备本地日志容量有限,重启就没了,推出去才能做长期回溯。

最后保存配置。这一步听着像废话,但我见过太多人配完一堆直接断电,重启回到出厂状态,然后一脸茫然。配置完成、验证通过,立刻保存,并且在变更记录里写清楚改了什么、为什么改、谁改的、什么时候改的。

copy running-config startup-config

3.5 验证清单与抓包核对

配置这东西,“看起来对”和“实际通”是两回事。我固定跑一遍清单:

检查项命令/方法期望结果
VLAN 是否建全查看 VLAN 表规划中的 VLAN 全部存在
端口归属查看端口 switchport 信息模式、VLAN、PVID 符合设计
Trunk 放行查看 trunk 信息两端允许列表一致
聚合状态查看聚合组成员口均为转发状态
MAC 学习查看 MAC 表终端 MAC 出现在预期端口与 VLAN
网关连通ping 网关通,且延迟稳定
跨 VLAN 策略从终端访问对端按设计放通或阻断

抓包核对是最后一环,也是最有说服力的一环。在交换机上做端口镜像,把上行口流量镜像到一个空闲口,接上抓包工具,看三件事:ARP 有没有正常请求和应答、VLAN 标签在 Trunk 上是不是符合预期、DHCP 交互是否完整。我遇到过一个问题查了两小时,最后抓包发现是上行 Trunk 上某个 VLAN 没放行,导致 DHCP 请求根本没到服务器,而show run里那行配置看起来“好像写了”——其实是写在了另一个聚合成员口上。

4. 排障实录:那些年踩过的坑

4.1 VLAN 不通的标准排查顺序

“某个 VLAN 不通”是我被问得最多的一类问题。我的固定顺序是从下往上、分段验证,不跳步。

第一步,确认物理层。端口是不是 up,光模块有没有告警,速率双工有没有协商成半双工(半双工会导致大量冲突和丢包,是个隐蔽杀手)。第二步,确认接入配置。端口模式对不对,access VLAN 是不是规划的那个,PVID 有没有被改过。第三步,确认 MAC 学习。终端 MAC 到底学没学到、学在哪个 VLAN、哪个端口,这一步能直接区分“帧没进来”和“进来了但没转发出去”。第四步,确认 Trunk 放行。两端允许列表、Native VLAN、活动 VLAN 逐个对。第五步,确认三层。网关有没有配、ARP 表里有没有、路由对不对。第六步,抓包定位丢在哪一跳。

这里有个经验:先看 MAC 表再看配置。配置是“应该怎样”,MAC 表是“实际怎样”,两者对不上,问题就出在中间。很多次我一看 MAC 表里终端学在了 VLAN 1 里,立刻就知道是端口 access VLAN 没配或者配错了,根本不用往下查。

4.2 环路、广播风暴与 MAC 漂移

环路是二层网络最凶的故障,没有之一。一根网线两头插在同一台交换机上,广播帧就会无限循环放大,几秒钟能把整台设备的 CPU 打满,网络直接瘫痪。

识别特征很典型:设备 CPU 飙高、端口指示灯狂闪、用户大面积断网、日志里刷 STP 相关告警、MAC 表里同一个 MAC 在两个端口之间反复横跳。看到 MAC 漂移告警,第一反应就该是找环路。

show spanning-tree show mac address-table | include <可疑MAC> show interface counters rate

处置上,STP 是基础防线,必须开,根桥要手工指定在汇聚或核心,别让接入设备随机当根。同时开 BPDU 保护(接终端的边缘口收到 BPDU 就自动 err-disable)和根桥保护(防止下面接入设备抢根)。这两个保护一开,绝大多数误接环路能被自动掐掉。

私接小交换机、私接路由器 LAN 口互连,是环路的两大来源。光靠技术手段拦不干净,还得配合端口安全和用户宣导。我给接入端口做了 MAC 数量限制之后,环路类故障下降了七八成。

万一环路已经发生,先断开可疑链路保命,再查日志定位。别在风暴中慢慢敲命令,设备 CPU 满的时候你连命令行都进不去。

4.3 常见问题速查表

现象可能原因快速验证处置
新机器插上不通端口未 up / VLAN 配错查端口状态与 MAC 表修正 access VLAN
只有某个 VLAN 不通Trunk 允许列表漏配两端对比 trunk 信息补全允许列表
跨设备通信时通时断Native VLAN 不一致对比两端 Native VLAN统一改为空闲 VLAN
网络突然极慢环路、广播风暴看 CPU、MAC 漂移日志断环、查 STP 保护
上电后要等很久才能上网未开边缘端口看端口 STP 状态终端口开启 portfast
大量终端同时掉线MAC 表被打满查 MAC 表项计数收敛下挂设备、扩表
链路聚合起不来两端模式不匹配查聚合组状态统一为主动/被动组合
管理口 ping 不通管理 VLAN 未放行查管理 VLAN 与 ACL放行管理网段

5. 上线之后才想起来的事:安全与运维习惯

5.1 端口安全与未使用端口处理

设备配通只是开始,能不能长期稳住靠的是收口。第一件要做的事是关掉不用的端口,并且划到一个隔离的垃圾 VLAN 里。会议室、空工位那些没人用的口,是外来设备接入的首选入口,不关就是敞着门。

interface range GigabitEthernet0/0/21-48 shutdown switchport access vlan 999 exit

第二件事是端口安全。限制单端口学习的 MAC 数量,超出就触发保护动作(丢弃、告警或者 err-disable)。办公口一般限 1 到 2 个,接话机串 PC 的限 2 个,接小交换机的口限 8 到 16 个。这个数字别一刀切,按实际场景给,给太紧会误杀,给太松等于没限。

第三件事是关闭不必要的服务和协议。闲置的 Web 管理、明文登录、自动发现类协议,能关就关,减少暴露面。这些配置单独看都不起眼,堆在一起就是攻击面。

5.2 配置备份、变更记录与版本管理

我吃过最大的亏,是在一次紧急变更后忘了存备份,设备硬件故障返修回来,配置全没了,靠记忆重建花了整整一天,还漏了几个端口。从那以后我的规矩是:改之前备份,改之后备份,定期备份。

备份不光是存在本地。理想的做法是配置自动定时导出到一台备份服务器,文件名带设备名和日期,保留多个版本。这样出了问题可以 diff 两个版本,一眼看出哪一行被改动了,比人肉回忆快一百倍。

变更记录也别嫌麻烦,至少写清四件事:时间、设备、改了什么、为什么改。我见过太多“配置和文档对不上”的现场,最后谁都不知道那行配置是谁加的、加了干什么用的,删也不是留也不是。有记录,这些问题基本消失。

监控方面,重点关注几个指标:端口流量趋势、端口 up/down 次数(频繁抖动的口往往是线缆或模块要坏)、CPU 和内存、MAC 表项数量、STP 拓扑变更次数。这几个指标能覆盖大部分二层侧隐患,提前发现比事后救火便宜太多。

我个人在实际操作中的体会是,交换机这玩意儿的配置命令本身不难,难点全在“知道自己在改什么”。每敲一条命令之前问自己一句:这条命令改变了哪个判断环节?是改变了帧的标签处理,还是改变了泛洪范围,还是改变了转发状态?能答上来,配置就稳;答不上来,就算当下通了,也只是运气好。