第二章:交换机工作原理——转发决策与三种转发方式

各位好,我是老张。今天咱们聊聊交换机最核心的活儿——转发决策。说白了,交换机就是个聪明的快递分拣员,它得知道每个包裹该送到哪个门。

我刚开始接触交换机时,总觉得这玩意儿挺神秘。后来拆了几台设备,抓了几次包,才明白它其实就是个高速的、带智能的转发器。嗯,咱们一步步来。

2.1 MAC地址表学习:交换机的记忆

交换机刚启动时,MAC地址表是空的。它就像一个刚入职的快递员,谁都不认识。那它怎么知道数据该往哪发?

靠学习。我记得第一次在实验室里用抓包软件观察这个过程,特别有意思。

当一台主机发送数据帧时,交换机会做两件事:

  • 记录源MAC地址:从哪个端口进来的,就把这个MAC地址和端口号绑定起来
  • 检查目的MAC地址:看看表里有没有这个地址的记录

举个例子,主机A(MAC: AA-AA-AA-AA-AA-AA)从端口1发了个帧给主机B。交换机会在表里记下:

MAC地址             端口
AA-AA-AA-AA-AA-AA   1

这就是学习过程。但注意,MAC地址表是有时效的。我见过不少网络故障,就是因为表项老化时间设置不合理。默认一般是300秒,但如果你网络里设备频繁上下线,建议调短一些。

避坑指南:我曾经遇到过一个案例,某台服务器频繁丢包。查了半天,发现是MAC地址表老化时间太短,导致交换机反复学习、泛洪。后来把老化时间从默认的300秒改到600秒,问题就解决了。

2.2 转发决策:四种基本动作

交换机拿到一个数据帧后,会查MAC地址表。根据查表结果,有四种处理方式:

查表结果 动作 说明
目的MAC在表中,且端口与源端口不同 转发 直接发往对应端口
目的MAC在表中,但端口与源端口相同 过滤 丢弃,因为没必要发回去
目的MAC不在表中 泛洪 除了源端口,所有端口都发一份
目的MAC是广播/组播地址 泛洪 同上,广播必须全网发

你想想看,泛洪其实挺浪费带宽的。所以交换机才要拼命学习,把MAC地址表填满。我见过一些网络,广播风暴就是这么来的——交换机学不过来,就一直泛洪。

核心要点:转发和过滤是交换机的理想状态,泛洪是不得已而为之。网络优化的目标,就是尽量减少泛洪。

2.3 三种转发方式:性能与可靠性的博弈

交换机转发数据帧,不是收到完整帧才处理的。它可以选择不同的时机。这就引出了三种转发方式。

2.3.1 存储转发(Store-and-Forward)

这是最稳妥的方式。交换机把整个帧收完,存在缓冲区里,检查CRC校验,没问题再转发。

优点很明显:错误帧不会传出去。缺点也明显:延迟大。一个1518字节的帧,在百兆环境下,光接收就要花120微秒左右。

我个人习惯在核心层用存储转发。为什么?因为核心层要保证数据质量,宁可慢一点,也不能把坏帧扩散出去。我在某银行数据中心做项目时,所有核心交换机都强制配置成存储转发。

2.3.2 直通转发(Cut-Through)

这个就激进了。交换机只要看到目的MAC地址(前6个字节),就开始转发。延迟极低,但坏帧也会传出去。

直通转发的延迟通常只有几微秒。适合对延迟敏感的场景,比如高频交易。我记得有个客户做量化交易,要求交换机延迟必须低于5微秒,最后只能选直通转发。

注意:直通转发会把CRC错误帧、 runt帧(小于64字节的帧)都传出去。如果你的网络链路质量不好,慎用。

2.3.3 无碎片转发(Fragment-Free)

这是折中方案。交换机收到前64个字节后,才开始转发。为什么是64?因为以太网规定,有效帧最小是64字节。小于64字节的,肯定是冲突碎片。

无碎片转发能过滤掉大部分坏帧,延迟又比存储转发低。我一般在接入层用这个方式。既保证了基本的数据质量,又不会太慢。

三种方式的对比,我整理了个表:

转发方式 延迟 错误过滤 适用场景
存储转发 高(完整帧接收) 完全过滤 核心层、WAN连接
直通转发 低(仅看目的MAC) 不过滤 高频交易、HPC
无碎片转发 中(前64字节) 过滤碎片 接入层、普通办公

2.4 实际配置示例

以思科交换机为例,配置转发方式很简单。但要注意,不是所有型号都支持所有模式。

! 配置存储转发(默认模式)
Switch(config)# interface gigabitEthernet 0/1
Switch(config-if)# switchport
Switch(config-if)# switchport mode access
! 存储转发是默认的,不需要额外配置

! 配置直通转发(部分型号支持)
Switch(config)# interface gigabitEthernet 0/1
Switch(config-if)# switchport
Switch(config-if)# switchport mode access
Switch(config-if)# switchport cut-through

! 查看当前转发模式
Switch# show interfaces gigabitEthernet 0/1
! 输出中会显示 "Store-and-Forward" 或 "Cut-Through"

华为交换机配置类似:

[Switch] interface gigabitEthernet 0/0/1
[Switch-GigabitEthernet0/0/1] port mode cut-through
[Switch-GigabitEthernet0/0/1] display port cut-through
我的建议:如果你不确定该用哪种,就用存储转发。它最安全。等你对网络流量有了深入了解,再考虑优化延迟。

2.5 总结

交换机的转发决策,说白了就是查表、做决定。MAC地址表是基础,学习、泛洪、转发、过滤是四个基本动作。三种转发方式各有优劣,选型时要权衡延迟和可靠性。

嗯,这一章就到这里。下一章咱们聊聊VLAN,那才是真正让交换机变聪明的东西。