自适应就是「平时走直通、坏帧多了切回存储转发」的自动开关。 它的副作用是延迟会跳变——所以很多现场干脆把它关掉。
上一节把三种方式比完了,这一节讲它们怎么自动切换。 这是 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 秒实验
- 在交换机规格书里找有没有「自适应转发」这个功能。
- 查一下端口的 CRC 错误计数,看是不是 0。
- 想一想你的业务能不能接受延迟跳变。
常见误区
- 把自适应转发当成自动协商。两个完全不同的东西。
- 以为自适应一定更好。它带来延迟跳变。
- 以为错误率高就该切模式。高错误率该去修物理层。
自测三问(点开对答案)
1. 自适应交换的判据是什么? —— 一个时间窗内的 CRC 错误帧比例,超过阈值就切存储转发。 2. 它为什么用比例而不是绝对数? —— 流量大小差别大,绝对数在高流量时会误判。 3. 自适应转发与自动协商分别管什么? —— 前者管转发方式,后者管链路速率与双工。下一节:全双工和半双工——这是本章最实用的一节,因为配错就会出怪事。
- ☐ (本节完,下一节 02.04 全双工和半双工)