1990 年 Kalpana 的 EtherSwitch,卖点是「边收边转」的低延迟。 它证明了一件事:把「查表转发」做成硬件,延迟能做到微秒级。
上一节的年表里,1990 年同时出现 10BASE-T 和第一台交换机。 这一节看那台机器的设计选择——它定下的三种转发方式,今天还在用。
一、它解决的是什么问题
1990 年的困境:10BASE-T 让布线方便了,但集线器把所有人塞进一个冲突域。人一多就撞,一撞就慢。
当时的解法有两种:一是分段(用网桥把网切成几块),二是换成令牌环(重负载下效率高)。
Kalpana 选了第三条路:做一台多端口网桥, 每口独立冲突域,而且用硬件查表做到线速。这就是交换机。
二、三种转发方式
直通(cut-through):只读到目的 MAC 就开始往外出,延迟恒定、与帧长无关。 代价是坏帧也会被转出去。
存储转发(store-and-forward):整帧收完、校验 CRC、再转发。 绝不转发坏帧,但延迟与帧长成正比。
无碎片(fragment-free):只收前 64 字节。 64 字节是以太网最小帧长, 短于 64 的一定是碰撞碎片——所以收满 64 字节就能挡住碎片,同时还比存储转发快。
三、为什么今天默认是存储转发
因为 CPU 和缓存都便宜了。几十微秒的延迟不值得用「可能转发坏帧」来换。
什么时候还会选直通:高频交易、行情分发这类场景。 它们要的不是「平均低延迟」,是「恒定低延迟」——抖动比绝对值更致命。
还有一条实践限制:直通要求「出入端口速率相同」。10G 进 1G 出时缓存必然堆积,只能退回存储转发。 所以很多设备写「支持直通」,但只限同速率端口之间。
四、动手 Demo:直通与存储转发,延迟差多少倍
这段按 10 Mbps 与 100 Mbps 两个速率,算三种转发方式各自的延迟。 直通的「要收多少」取 14 字节(帧头),无碎片取 64 字节。
for name, nbyte in ((u"直通 cut-through", 14),
(u"Fragment-free", 64),
(u"存储转发 store-and-forward", 1518)):
t10 = nbyte * 8 / 10e6 * 1e6
t100 = nbyte * 8 / 100e6 * 1e6
T([name, u"%d 字节" % nbyte, u"%.1f 微秒" % t10,
u"%.2f 微秒" % t100], [0, 0, 0, 0])
实跑输出:
--------------------------------------------------------------------
1990 年那台交换机,用「边收边转」把延迟砍掉一半以上
--------------------------------------------------------------------
**世界上第一台以太网交换机是 1990 年 Kalpana 的 EtherSwitch。**它卖的卖点不是带宽,是延迟。
**因为它不整帧收完再转,而是读到目的 MAC 就立刻开始往外发**——这就是 cut-through(直通)。
**算一下两种做法差多少。**10 Mbps 上,前端有 8 字节前导,帧头 14 字节。
做法 要收多少才转 10 Mbps 上的延迟 100 Mbps 上
------------------------------------------------------------------------------------
直通 cut-through 14 字节 11.2 微秒 1.12 微秒
Fragment-free 64 字节 51.2 微秒 5.12 微秒
存储转发 store-and-forward 1518 字节 1214.4 微秒 121.44 微秒
**直通 11.2 微秒,存储转发 1214.4 微秒,差 108 倍。**
**但直通有个致命问题:坏帧也会被转出去。**因为它在收到 FCS 之前就已经发出去了,
根本不知道这一帧是不是坏的。
**所以中间加了第三种做法**:只收前 64 字节再转(fragment-free,也叫无碎片转发)。
64 字节是以太网最小帧长,短于 64 的帧一定是碰撞碎片。
**收满 64 字节,就能保证不会把碎片转出去,**
**同时还能挡住大部分冲突产生的垃圾。**
**代价还是有的**:真正的 CRC 错误要整帧收完才知道,fragment-free 照样会放过。
这就是为什么今天的交换机默认全是存储转发:**CPU 和缓存都便宜了,**
**几十微秒的延迟不值得用「可能转发坏帧」来换。**
10 Mbps 上直通 11.2 微秒、存储转发 1214 微秒,差 108 倍。这就是当年那台交换机敢叫「低延迟交换机」的原因。
但注意这是在 10 Mbps 上。换到 100 Mbps,存储转发变成 121 微秒, 直通 1.12 微秒——倍数没变,绝对值小了十倍。
所以「直通快多少倍」这个说法要连着速率说。同样 108 倍,在 10 Mbps 上是「等一秒」与「眨眼」, 在千兆上是「等 12 微秒」与「等 0.1 微秒」——后者对多数应用毫无意义。
30 秒实验
- 在交换机规格书里找「转发方式」这一项,看它写的是哪种。
- 找一台设备的「转发延迟」参数,看在哪个数量级。
- 想一想你手上的业务对「抖动」和「平均延迟」哪个更敏感。
常见误区
- 以为直通一定更好。坏帧也会被转出去。
- 以为存储转发慢所以没人用。今天它是默认。
- 以为直通可以跨速率。异速时必须退回存储转发。
自测三问(点开对答案)
1. 三种转发方式分别收多少才开始转? —— 直通读目的 MAC(14 字节)、无碎片收 64 字节、存储转发收整帧。 2. 无碎片为什么选 64 字节? —— 64 字节是以太网最小帧长,短于它的一定是碰撞碎片。 3. 直通为什么不能跨速率使用? —— 高速进低速出会让缓存堆积,只能退回存储转发。下一节:不管哪种转发方式,都得先看懂帧头——先看帧里有几段。
- ☐ (本节完,下一节 02.03.01 以太网数据帧的种类)