4、以太网交换机原理:交换机的转发逻辑、MAC地址表学习、VLAN基础
交换机这东西,说白了就是一台高速的、多端口的“智能转发器”。它不像集线器那样无脑广播,而是根据数据帧里的目标MAC地址,精准地把数据从正确的端口送出去。我刚开始接触网络时,总觉得交换机就是个“高级版Hub”,直到有一次在数据中心排障,才真正领教了它的转发逻辑有多精妙。
4.1 交换机的核心转发逻辑
交换机的转发逻辑,其实就三句话:查表、决策、转发。但这里面门道不少。
当一台交换机从某个端口收到一个以太网帧时,它会做以下几步:
- 接收帧:检查帧的合法性(前导码、FCS校验)。
- 提取目标MAC:从帧头中取出目标MAC地址。
- 查MAC地址表:在内部的MAC地址表中查找这个目标MAC。
- 执行转发动作:根据查表结果,决定是转发、泛洪还是丢弃。
转发决策的三种结果:
- 明确转发(Unicast Forwarding):表中有匹配项,且入端口与出端口不同。交换机将帧从出端口转发出去。
- 泛洪(Flooding):表中没有匹配项,或者目标MAC是广播/组播地址。交换机会将帧从除入端口外的所有端口转发出去。
- 丢弃(Filtering):表中有匹配项,但入端口与出端口相同。说明目标设备与源设备在同一网段,帧不需要经过交换机转发,直接丢弃。
你想想看,如果交换机每收到一个未知目标就泛洪,那网络里得有多少垃圾流量?所以,MAC地址表的学习机制就变得至关重要了。
4.2 MAC地址表学习机制
MAC地址表是交换机的大脑。它记录了“MAC地址 ↔ 端口”的映射关系。交换机是怎么学会这些映射的呢?答案是:被动学习。
交换机会检查每一个进入端口的帧的源MAC地址。如果这个源MAC不在表中,它就会创建一个新条目:把源MAC和入端口绑定在一起。如果已经在表中,它会刷新该条目的老化计时器。
我记得有一次在园区网割接,一台新接入的服务器死活不通。我排查了半天,最后发现是交换机的MAC地址表老化时间设置得太短,服务器发送的帧间隔稍长,表项就被清除了。从那以后,我养成了一个习惯:对于关键服务器,我会手动配置静态MAC地址表项。
我的经验:MAC地址表的老化时间默认通常是300秒(5分钟)。对于频繁通信的设备,这个时间足够。但对于一些心跳检测或低频通信的设备,建议适当调大老化时间,或者直接配置静态条目。
下面这张图展示了MAC地址表的学习与转发流程:
4.3 VLAN基础:打破广播域
传统的交换机,所有端口默认都在同一个广播域里。这意味着,任何一个设备发送广播帧,所有其他设备都会收到。当网络规模变大时,广播流量会急剧增加,浪费带宽,甚至引发广播风暴。
VLAN(虚拟局域网)就是用来解决这个问题的。它能把一个物理交换机划分成多个逻辑上独立的广播域。不同VLAN之间的通信,必须通过三层设备(路由器或三层交换机)来完成。
我参与过一个大型企业网络改造项目。原来所有员工都在一个扁平网络里,ARP广播和NetBIOS广播满天飞,核心交换机CPU经常飙到80%以上。后来我们按部门划分了VLAN,广播域瞬间缩小,核心交换机CPU负载降到了20%以下。效果立竿见影。
注意:VLAN划分后,不同VLAN之间默认是不能通信的。如果你需要让不同部门的服务器互相访问,必须配置VLAN间路由。千万别以为划了VLAN就万事大吉了。
4.4 VLAN的帧格式与端口类型
为了让交换机识别一个帧属于哪个VLAN,IEEE 802.1Q标准在标准以太网帧头中插入了一个4字节的VLAN标签。这个标签包含一个12位的VLAN ID(VID),取值范围是1到4094。
交换机的端口类型,决定了它如何处理VLAN标签:
| 端口类型 | 典型用途 | 入方向处理 | 出方向处理 |
|---|---|---|---|
| Access端口 | 连接终端设备(PC、打印机) | 接收无标签帧,打上PVID标签 | 剥离标签,发送无标签帧 |
| Trunk端口 | 连接交换机之间、交换机与路由器 | 接收带标签帧(允许列表内) | 保持标签,发送带标签帧 |
| Hybrid端口 | 特殊场景,较少用 | 可接收带标签/无标签帧 | 可配置是否保留标签 |
我的建议:在配置Trunk端口时,一定要使用allowed vlan命令明确指定允许通过的VLAN列表。不要偷懒用allowed vlan all,否则一旦有人创建了新的VLAN,Trunk端口会自动放行,可能带来安全隐患。
4.5 实战:VLAN配置示例
下面是一个简单的VLAN配置示例,假设我们有一台华为交换机,需要创建两个VLAN,并配置Access端口和Trunk端口。
#
# 创建VLAN
system-view
vlan batch 10 20
#
# 配置Access端口(连接PC)
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20
#
# 配置Trunk端口(连接上游交换机)
interface GigabitEthernet0/0/24
port link-type trunk
port trunk allow-pass vlan 10 20
#
# 查看MAC地址表
display mac-address
# 查看VLAN信息
display vlan
配置完成后,VLAN 10和VLAN 20的设备就处于不同的广播域了。它们之间的通信,需要借助三层接口或路由器。
4.6 避坑指南:我踩过的那些坑
- MAC地址表震荡:我曾经遇到一个情况,交换机的MAC地址表在多个端口之间反复跳变。排查后发现是网络中存在环路,导致同一个MAC地址从不同端口被学习到。解决办法是启用STP(生成树协议)。
- VLAN不匹配:两台交换机之间Trunk端口配置的允许VLAN列表不一致,导致某些VLAN的流量无法通过。我建议在配置Trunk后,用
display vlan命令仔细核对两端。 - PVID混淆:Access端口的PVID必须与它所属的VLAN一致。如果不小心把PVID配成了其他值,设备可能无法正常通信。
嗯,关于交换机的转发逻辑、MAC地址表学习和VLAN基础,今天就先聊到这里。这些是网络工程师的基本功,理解了它们,你就能更好地设计和排查网络了。