资讯详情

二层转发与VLAN间通信:从MAC地址表到ACL单向访问

📅 2026/10/8 2:26:17 | 华诺云谱 👁 阅读
二层转发与VLAN间通信:从MAC地址表到ACL单向访问
1. 二层转发的底层逻辑不是路由而是查表、泛洪与老化很多刚入行的朋友容易把“二层转发”和“路由”搞混一听到转发就觉得是交换机在做“路径选择”。其实二层转发根本不选路它只做三件事学习源MAC、查找目的MAC、决定丢弃或泛洪。这三件事每天都在交换机的每一个端口上重复成千上万次原理并不复杂但真正能把它讲透、用对的人并不多。1.1 MAC地址表是转发的唯一依据每一台交换机内部都维护着一张MAC地址表也叫CAM表或转发表。这张表记录了三个核心内容MAC地址、所属VLAN、对应的出接口。交换机转发一个二层帧时唯一的依据就是这张表查得到目的MAC就单播转发查不到就泛洪查到源MAC是自己某个接口才可能丢帧防环回。MAC地址表的建立不需要手动配置完全靠“学习”自动完成。举个例子主机A接在交换机的GE0/0/1口当它发出第一个帧时交换机会提取帧头里的源MAC地址把它记录到表里并绑定GE0/0/1口。这就是“源MAC学习”。所有转发的正确性都建立在每个MAC只被学到正确端口这一前提上一旦这个前提被破坏比如环路、接错线、伪造MAC二层转发就会出现各种诡异故障。1.2 一个完整的数据帧在交换机内部的旅程我习惯把二层转发拆成四个步骤排查时按这个顺序捋基本不会漏接收与校验端口收到一个以太网帧先查帧校验序列FCS是否正确错误帧直接丢弃。学习源MAC提取源MAC更新MAC地址表。如果这个源MAC已经存在但端口不同表项会被更新到新端口这就是“MAC漂移”的由来。查找目的MAC用目的MAC查MAC地址表。执行动作查到了就往对应端口单播转发查不到就在这个帧所属VLAN内的所有端口泛洪除接收端口外如果目的MAC是广播地址或组播地址同样需要泛洪。正常业务中绝大多数帧是单播帧所以只要MAC表完整转发效率非常高。但很多人忽略了第一次通信时由于MAC表还没有目的地址表项帧必然是泛洪的。这也是为什么在大型广播域里新设备上线瞬间会产生一波广播/泛洪流量。等通信双方互相学习完MAC后续帧才转为精确单播转发。1.3 老化时间与反复学习的实战含义MAC地址表不是永久保存的每条表项都有老化时间。华为、H3C以及绝大多数主流交换机默认老化时间是300秒思科也是类似部分型号默认为300秒或可调。这意味着如果一台设备超过5分钟没有任何流量它的MAC表项就会被清掉下一次通信需要重新泛洪学习。这个机制平时没什么存在感但在排查“断断续续、时通时不通”的问题时非常关键。我遇到过一台服务器在夜间备份时总是延迟很高后来发现是因为备份窗口里服务器基本只收包不发包MAC表项老化后回程流量一直在泛洪导致网络质量波动。解决办法很简单对关键服务器的MAC表项做静态配置或者临时调长老化时间比如用mac-address aging-time 600华为/H3C命令这类手段处理。2. VLAN与广播域二层转发为什么天然被“圈”在VLAN内二层转发的另一个核心特征是“广播域”。在没有VLAN的纯二层网络中一台设备发广播广播会送到交换机上除源口外的所有端口。接入设备一多广播流量互相干扰安全性也几乎没有。VLAN的出现就是用来切分广播域的每个VLAN就是一个独立的广播域二层帧只能在同一个VLAN内部转发。2.1 Access口与Trunk口在转发时的真实差异每台交换机端口都有链路类型最常见的是Access接入口和Trunk干道口。两者的本质差异不是“能不能传多个VLAN”这么简单而是帧如何处理VLAN标签802.1Q TagAccess口端口划分给一个固定VLAN通常接终端设备。发往Access口的帧不带Tag进入Access口的帧会被交换机打上该端口所属VLAN的Tag。Trunk口端口允许传输多个VLAN的帧帧本身携带802.1Q Tag交换机通过Tag识别帧属于哪个VLAN才能把帧正确转发到对应VLAN内的端口。因此Trunk口上能同时跑多个VLAN靠的不是什么魔法而是帧里的VLAN ID标记。Access口则简单粗暴一个口一个VLAN进出都打统一标签或去掉标签。搜索热词里提到“接入配置access后2个PC可以互通”“接入口配置trunk并放通VLAN”这两句话其实描述的是同一个场景的正反两面两个PC接入同一交换机的Access口且属于同一个VLAN自然互通如果这两个PC的接入端口被配成Trunk还想互通就要求Trunk放通正确的VLAN而且对端设备比如另一个交换机也必须以Trunk方式对接标签才能生存传递。2.2 同一个VLAN内的通信到底怎么通假设交换机上有两个PCPC-A和PC-B都在VLAN 10。PC-A发一个帧给PC-B帧头带上VLAN 10的Tag或由Access口打上Tag交换机在VLAN 10的范围内查MAC表找到PC-B的MAC对应端口后转发过去。整个过程完全没有IP层的参与哪怕两台PC的IP不在同一网段只要二层通帧也能到对方手里但对方会因为IP不匹配而丢弃——这就是“二层通、三层不通”的典型场景二层转发只看MAC和VLAN不看IP。这一点必须记住因为在排查问题时非常容易把人带偏你从PC-A ping PC-B如果两台PC IP不同网段ping不通是很正常的但很多人的第一反应是去查交换机配置其实二层根本没毛病。真正的问题是三层网关和路由缺失。2.3 跨VLAN通信为什么一定要上三层VLAN把广播域隔离了同时也把二层转发圈死了。跨VLAN的帧绝不会被交换机“顺便”转到另一个VLAN——这样做等于撕裂了VLAN的隔离边界。所以跨VLAN通信必须借助三层设备也就是路由。常见的实现方式有三种低成本方案是路由器转发传统方案是单臂路由路由器子接口主流方案是三层交换机上配置VLANIF接口实现VLAN间路由。关于单臂路由多说一句很多教程喜欢用它演示VLAN间通信但实际生产场景中单臂路由存在吞吐瓶颈所有跨VLAN流量都挤在一个物理链路和路由器CPU上所以只适合小规模实验环境。真正的生产环境稍维护一点的网络都会用三层交换机来做VLAN间路由直接在每个VLAN上配置VLANIF接口作为网关。3. 跨VLAN通信的门槛网关、ARP与三层交换机的配合跨VLAN通信是“二层转发三层路由”的联合动作。很多人卡在这里是因为没搞清网关和ARP在这个过程中到底扮演了什么角色。3.1 网关的作用替终端把帧“递”给路由器假设PC-A在VLAN 10IP 192.168.10.2PC-B在VLAN 20IP 192.168.20.2两台PC要通信。PC-A发现目的IP192.168.20.2和自己不在同一网段就知道不能直接二层发给PC-B而必须把帧发给网关192.168.10.1——也就是三层设备上VLAN 10的接口地址。这个网关地址就是PC-A眼中“负责帮它跨网段转发的那个设备”。所以PC-A发出的数据帧目的MAC是网关的MAC目的IP是PC-B的IP源则是PC-A自己的MAC和IP。交换机收到这个帧后按二层规则转发——把帧送到网关所在端口三层交换机上大概率就是VLANIF接口对应的端口或VLAN内端口。这其实还是一个二层转发过程只是“目的MAC”变成了网关的MAC。3.2 ARP在这个过程中的关键位置这里出现一个隐蔽环节PC-A怎么知道网关的MAC答案是发ARP请求。ARP请求是一个广播帧目标MAC是全FFFFFFFFFFFFF在VLAN 10内泛洪网关收到后回复自己的MAC地址。PC-A拿到网关MAC之后才能封装出那个“目的MAC网关MAC”的数据帧。同样网关要转发数据给PC-B时也需要知道PC-B的MAC。它会在PC-B所在的VLAN 20里发ARP请求拿到PC-B的MAC后再封装帧转发过去。所以每一次跨VLAN通信外表看是IP路由在导本质上是三层设备在替两端做“ARP中介”。如果中间某个环节ARP失效比如VLANIF接口没启用、网段掩码配错、物理链路不通通信就会卡死而二层转发层面看起来一切正常。3.3 三层交换机的转发细节一次路由多次交换三层交换机处理跨VLAN流量时有个经典机制“一次路由Route once多次交换Switch many”。第一个数据包到达三层引擎后三层交换机会解析路由并学到下一跳的MAC信息然后在硬件转发表中直接建立一条“IP转发捷径”如华为的硬件路由表 / 思科的CEF表。后续同一条流的数据包不需要再上送CPU做路由查询直接按硬件表项二层封装转发转发速度可以做到线速。这就是为什么三层交换机比传统路由器二层交换机的组合更流行。但要注意三层交换机的VLANIF接口必须处于Up状态并且两个VLAN之间要有可达路由否则即使二层MAC表学得再好跨VLAN流量也是到不了对端PC的。这里顺带提一个常见故障华为交换机接思科三层交换机包无法转发。我在实际工作中遇到过好几次原因往往不是二层配置错误而是三层路由协议或VLANIF接口配置不匹配。比如华为侧把某个VLANIF配置了不同网段思科侧用另一个网段两边路由表互相不可达或者两边Trunk放通的VLAN列表不一致导致某些VLAN的包在Trunk上被直接丢弃。排查时先确认二层通不通在两端交换机上互相ping VLANIF地址二层通了再查三层路由通告和策略这个顺序千万不要倒。4. ACL单向访问的配置真相二层只能通控制必须落到三层搜索热词里出现“华为交换机ACL单向访问不管用”“如何让A能访问B但B不能访问A”这个问题我几乎每个月都会遇到。很多人把ACL配在了接口的入方向结果要么两边都通要么两边都不通就觉得很邪门。4.1 为什么二层转发机制与ACL“单向”相悖二层的转发是双向的不是有意为之的——而是因为二层转发只看MAC和VLANMAC地址表本身就包含双向通信的记录。交换机为了实现双向通信必须让A到B和B到A的帧都能被正确转发。你如果在二层交换机上配置一个VLAN内的ACL想实现“A到B通、B到A不通”就等于要求交换机在转发B的回包时丢弃它——这不光是策略问题更是协议行为的底层逻辑问题TCP/IP通信是请求-响应模型B给A的回包是本次通信的正常组成部分不是独立业务。因此真正的“单向访问”控制必须放在三层也就是通过ACL控制转发决策而不是二层转发。在三层交换机上ACL作用于一个VLANIF接口的入方向或出方向它检查的是IP五元组源IP、目的IP、协议、源端口、目的端口而不是MAC表。还有一点想提醒即使在三层单向ACL也未必是“A能访问B、B不能访问A”这么简单而是要区分“访问”和“响应”。比如你想让A能访问B的Web服务而B不能访问A的任何服务你可以在到B方向的ACL放行A访问B的流量源A到目的B的80端口同时在B到A方向的ACL拒绝其他流量。这样A发起请求、B返回响应响应属于已经建立的会话通常用状态化防火墙才行纯ACL是无状态的需要设计好两方向的规则否则会拦掉正常响应。4.2 华为交换机单向访问的配置示例下面给一个在华为交换机上实现“A192.168.10.2能访问B192.168.20.2但B不能访问A”的经典配置思路。假设三层交换机上VLAN 10和VLAN 20均已配置VLANIF接口并且转发已通# acl number 3001 rule 5 permit ip source 192.168.10.2 0.0.0.0 destination 192.168.20.2 0.0.0.0 rule 10 deny ip source 192.168.20.2 0.0.0.0 destination 192.168.10.2 0.0.0.0 # interface Vlanif10 traffic-filter inbound ip-group 3001 rule 10 #需要注意的点有三处一是ACL规则编号的顺序很关键华为ACL按规则号从小到大匹配先匹配先生效二是在VLANIF 10的入方向拒绝B到A的流量这样B发往A的包在到达VLANIF 10之前就被丢弃三是这里只是基础配置生产环境往往还需要放行ARP、DHCP等协议否则会造成额外的“通则不通”问题。4.3 双向通信与状态化防火墙的边界我还要强调一个概念传统ACL是无状态的。你放行了“A→B的TCP 80端口”B返回的SYN-ACK包源端口是80目的端口是A的随机端口如果不放行对应方向回包就会被自己的ACL拦掉。所以“单向访问”要实现得优雅很多情况下需要借助高级ACL如华为的advanced ACL可以匹配TCP的established标志位或直接上防火墙做状态化会话处理。交换机自带的ACL适合做粗粒度的隔离不适合做精细的会话级双向控制。说白了二层转发决定“能不能通到端口”三层ACL决定“这个包允不允许被路由”防火墙决定“这个会话合不合法”。三者分工不同不要指望用一个二层交换机的ACL解决所有问题。5. 实战排查技巧从交换机接口ping到DHCP、再到MAC表与环路问题排查交换网络故障最忌讳一上来就重启设备或乱改配置。我习惯按“物理层→链路层→网络层→上层业务”逐层排查。这里把搜到的高频排查问题集中展开讲。5.1 从交换机指定接口发起pingH3C/华为的用法很多人调试网络时需要在交换机上发ping测试但默认ping走的源地址是交换机的管理地址或路由出接口地址有时候并不是你想要的。H3C交换机可以用ping -a指定源地址在华为交换机上同样支持ping -a 192.168.10.1 192.168.20.1这个命令的作用是指定源IP为192.168.10.1通常是VLANIF 10的地址去ping 192.168.20.1。如果通说明VLANIF 10到VLANIF 20之间的三层链路正常如果不通再检查VLANIF接口up状态、路由表和ACL策略。注意ping -a只用于三层接口测试不能用来指定物理端口——因为三层ping基于IP栈与具体物理端口无直接关系。如果你确实想测试某个二层端口连出去的那条链路上的设备更直接的做法是在该端口下配一个临时的三层接口地址把Access口临时改成三层口或者用loopback测试思路。不过生产环境不建议轻易改端口类型宁可接线测试仪或查对端设备状态。5.2 查看DHCP配置排查“设备拿不到地址”的标准动作内网存在DHCP服务器时交换机做的基本工作是透传广播。但“有物理DHCP服务器无法获取IP”的案例我总结下来几乎都是以下几个原因DHCP服务器与客户端不在同一广播域而交换机没有做DHCP Relay交换机端口开启了DHCP Snooping把合法服务器的响应当非法帧丢弃VLAN或Trunk配置错误DHCP Discover广播没送到服务器所在VLAN服务器和客户端之间有ACL过滤了UDP 67/68端口。华为交换机上查看DHCP相关配置常用命令如下display dhcp snooping user-binding summary // 查看DHCP Snooping绑定表项 display dhcp relay interface Vlanif 10 // 查看DHCP Relay配置 display dhcp server statistics // 查看DHCP服务器统计如果该交换机是DHCP Server我看到很多人问“华为交换机查看dhcp配置”时其实分不清“交换机自己是DHCP Server”和“交换机透传DHCP”这两种场景。如果交换机自己分配IP小网络常见用display ip pool查看地址池和租约如果交换机只是二层透传重点检查VLAN放通和DHCP Snooping信任口配置。我遇到过最隐蔽的一次故障DHCP Snooping默认开启管理员在接入端口下忘了配dhcp snooping trusted合法服务器响应被当伪造报文丢弃终端分配不到IP排查了一下午才发现是这个原因。5.3 二层环路与交换机死机的核心原因“交换机死机”“网络瘫痪”这类问题大概率是二层环路引发的广播风暴。二层没有TTL机制一个广播帧如果遇到环路会在交换机之间反复转发、指数级膨胀最终占满所有端口带宽让交换机CPU被中断风暴打满。表现就是设备疯狂丢包、远程登录极慢甚至掉线、交换机指示灯狂闪、连接console查看发现CPU使用率100%。排查环路最直接的证据是MAC地址表漂移。正常网络里每个MAC只会出现在一个固定端口如果某个MAC表项在短时间内频繁在两个端口之间跳变说明这两个端口构成环路或用网线/环路器接在了一起。华为交换机查看MAC漂移的命令display mac-address flapping也可以看接口统计比如display interface GigabitEthernet 0/0/1观察入方向广播与单播比例是否异常。解决环路的核心不是拔线而是启用STPRSTP/MSTP让生成树协议自动阻断冗余链路。很多小型网络为了省事不配STP这是把自己的网络放在一个随时会爆炸的定时炸弹上。6. 光口链路设计聚合还是主备二层转发的可靠边界再聊一个和二层转发直接相关的部署话题交换机光口到底是做链路聚合还是主备。搜索热词里频繁出现这个问题说明很多人在做网络规划时拿不准。6.1 链路聚合与主备的本质区别链路聚合Link Aggregation如LACP/静态聚合是把多个物理口绑成一个逻辑口提升带宽并实现负载均衡。它有一个前提两端设备必须都支持并正确配置聚合且聚合模式静态/动态一致。如果两端配置不一致比如一端是LACP动态聚合、另一端是静态聚合就会出现“通一下断一下”的尴尬现象。主备模式比如STP的阻塞状态则是同一时刻只让一条链路转发另一条处于备份状态故障后切换。它的好处是配置简单、不需要对端配合协议缺点是带宽只有一链路浪费冗余链路。注意一个容易犯错的地方链路聚合只能在二层或三层接口层面绑定相同速率、双工模式、VLAN配置的端口。混插不同速率的光模块做聚合虽然有时也能起来但稳定性差我建议直接避免。6.2 二层转发表如何看聚合配置链路聚合后MAC地址表项对应的出接口就不再是具体物理口而是聚合口的逻辑名如Eth-Trunk 1。转发时流量根据哈希算法在聚合组成员口之间分担。所以如果你用display mac-address查看时发现出接口变成了Eth-Trunk不要奇怪这是正常的。排查聚合链路问题时重点检查两件事display eth-trunk 1 // 查看聚合组成员状态 display mac-address interface Eth-Trunk 1 // 每次学习都走逻辑口如果发现成员口处于Down状态或协议不一致要立刻检查物理模块是否插稳、两端报文协商是否成功。还有一个经常被忽略的细节二层聚合和三层聚合的配置方式不同。二层时先创建Eth-Trunk再把物理口加入最后配VLAN接口三层时需要先把物理口改成三层模式再聚合。6.3 什么样的网络适合聚合什么样的适合主备我的个人建议是核心到汇聚、汇聚到接入的链路流量模型为“多对多”时优先用链路聚合提升总带宽并降低单点故障风险。服务器双网卡接入交换机时除非服务器支持网卡绑定并和交换机做配套LACP否则宁可用主备模式免得服务器侧不配合导致整个链路不稳。对于两台设备间只跑两条10G光口、对带宽需求不高的场景做主备更省心——毕竟备份链路平时不承载流量故障切换也快。之前处理过一个边缘交换机下接监控网络的案例光口做聚合后发现监控码流反而出现了抖动排查后确认是交换机哈希算法对大量小包视频RTP流的负载均衡不生效流量全挤在一个成员口上。把聚合改成两个独立二三层链路STP主备后问题消失。做IT网络设计不要为了“高大上”盲目聚合。7. 从二层转发的角度看设备选型与网络规划说了这么多最后把视野稍微放远一点做网络规划和设备选型时二层转发能力其实是决策的重要维度但很多人只关心端口数量和速率忽略了一些转发层面的指标。7.1 转发带宽与缓存被低估的两个参数交换机都会标注“交换容量”“包转发率”。交换容量决定了设备内部总线或交换芯片能处理的总带宽包转发率决定每秒能转发多少包通常用Mpps表示。选型时要算一个账接入设备数量×每台平均业务流量再加上30%左右的余量不能只看端口是多少G还得看核心交换芯片是否能扛住并发。另一个被低估的参数是缓冲Buffer。二层转发遇到瞬时拥塞时数据包会先缓存在端口缓冲里缓冲不足就会直接丢包。视频监控、语音通话这类突发小包流量尤其吃缓存。同样标称48口千兆的两台交换机芯片缓存一个512KB、一个4MB在监控大流量场景下的表现会差出不少。7.2 千兆交换机与三层交换机的分界“千兆交换机”这个词本身不必然对应二层还是三层很多千兆交换机纯二层只能做接入。如果业务需要VLAN间路由就必须上三层交换机。判断方法很简单查看设备能不能创建VLANIF接口并配置IP。如果不能它就是纯二层设备只能负责接入和VLAN隔离跨VLAN必须另接路由器或三层核心。7.3 小型网络规划的推荐落地方案在我自己维护的小型网络中推荐的架构是核心用一台三层交换机支持24口千兆4个万兆光口各个接入交换机用二层千兆交换机通过光纤Trunk上联到核心。核心做VLAN间路由、DHCP Relay如有必要、ACL策略。接入层全部启用RSTP冗余链路做聚合或主备。这套方案几百人的办公网络基本够用而且故障面小、排查路径清晰。如果你正在学习或备考网络认证我的建议是不要只背命令而是先在模拟器如eNSP里把“二层交换机VLAN单臂路由三层交换VLAN间路由ACL”这一整个链路搭一遍把数据包的走向一步步追出来。等到你看到一个ping不通的现象能直接从“二层还是三层、表项还是策略”这个维度去定位你就真正理解了交换机二层转发而不只是记住了几个命令。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑