一、以太网交换机简介
1.1 什么是以太网交换机?
以太网交换机(Ethernet Switch)是一种用于局域网(LAN)的网络设备,基于MAC地址识别、在多个设备之间进行高效地转发数据帧。它基于以太网协议(IEEE 802.3)工作,通过MAC地址表实现数据帧的智能转发,是现代网络的核心设备之一。交换机作为汇聚中心,将多台数据终端设备连接在一起构成星状结构的网络。
1.2 从 HUB(集线器)到三层交换机
从早期的 HUB(集线器)到 二层、三层交换机,网络设备的演进,本质上是一条越来越聪明的进化路线。区分它们的标准只有一个:能不能看懂 MAC 地址。
- HUB(集线器): 工作在物理层,不能识别 MAC 地址,收到数据就从一个接口进、向其他所有接口出,而且只能半双工 —— 就像对讲机,同一时刻只能有一方说话。它既浪费带宽又限制性能,被淘汰是必然的。
- 二层交换机:工作在数据链路层,能识别 MAC,基于 SMAC 学习、DMAC 转发,可以点对点精确送达;
- 三层交换机: 更进一步,工作在网络层,是具有路由功能的交换机,也就是常说的路由交换一体机。
Tips: 说明一下家用路由器:
- LAN 口 是交换口(二层口),接电脑、打印机等终端设备;
- WAN 口 是路由口(三层口),连 Internet 或上层路由器的LAN口。
所以它其实是「交换机 + 路由器」的组合体。
交换机之所以能取代集线器,靠的不是更快的芯片,而是一张会自己维护、会自己过期的表。它被动地听,默默记,精确地送;记不住就泛洪一次,记下了就从此一对一。所有二层技术 —— VLAN、STP、链路聚合 —— 本质上都是在这张表和这套转发逻辑上做加法和约束。
二、交换机的原理
2.1 交换基础 - MAC地址表
MAC 地址表是交换机手里的通讯录,它只记录一件事:接口 和 MAC 地址的对应关系。
MAC地址表的四个特点:
- 一个 MAC 只能对应一个接口:在同一台交换机上,一个 MAC 只能对应一个接口(同一时刻);
- ** 一个接口可以学习多个 MAC**:接口下面挂了交换机、一个集线器 或 一台设备多个网卡时,一个接口可以学习多个 MAC;
- 表项不断更新: 交换机每次收到数据帧都会基于源MAC刷新 MAC地址表项, 设备换接口后表现奖在收到设备发送的帧后跟着变;
- 表项会老化:长时间没流量就的表项会老化删除, 默认老化时间是300秒;设备下线你,表项不会永远占着位置,这样可以及时腾出表项、适应拓扑变化。
Tips: 一个交换机接口可以学习多个MAC地址。这不是异常,而是以太网交换机一项基础且正常的工作机制。 根本原因是交换机学习MAC是基于“源MAC”,而非“接口类型”:
- 交换机学习MAC地址的逻辑非常直接:从某个接口收到一个数据帧,就把帧的源MAC地址和这个接口的对应关系记录下来。它并不检查这个接口对面连接的是一台电脑、一个集线器,还是另一台交换机。因此,只要从同一个接口收到的数据帧带有不同的源MAC,交换机就会逐一将它们记入MAC地址表,并关联到该接口。
- 从交换机的角度看,MAC地址表是按MAC地址组织的,它只关心“去往某个MAC的帧应该从哪个接口发出”,而不关心那个接口后面到底挂了多少设备。
一个接口可以学习多个 MAC:
-
接口下挂另一台交换机(级联) 这是最典型的情况。当两台交换机通过一个接口级联时,下游交换机上所有终端设备的MAC地址,都会通过这条级联链路被上游交换机的对应接口学习到。因此,上游交换机的级联接口上出现大量MAC地址条目是完全正常的。
-
一台设备配置了多个网卡 如果一台服务器或主机有多个物理网卡,并且都连接到交换机的同一个接口(通过一个内联的集线器或非网管交换机),那么每个网卡的MAC地址都会被该接口学习到。
-
连接集线器(HUB)或非网管交换机 集线器会将所有连接设备的流量从同一个物理接口送出,因此该接口会学习到集线器下所有设备的MAC地址。
-
虚拟化服务器 一台运行多台虚拟机的物理服务器,即使只使用一个物理网卡,每台虚拟机也拥有独立的MAC地址。当这些虚拟机对外通信时,交换机的对应接口就会学习到多个MAC地址。
|
|
2.2 工作原理:学习看源,转发看目的
交换机的全部行为可以用成两句话来概括:
-
交换机的学习机制: 基于 SMAC(Source MAC) 进行学习(创建/维护)MAC地址表,是建立和维护MAC地址表的过程
- 从某一端口收到数据帧;
- 读取该数据帧的源MAC(SMAC);
- 写入MAC表: SMAC <–> 入接口。
-
交换机的转发机制: 基于 DMAC(Destination MAC)查MAC地址表进行数据转发,是使用MAC地址表的过程
- 收到数据帧后,用DMAC查询MAC地址表;
- 查到记录,就从对应接口一对一转发(单播发送);
- 查不到记录(未知单播),则泛洪 ———— 向除接收接口外的其它所有接口发送;
- 如果查到的出接口就是接收接口本身,则直接丢弃。
交换机从来不会主动去问谁在哪里,它是被动偷听的:只要有设备发过一个帧,它就记住这个 MAC 挂在 哪个接口上(GE0/0/X)。
转发时则用目的 MAC 查表:查到就从MAC地址对应的接口发出去;查不到就泛洪(向除接收接口外的其它所有接口发送);如果查到的出接口就是进来的那个口,直接丢弃。
2.3 交换机收到一个数据帧的处理方式
交换机收到一个数据帧只有三种处理方式
- 一对一转发: 单播使用DMAC查询MAC地址表成功,且出接口不等于入接口,从查询到的接口发送出去,精确送达;
- 泛洪:收到 广播帧、组播帧 或 未知单播帧(查表失败), 向除接收接口外的其它所有接口发送;
- 丢弃: 查到的出接口就是接收接口本身,则直接丢弃。
会被泛洪的帧有三类:广播帧(目的 MAC 全 F)、组播帧(目的MAC第一字节最低位为 1,发送给一组设备)、以及未知单播帧(单播查表失败)。泛洪的动作很直白 —— 除接收接口外,向其他所有接口发送。
而丢弃发生在一个容易被忽略的场景:数据帧的接收接口和转发接口是同一个。说明目标就在来的那条路上,没必要再发回去。
Tips: 安全隐患 ———— 未知单播泛洪是交换机最「吵」的行为,也是泛洪攻击能造成大范围影响的原因
2.4 老化时间:默认 300 秒
MAC 表项不会永远保留 —— 默认老化时间是 300 秒(5 分钟)。这个值没有标准答案,要看网络稳定程度和设备表项容量。
调整原则三句话:相对稳定的网络调大(减少泛洪);变化频繁的网络调小(尽快淘汰旧表项);低端设备调小(表项容量有限,加速老化节省资源)。总之按现网实际情况和设备性能来定。
|
|
三、两台 PC 第一次通信:ARP 与交换机怎么配合
- PC1要给PC2发送数据,先判断目标IP是否同网段:同网段则走二层转发(直接发送给目标IP);不同网段需走三层转发(先发送给默认网关[IP网络位与PC的IP相同,主机一般位为 1],请默认网关代为转发)。
- PC1查询自己的ARP缓存,没有查询到PC2或默认网关IP对应的MAC地址,则发起ARP请求。
- ARP请求时广播帧(DMAC=FF-FF-FF-FF-FF-FF),发送到交换机。
- 交换机收到数据帧后先学习,把PC1的MAC地址及接收到该帧的接口记录/更新到MAC地址表中。
- 交换机查询该帧的目的MAC是全F ——> 泛洪: 把该帧发送到除接收接口外的其他所有接口。
- PC2或网关收到此数据帧并识别是到自己 ——> 单播回复 ARP Relpy 给交换机。
- 交换机收到PC2回复的 ARP Relpy,先学习到PC2的MAC对应的接口更新MAC地址表,再精确发送给PC1( ARP Relpy 帧的目标MAC是PC1)。
- PC1 拿到 PC2 的 ARP Relpy 并获取到PC2的MAC存到本地ARP表中,后续给PC2发送数据帧就采用一对一转发,不再泛洪。
三段式:先说 ARP 解析(广播请求 + 单播回应),再说交换机行为(学 SMAC → 查 DMAC → 泛洪),第一次通讯完成、拿到 MAC 后,后续通信走一对一转发,不再泛洪。
另外记住交换机其实有两张表:MAC 地址表负责二层转发(源 IP 和目的 IP 同网段时查它),路由表负责三层转发(源 IP 和目的 IP 不同网段时查它)。三层交换机正是两张表都有,才能既交换又路由。