优化硬件配置是第一步
网桥转发速度慢,很多时候不是软件设置的问题,而是硬件本身就扛不住。比如你用的路由器或交换机芯片性能弱,内存小,哪怕设置调得再精细,跑满100M宽带都吃力。特别是家里接了十几台设备,还有监控摄像头、NAS这些持续传输数据的家伙,老设备根本忙不过来。换一块支持千兆转发的网桥设备,或者使用专用的工业级网桥模块,能直接看到延迟下降、丢包减少。
关闭不必要的过滤和日志记录
有些网桥默认开启MAC地址过滤、ARP监控或者流量日志记录,这些功能虽然安全,但每收到一个数据包都要查一遍规则表,相当于给每个快递包裹盖三道章才能放行。如果你的网络环境比较干净,比如家庭或小型办公室,可以考虑关闭这些附加检查。以Linux下的bridge-utils为例,避免启用brctl setageing或过多的ebtables规则。
brctl setageing br0 300
ebtables -t filter -F这样能让转发流程更轻快,尤其在高并发小包场景下效果明显。
调整MTU值匹配网络链路
如果网桥两端的物理网络MTU不一致,比如一端是1500,另一端是1492(常见于PPPoE拨号),就会频繁分片重组,拖慢转发效率。把整个路径上的MTU统一设成最小公共值,能减少这类开销。比如在OpenWrt中修改桥接口的MTU:
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option mtu '1492'改完之后,视频流和在线游戏的卡顿感会减轻不少。
启用硬件加速功能
现代路由器大多支持硬件转发加速,像Intel的DPDK、Marvell的DPA、或者国产芯片的fast path机制。只要系统支持,务必打开。例如在某些基于MT7621的设备上,加载switch-fdb模块并启用flow-offload:
insmod switch-fdb
nft add table inet flow_offload
nft add chain inet flow_offload forward { type filter hook forward priority 0 \;}
nft add rule inet flow_offload forward oif eth0 ip protocol tcp counter packets 0 bytes 0 flow offload @flowadd开启后CPU占用可能从40%降到10%,转发直接从软件切换到ASIC处理,速度立竿见影。
合理规划VLAN隔离广播域
所有设备都在同一个广播域里,ARP请求、组播消息满天飞,网桥就得不停学习和泛洪。通过VLAN把监控、访客WiFi、智能家居分开,等于把一条大马路拆成几个小车道,各自通行互不干扰。配置时注意把VLAN标签处理交给交换机而不是网桥软件来做,否则又回到CPU软处理的老路上。
定期清理老化条目和连接跟踪
bridge转发依赖MAC地址表,时间久了会积累无效条目。设置合理的aging_time,让过时记录及时清除:
echo 300 > /sys/class/net/br0/bridge/ageing_time同时检查conntrack连接数,太多未释放的会拖累整体性能:
conntrack -C
conntrack -F特别是在做NAT桥接时,定期清理能防止表项溢出导致的新连接失败。