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

自适应就是「平时走直通、坏帧多了切回存储转发」的自动开关。 它的副作用是延迟会跳变——所以很多现场干脆把它关掉。

📝 本节和前面几节的关系

上一节把三种方式比完了,这一节讲它们怎么自动切换。 这是 2000 年代交换机的一个卖点功能,今天的设备上多数已经砍掉了。

一、判据是一条错误率

做法很直接:在一个时间窗里统计 CRC 错误帧数,超过阈值就切到存储转发;错误率降下来再切回直通。

阈值各厂家不同,常见的量级是「每万帧一帧错」。这个数不是标准,是经验值。

为什么用错误率而不是绝对数:流量大小差别太大,用绝对数会在高流量时误判。用比例才可比。

二、副作用:延迟跳变

同一台设备上一会儿直通一会儿存储转发,延迟会跳。短帧下差几倍,长帧下差上百倍。

对延迟敏感的应用来说,跳变比「一直慢」更难处理:超时设置是按最坏情况留的,一跳动就超时; 而一直慢的话,超时值调大就好了。

所以很多现场直接关掉自适应、固定存储转发。 稳定比最优更重要——这是运维里反复出现的取舍。

三、别和「速率自适应」混了

两个「自适应」是两回事,名字撞了但没关系:

自适应转发(adaptive forwarding):切换转发方式。这一节讲的。 自动协商(auto-negotiation):协商速率与双工。02.04 讲的。

看规格书时要分清这两个词:写 adaptive forwarding 的是转发方式, 写 auto-negotiation 的是链路协商。买设备时问错就白问。

四、动手 Demo:六种场景下的模式切换

这段模拟六个时间窗:从空闲到网卡损坏再到修好,按「每万帧一帧错」这个阈值判当前该用哪种模式。

for name, total, bad in windows:
    rate = bad / float(total)
    mode = u"存储转发" if rate >= 1e-4 else u"直通"
    T([name, u"%d" % total, u"%d" % bad,
       u"%.3f%%" % (rate * 100), mode], [0, 0, 0, 0, 0])

实跑输出:

--------------------------------------------------------------------
自适应交换,什么时候自己切回存储转发
--------------------------------------------------------------------
**自适应(adaptive)是直通与存储转发之间的自动开关**:平时走直通图快,
一旦发现坏帧太多就切回存储转发,保住可靠性。

**判据通常是「一个时间窗内的 CRC 错误帧数超过阈值」。**阈值各厂家不同,这里取每 10000 帧 1 帧。

  场景                   窗口帧数     坏帧     错误率     模式
  --------------------------------------------------------------------
  上午空闲               10000        0        0.000%     直通
  上午正常               10000        2        0.020%     存储转发
  下午抓到一个坏网卡     10000        37       0.370%     存储转发
  网卡修好之后           10000        3        0.030%     存储转发
  线被压伤               10000        260      2.600%     存储转发
  换线之后               10000        0        0.000%     直通

**看第 3、5 两行**:坏帧一多就切到存储转发。
**但注意第 4 行**——网卡修好了,错误率降回 0.03%,又自动切回直通了。

**这个来回切换有一个副作用**:同一台交换机上一会儿直通一会儿存储转发,**延迟会跳变**。
对延迟敏感的应用来说,跳变比慢更难处理——所以很多现场干脆把自适应关掉,固定存储转发。

**再说清楚一件事**:这个「自适应」和「端口速率自适应(10/100/1000 自动协商)」是两回事,
名字撞了但没关系。前者是转发方式切换,后者是链路速率协商。
**看规格书时要分清「adaptive forwarding」和「auto-negotiation」。**

第 3、5 两行切到存储转发:坏帧一多就切。第 4 行又切回直通——网卡修好了,错误率降回 0.03%。

这个来回切换正是延迟跳变的来源。表里看不到的是:切换的那一瞬间, 同一台设备上不同端口的转发方式可能不一样——对端到端时延的一致性来说,这是最坏的情况。

最后一行「换线之后」回到 0 错误率,说明物理层问题解决了。 注意「线被压伤」那行错误率 2.6%——这么高的错误率下,其实已经不是「要不要直通」的问题了,是「该去换线」。

30 秒实验

  1. 在交换机规格书里找有没有「自适应转发」这个功能。
  2. 查一下端口的 CRC 错误计数,看是不是 0。
  3. 想一想你的业务能不能接受延迟跳变。

常见误区

  1. 把自适应转发当成自动协商。两个完全不同的东西。
  2. 以为自适应一定更好。它带来延迟跳变。
  3. 以为错误率高就该切模式。高错误率该去修物理层。
自测三问(点开对答案) 1. 自适应交换的判据是什么? —— 一个时间窗内的 CRC 错误帧比例,超过阈值就切存储转发。 2. 它为什么用比例而不是绝对数? —— 流量大小差别大,绝对数在高流量时会误判。 3. 自适应转发与自动协商分别管什么? —— 前者管转发方式,后者管链路速率与双工。

下一节:全双工和半双工——这是本章最实用的一节,因为配错就会出怪事。

相关笔记