交换机基础回顾:从工作原理到ACL

各位同学,咱们今天聊聊交换机的基础。别觉得基础就简单,我做了这么多年网络,发现很多问题恰恰出在最基础的地方。这一章,我带你重新梳理一下交换机的核心机制。

一、交换机工作原理:它到底在干什么?

交换机说白了,就是个二层的转发设备。它不关心IP地址,只看MAC地址。你想想看,一台交换机刚上电的时候,它其实是个「傻子」——谁在哪儿它完全不知道。

那它怎么学呢?靠的是MAC地址学习。当一个数据帧从某个端口进来,交换机会把源MAC地址和这个端口号记下来,存到MAC地址表里。下次再有发往这个MAC的数据,它就知道该从哪个端口出去了。

我记得有一次在数据中心排障,发现某台服务器间歇性丢包。查了半天,原来是MAC地址表震荡——两个端口轮番收到同一个MAC的帧,交换机就一直在更新表项,导致转发不稳定。嗯,这种坑踩过一次就忘不了。

转发决策分三种情况:

  • 已知单播:MAC表里有记录,直接转发到对应端口
  • 未知单播:MAC表里没有,那就广播到所有端口(除了接收端口)
  • 广播/组播:同样泛洪处理

核心要点:交换机的本质就是「学习-转发-老化」这三个动作的循环。MAC表老化时间默认一般是300秒,我习惯在关键链路上调短一些,比如120秒,这样拓扑变化时收敛更快。

二、VLAN:把一台交换机变成多台

VLAN这东西,说白了就是逻辑隔离。没有VLAN的时候,整个二层网络是一个广播域,一台设备发ARP,全网都能收到——你想想看,几百台设备一起广播,那画面太美我不敢看。

VLAN的出现解决了这个问题。它把交换机端口划分成不同的组,每个组就是一个独立的广播域。VLAN 10的设备永远收不到VLAN 20的广播帧。

我个人的习惯是:管理用VLAN 1(虽然不推荐,但很多老设备默认就是),业务按功能划分。比如:

VLAN ID 用途 说明
10 服务器前端 对外提供服务
20 数据库后端 内部数据交互
30 存储网络 iSCSI或FC
99 管理网络 带外管理

这里有个坑:Trunk端口。如果你要让多个VLAN跨交换机通信,就必须用Trunk。Trunk链路上走的帧会打上802.1Q标签,告诉对端这个帧属于哪个VLAN。

我曾经遇到过一个问题:两台交换机Trunk配置好了,但VLAN 10就是不通。查了半天,发现其中一台交换机的VLAN 10根本没创建。记住:Trunk只负责传递打了标签的帧,但VLAN本身必须在交换机上存在才行。

三、STP:防止环路,但别让它拖慢你

STP(生成树协议)是干嘛的?防止环路。你想想看,二层网络里如果出现环路,广播帧就会在环路里无限循环,最终导致广播风暴,整个网络瘫痪。

STP的原理是:通过选举一个根桥,然后阻塞某些冗余端口,让整个网络在逻辑上变成一棵树。没有环路,但有冗余——当主链路断了,阻塞的端口会立即激活。

我记得刚入行时,在一家工厂调试网络。客户说网络时不时卡顿,我一看,STP收敛时间默认是30-50秒。对于工厂的实时控制来说,这简直不能忍。后来我改用了RSTP(快速生成树),收敛时间降到1-2秒,问题就解决了。

STP的端口状态变化:

  • Blocking:阻塞状态,不收发数据
  • Listening:监听BPDU,不转发数据
  • Learning:学习MAC地址,仍不转发
  • Forwarding:正常转发

小技巧:在智能网卡场景下,我建议启用RSTP或MSTP。STP的30秒收敛时间对于高性能计算来说太长了。另外,边缘端口可以配置PortFast,让接入设备立即进入转发状态,省去Listening和Learning的时间。

四、链路聚合:把多条链路绑成一条

链路聚合,也叫Port-Channel或LAG。说白了就是把多个物理端口捆绑成一个逻辑端口。好处有两个:增加带宽提高可靠性

比如你有4个10G端口,聚合后就是40G的逻辑链路。而且如果其中一条物理链路断了,流量自动切换到其他链路上,对上层应用完全透明。

聚合有两种模式:

  • 静态聚合:手动配置,两边端口必须一致
  • LACP(动态聚合):通过协议协商,自动检测链路状态

我个人强烈推荐使用LACP。为什么?因为静态聚合如果有一端配置错了,你可能根本不知道,直到某条链路断了才发现问题。LACP会定期发送报文检测链路健康,一旦发现异常就自动移除故障端口。

实战经验:我曾经在数据中心做链路聚合,发现流量分布不均匀。后来查了哈希算法——默认是基于源MAC+目的MAC的哈希。如果所有流量都是同一对MAC通信,那哈希结果永远一样,所有流量都走同一条链路。解决办法是改用基于IP或端口的哈希,或者增加哈希因子。

五、ACL基础:控制谁可以访问什么

ACL(访问控制列表)是交换机上的防火墙。它根据规则匹配数据包,然后决定是允许还是拒绝。

ACL分两种:

  • 标准ACL:只检查源IP地址
  • 扩展ACL:检查源IP、目的IP、端口、协议等

配置示例:

# 标准ACL:只允许192.168.1.0/24网段访问
access-list 10 permit 192.168.1.0 0.0.0.255
access-list 10 deny any

# 扩展ACL:允许特定主机访问Web服务器
access-list 100 permit tcp host 10.0.0.1 host 192.168.2.100 eq 80
access-list 100 deny ip any any

这里有个关键点:ACL是顺序匹配的。一旦匹配到某条规则,就不再往下检查了。所以规则的顺序非常重要。我习惯把最具体的规则放在前面,最宽泛的放在后面。

我曾经犯过一个低级错误:在ACL最后加了一条deny any,结果把自己管理地址也拦住了,导致远程连不上交换机。后来我学乖了,配置ACL之前一定先确认管理网段不会被误拦。嗯,这种教训一次就够了。

六、这些基础怎么用在智能网卡上?

你可能会问:这些基础知识和智能网卡有什么关系?关系大了。

  • VLAN:智能网卡可以卸载VLAN的封装和解封装,减少CPU负担
  • 链路聚合:智能网卡支持多队列和LACP,实现负载均衡
  • ACL:智能网卡可以在硬件层面做包过滤,比软件防火墙快得多

说白了,智能网卡就是把交换机的这些功能卸载到网卡上,让服务器CPU专心做计算。后面几章我们会深入讲这些卸载技术,但前提是你得先把今天这些基础吃透。

好,这一章就到这里。下一章我们聊聊智能网卡的核心架构,看看它到底是怎么把这些功能做进硬件里的。