📡 第二章 彻底理解L2交换机
📄 一句话概括

交换机的转发是交换芯片干的,不是 CPU。CPU 只管「协议」与「管理」。 所以「CPU 100% 但业务正常」是可能的——那是控制面被淹了,数据面照走。

📝 本节和前面几节的关系

02.08 讲完功能,最后四节拆开设备看里面。第一层是「大脑」:控制器。 这一节把「控制面与数据面分离」这件事讲清,它是理解所有网络设备的基础。

一、两个平面

数据面:转发芯片(ASIC)。看帧头、查表、转发。每秒几亿个包。 控制面:CPU。跑协议(生成树、LACP、SNMP)、处理管理请求、维护表项。每秒几万个报文。

两者差四个数量级,所以必须分开。 数据面走硬件,控制面走软件。如果让 CPU 转发,一台千兆口就能把它打满。

二、CPU 高说明什么

数据面跑满不会让 CPU 高。这是最关键的一句。

CPU 高说明「有东西在刷管理面」:协议报文风暴(生成树环路)、大量新地址学习(扫描器)、 SNMP 轮询太勤、广播风暴、镜像流量。

典型症状:CPU 100%,业务正常,但 telnet 不上设备、SNMP 读不到数。 因为 CPU 已经被限速保护住了,转发照走。

三、CoPP:给控制面设限速

交换机保护 CPU 的机制叫 CoPP(Control Plane Policing):给不同协议报文设限速,超了就丢。

为什么必须限速:转发芯片每秒几亿包,CPU 每秒几万包。 只要有千分之一的数据包被送去 CPU,CPU 就挂了。

副作用:CoPP 丢包时协议会不稳。 比如生成树 BPDU 被丢多了,拓扑会误判成「邻居死了」,反而引发震荡。 所以 CoPP 的阈值要按协议的实际报文量配,不能一刀切。

四、动手 Demo:CPU 在忙什么,以及「每秒几百个 ARP」占多少

这段列五类 CPU 任务的触发与判断方法, 再算 1000 个每秒的 ARP 报文占用多少 CPU(按每秒 1 万个协议报文的处理能力)。

for a, b, c in ((u"协议报文", u"生成树 BPDU、LACP、LLDP", u"正常,量小"),
                (u"广播风暴", u"环路或故障网卡", u"端口广播计数暴涨"),
                (u"镜像流量", u"全口镜像时镜像口也过 CPU", u"改成流镜像")):
    T([a, b, c], [0, 0, 0])

实跑输出:

--------------------------------------------------------------------
交换机里的 CPU 不转发数据,那它在忙什么
--------------------------------------------------------------------
**交换机的转发是交换芯片(ASIC)干的,不是 CPU。**CPU 只管「协议」和「管理」这两件事。

**所以 CPU 高是一个很特殊的信号**:数据面跑满不会让 CPU 高,**CPU 高说明「有东西在刷管理面」。**

  CPU 在忙什么       典型触发                     该怎么看
  --------------------------------------------------------------------
  协议报文           生成树 BPDU、LACP、LLDP      正常,量小
  路由/ARP 学习     大量新地址、扫描             量大就要查
  SNMP 轮询          网管每 10 秒读几百个 OID     降低频率
  广播风暴           环路或故障网卡               端口广播计数暴涨
  镜像流量           全口镜像时镜像口也过 CPU     改成流镜像

**算一下「每秒几百个 ARP」占用多少**:

  一个 ARP 报文 64 字节,1000 个每秒就是 64 KB/秒,带宽可以忽略。
**但每个都要 CPU 处理一次**——如果 CPU 每秒只能处理 1 万个协议报文,1000 个 ARP 就吃掉 10%。

**这就是「CPU 被打满但流量不大」的典型场景**:扫描器扫网段、或者某台设备反复 ARP(IP 冲突)。

**交换机保护 CPU 的机制叫 CoPP(Control Plane Policing)**:给不同协议报文设限速,超了就丢,
**保证协议面不被数据面淹掉**。

**为什么必须限速**:转发芯片每秒能处理几亿个包,CPU 只能处理几万个。
**两者差四个数量级**,只要千分之一的数据包被送去 CPU,CPU 就挂了。

**所以「CPU 100% 但业务正常」是可能发生的**——CPU 被限速保护住了,转发照走。
**但这时候你 telnet 不上设备、SNMP 也读不到数**,这才是最先发现的症状。

1000 个 ARP 占 10%——这个比例说明「量不大但持续」的协议报文很容易把 CPU 堆高。 而 1000 个 ARP 的带宽只有 64 KB/秒,完全可以忽略。

这就是「CPU 被打满但流量不大」的典型场景:扫描器扫网段、某台设备反复 ARP(IP 冲突)、 或者生成树在震荡。

最后一行「镜像流量」容易被忽略:某些低端设备的镜像流量要过 CPU, 配了全口镜像之后 CPU 就上去了,而流量本身并不大。

30 秒实验

  1. 查一台交换机的 CPU 利用率与内存利用率。
  2. 看它的管理地址能不能 ping 通。
  3. 数一下端口上每秒的广播报文数。

常见误区

  1. 以为 CPU 高就是流量大。数据面跑满不占 CPU。
  2. 以为 CPU 100% 业务就断了。数据面照走。
  3. 把 CoPP 阈值一刀切。会误丢协议报文。
自测三问(点开对答案) 1. 数据面与控制面分别由什么实现? —— 数据面是交换芯片(ASIC),控制面是 CPU。 2. CPU 100% 但业务正常,说明什么? —— 控制面被协议报文淹了,数据面还在正常转发。 3. CoPP 的作用是什么? —— 给协议报文设限速,保护 CPU 不被数据面淹掉。

下一节:从控制器往下,第一站是 PHY——把比特变成波形。

相关笔记