数据链路层帧格式

image.png MAC地址:用6个字节表示的物理地址 广播地址:FF-FF-FF-FF-FF-FF 协议字段指明网络层使用的是哪种字段

三大功能

  • 封装成帧
  • 透明传输
  • 差错控制 image.png

交换机

交换机是工作在数据链路层中的网络设备,它根据数据包的MAC地址到自身存储的MAC地址中进行匹配查找,根据查找结果在特定端口转发数据,因此交换机是一种单播设备。

工作机制

image.png

静态配置

手工输入MAC地址和端口的映射记录,当网络中有新的终端加入时,需要手动添加

动态生成

利用交换机的地址学习机制自动生成新终端加入网络中,无需手动添加,广泛使用

学习机制

交换机(Switch)工作在 OSI 模型的数据链路层(Layer 2),其核心功能是根据接收到的数据帧的 MAC 地址进行高速点对点转发。交换机的学习机制(Learning Mechanism)是实现“自适应、无须人工干预”的二层转发的核心逻辑。

交换机主要通过二层 MAC 地址表(MAC Address Table,也称 CAM 表)的维护来完成这一过程。

核心工作原理:源地址学习,目的地址转发

交换机的学习与转发机制可以概括为以下四个核心步骤:

  1. 学习(Learning):学习源 MAC 地址
    • 当数据帧从某个端口入站(Ingress)时,交换机会检查该数据帧的源 MAC 地址(Source MAC)。
    • 交换机记录该源 MAC 地址与该接收端口的映射关系,写入 MAC 地址表中,并开启/重置该条目的老化定时器(Aging Timer)。
  2. 查找(Lookup):查找目的 MAC 地址
    • 交换机读取数据帧的目的 MAC 地址(Destination MAC),并在 MAC 地址表中检索是否存在对应的出站端口(Egress Port)。
  3. 转发决策(Forwarding Decisions):根据查找结果处理 根据 MAC 地址表的查找结果,交换机会采取以下三种动作之一:
    • 单播转发(Unicast/Forward): 目的 MAC 存在于表中,且出站端口与入站端口不同。交换机将数据帧精确转发至对应的单播端口。
    • 泛洪(Flooding): 目的 MAC 不在表中(即未知单播帧,Unknown Unicast),或者数据帧本身是广播帧(FF:FF:FF:FF:FF:FF)、组播帧。交换机会将该数据帧复制并发送给除了接收端口之外的所有属于同一 VLAN 的端口。
    • 丢弃(Filtering/Discard): 目的 MAC 在表中对应的出站端口与数据帧接收的入站端口相同。这种情况通常发生在连接了集线器(Hub)的共享介质网络中,交换机会直接丢弃该数据帧,避免冗余链路传输。
  4. 老化与更新(Aging & Aging Out)
    • MAC 地址表在内存(CAM/TCAM)中占用有限空间,且网络拓扑可能动态变化。
    • 老化时间(Aging Time): 默认为 300 秒(不同厂商设备可配置)。
    • 如果在老化时间内没有再次收到来自某 MAC 地址的任何数据帧,对应的 MAC 表项将被自动删除;若在此期间再次收到该源 MAC 的帧,则刷新定时器。

动态学习全流程解析

假设拓扑结构如下:四台主机(A, B, C, D)连接在同一台交换机(Ports 1, 2, 3, 4)上,初始状态下交换机的 MAC 地址表为空。

主机MAC 地址接入端口
Host A00-00-00-AA-AA-AAPort 1
Host B00-00-00-BB-BB-BBPort 2
Host C00-00-00-CC-CC-CCPort 3
Host D00-00-00-DD-DD-DDPort 4

场景 1:Host A 向 Host B 发送数据包

Step 1: Frame Ingress (Port 1)
        Src MAC: AA:AA:AA, Dst MAC: BB:BB:BB
           │
           ▼
Step 2: Learn Src MAC
        MAC Table Update -> [AA:AA:AA -> Port 1]
           │
           ▼
Step 3: Lookup Dst MAC (BB:BB:BB)
        Result: NOT FOUND (Unknown Unicast)
           │
           ▼
Step 4: Flood
        Send to Port 2, Port 3, Port 4 (Exclude Port 1)
  1. 学习: 交换机从 Port 1 收到数据帧,记录 AA:AA:AA <-> Port 1 到 MAC 地址表。
  2. 查找与泛洪: 查找 BB:BB:BB,未命中。交换机对数据帧进行全网段泛洪(Port 2, 3, 4)。
  3. 主机响应: Host C 和 Host D 发现目的 MAC 不是自己,直接丢弃该帧;Host B 匹配成功,接收并准备回应。

场景 2:Host B 响应并回复数据给 Host A

Step 1: Frame Ingress (Port 2)
        Src MAC: BB:BB:BB, Dst MAC: AA:AA:AA
           │
           ▼
Step 2: Learn Src MAC
        MAC Table Update -> [BB:BB:BB -> Port 2]
           │
           ▼
Step 3: Lookup Dst MAC (AA:AA:AA)
        Result: FOUND -> Port 1
           │
           ▼
Step 4: Unicast Forward
        Send ONLY to Port 1
  1. 学习: 交换机从 Port 2 收到 Host B 的响应帧,记录 BB:BB:BB <-> Port 2。
  2. 查找与单播: 查找 AA:AA:AA,命中 Port 1。交换机直接将数据帧单播转发至 Port 1,不再进行泛洪。

此时 MAC 地址表状态:

MAC 地址映射接口老化状态
00-00-00-AA-AA-AAPort 1Active
00-00-00-BB-BB-BBPort 2Active

异常与边缘情况分析

数据链路层的动态变化会导致 MAC 地址表更新及异常行为:

MAC 地址迁移(MAC Move)

当某台主机从 Port 1 物理拔出并插入 Port 3,且继续发送数据包时:

  • 交换机从 Port 3 收到来自 AA:AA:AA 的帧。
  • 交换机会自动更新 MAC 地址表,将 AA:AA:AA 的映射端口从 Port 1 修改为 Port 3,并重置定时器。
  • 安全风险: 在复杂的网络环境下,如果两个端口频繁交替收到相同的源 MAC 地址,可能是网络中出现了二层环路(Layer 2 Loop)或存在 MAC 地址漂移攻击(MAC Spoofing/Flapping)。

MAC 地址表溢出攻击(CAM Table Flooding Attack)

  • 原理: 攻击者向交换机高频发送海量带有随机伪造源 MAC 地址的数据包。
  • 后果: 很快填满交换机的硬件 CAM 表项(一般企业级交换机容量为 8k~128k 条)。MAC 表满后,新的合法通信将无法被学习,退化为未知单播帧,迫使交换机对所有正常通信进行泛洪。
  • 防护手段: 配置端口安全(Port Security)限制端口允许的最大 MAC 地址学习数量,或将 MAC 地址静态绑定。

硬件实现与优化机制

在现代商业级交换机中,MAC 学习机制在 ASIC(专用集成电路)硬件层面实现:

  • 硬件存储介质:CAM / TCAM
    • 使用 CAM(Content Addressable Memory,内容可寻址存储器) 实现 时间复杂度的并行 MAC 表项匹配,极大降低转发时延。
  • VLAN 隔离与独立学习(IVL vs SVL)
    • IVL(Independent VLAN Learning): 现行主流模式。MAC 地址表包含 [VLAN ID + MAC 地址 -> Port]。不同 VLAN 内部学习互不干扰,即使相同 MAC 在不同 VLAN 出现也不会导致冲突。
    • SVL(Shared VLAN Learning): 早期模式。跨 VLAN 共享单一 MAC 表。

MAC-PORT攻击

MAC-PORT攻击是指利用交换机的地址学习机制,发送伪造源MAC地址的数据包,致使交换机学习到错误的MAC地址和端口的映射记录,从而导致通信中断的现象