跳转到内容

Metcalfe-Boggs 1976 — 一根线上几百台电脑怎么不打架

是什么

这篇论文造出了以太网(Ethernet)——把一栋楼里几百台电脑挂在同一根线上,不靠中心调度也能互不打架地通信。日常类比:开会时几个人想发言,没有主持人,大家先听一下”现在有人在说吗”,没人说就开口;发现两个人同时开口立刻闭嘴,各自心里默数一段随机时间再试。

核心机制叫 CSMA/CD(Carrier Sense Multiple Access with Collision Detection),三个动作:

  1. 发前先听(Carrier Sense):信道空闲才发
  2. 边发边听(Collision Detection):发现有人和自己撞了,立刻停
  3. 冲突后退避(Binary Exponential Backoff):撞 n 次后,在 0~2^n 个时隙里随机抽一个再发

原型在 Xerox PARC 跑到 2.94 Mbps,连了 100 多台 Alto 工作站,覆盖约 1 公里同轴电缆。

为什么重要

不理解这篇论文,下面这些事都没法解释:

  • 为什么”插网线就能上网”——以太网帧格式(48 位 MAC 地址、CRC 校验、最小 64 字节)从 1976 年定下来,今天 100 Gbps 还在用
  • 为什么 Wi-Fi 抢信道有点像在咖啡馆轮流说话——Wi-Fi 的 CSMA/CA 是这篇的精神后裔
  • 为什么”局域网” vs “广域网”是两个世界——LAN 这个词、这个概念,就是这篇论文的产物
  • 为什么二进制指数退避后来被 TCP 拥塞控制借鉴——同一个数学思想:让冲突方在统计上分散开

一句话:现代以太网(switched Ethernet)已经不靠 CSMA/CD 工作了,但帧格式 + 寻址 + 退避思想全部继承自这 13 页论文。

核心要点

CSMA/CD 协议可以拆成 三步

  1. 共享广播介质(passive broadcast medium):所有主机挂在同一段同轴电缆上,任何一台发信号,其他所有人都收得到。没有中心控制器——任何人坏了都不影响别人。

  2. 载波侦听 + 冲突检测:发送前先量一下电缆电压,没人在说就开始发;发的过程中继续监听,如果电压异常(说明有别人也在发),立刻 abort 并发一段 jam 信号告诉所有人”刚才那次作废”。

  3. 二进制指数退避:第 n 次冲突后,发送方在 [0, 2^n - 1] 个时隙里均匀随机抽一个等。第一次冲突 2 选 1、第二次 4 选 1、第十次 1024 选 1——竞争越激烈,退避空间越大,统计上把冲突方分散开。

加起来叫 CSMA/CD。在 70%+ 利用率下仍稳定,远好于纯 ALOHA 的 18% 上限。

为什么”时隙”是 51.2 微秒(10 Mbps 时):电信号在最长一段电缆(约 2500 米)上一来一回的时间,就是一个时隙。所有节点共享这个”统一节拍”,才能让退避计算公平。最小帧 64 字节也是这么来的——确保发送方在发完之前一定能听到最远端的冲突。

帧格式很简单:前导码 + 目的 MAC + 源 MAC + 类型字段 + 数据 + CRC。地址 48 位(管理上够用 281 万亿个),CRC 32 位(错一个 bit 就能抓出来)。这套格式 50 年没动过。

实践案例

案例 1:你电脑上那张以太网卡每秒在做什么

假设你电脑接在一台老式 hub(半双工、共享介质)上想发包:

  1. 网卡先听信道——空闲,开始发第一个 bit
  2. 边发边听,发到第 12 个 bit 时检测到电压异常——撞车了
  3. 立刻停止发送,发 32 bit jam 让所有人都知道”撞了”
  4. 第一次冲突,在 [0, 1] 时隙里随机抽——抽到 0,立刻重试;抽到 1,等 51.2 微秒(一个时隙时间)

整个过程没有中心调度——每张网卡自己决定,靠物理层电压异常这个共同信号同步。

案例 2:从同轴电缆到双绞线 + 交换机

1976 年的物理形态是 thick coax——粗如手指的同轴电缆,所有主机用 vampire tap(吸血鬼夹)扎进去。后来一路演化:

年代物理层拓扑CSMA/CD 还在吗
1976同轴电缆总线
1990双绞线 + hub物理星形 / 逻辑总线
1995双绞线 + switch(半双工)星形是(每端口一个冲突域)
2000+双绞线 + switch(全双工)星形——冲突域被隔离,CD 不再触发

现代办公网线 RJ45 看起来一点也不像 1976 那根粗管子,但帧格式没变。

案例 3:Wi-Fi 为什么改成 CSMA/CA

Wi-Fi(802.11)继承了思想,但把 CD 改成 CA(Collision Avoidance):

  • CD 在无线行不通——天线发自己的信号时,自己接收端被淹没,根本听不到别人的信号
  • CA 改成”发前等一段随机时间 + 可选 RTS/CTS 握手”——靠避免冲突而不是检测冲突
  • 思想完全继承自 Metcalfe-Boggs:分布式、随机退避、共享介质

具体节奏:Wi-Fi 网卡发前先等一个 DIFS(约 34 微秒),然后再额外等一个随机退避时隙;如果听到别人在发,就冻结计数器,等信道空闲再继续倒数。本质上把”检测冲突”变成”避免一起开口”。

踩过的坑

  1. 把 CSMA/CD 当成现代以太网的工作机制——10 多年前就基本死了。switch 普及 + 全双工后,每个端口一个独立冲突域,发收两条线分开走,CD 在现代网络里压根不触发。CSMA/CD 只在 hub / 半双工链路里才有意义。

  2. 以为”总线就是一根物理线”——现代物理拓扑是 RJ45 双绞线 + 交换机的星形。“总线”是 1976 论文的初始物理形态(thick coax),后来一路演化到双绞线 + 交换机。但 1990 年代的 hub 是”物理星形 / 逻辑总线”——电气上还是共享介质。

  3. 把以太网帧和 IP 包 / TCP 段混为一谈——以太网是 L2(数据链路层),管 MAC 地址 + 同一 LAN 内的传输;TCP/IP 是 L3/L4,跨 LAN 路由要靠它们。这篇论文只解决 L2 这一层。

  4. 二进制指数退避不是”等一段固定时间”——是 n 次冲突后在 [0, 2^n - 1] 时隙里均匀随机抽,让多个竞争者在统计上分散开。固定时间会让冲突方下次还撞在一起。这一招后来被 TCP 拥塞控制借鉴。

  5. MAC 地址不是按”一台机器一个号”分配的——是按网卡分配,前 24 位是厂商 OUI,后 24 位是厂商内部编号。一台机器有 N 张网卡(有线 + 无线 + 虚拟)就有 N 个 MAC。MAC 地址也不是给”路由”用的,只在同一个 LAN 内有意义;跨 LAN 路由要重新封装。

  6. MTU 1500 字节这个数字也是这里来的——以太网最大帧约 1518 字节(含头尾),数据部分 1500 字节。今天 IP 包大小、TCP MSS、HTTP/2 帧大小等等一堆参数都受这个 1500 牵制。改 MTU 难,是因为它埋在协议栈最底层。

适用 vs 不适用场景

适用(思想层面):

  • 任何分布式、无中心、共享介质的接入协议(Wi-Fi、早期 LAN、某些卫星链路)
  • 退避思想:TCP 拥塞控制、分布式锁竞争、消息队列重试
  • 帧格式:今天所有以太网(10/100/1000/10G/100G)

不适用

  • 现代有线 LAN 的实际工作机制——switch + 全双工后冲突域被隔离,CSMA/CD 不再触发
  • 跨 LAN 路由——这是 L3 的事,要靠 IP
  • 高确定性 / 低延迟工业网络(EtherCAT、TSN)——它们用时间触发协议,避免随机退避
  • 无线场景下做 CD——天线物理上做不到,必须改 CA

历史小故事(可跳过)

  • 1970 年:夏威夷大学 Norman Abramson 的 ALOHAnet 用无线信道做共享访问,但纯 ALOHA 利用率上限只有 18%(碰撞太多)
  • 1972 年:Metcalfe 在哈佛博士论文里改进了 ALOHA 的吞吐分析,毕业后到 Xerox PARC
  • 1973 年 5 月 22 日:Metcalfe 写下著名的备忘录草图,和 Boggs 把 ALOHA 思想搬到有线介质——信道更稳定,可以做 carrier sense 和 collision detection
  • 1976 年 7 月:CACM 论文发表,13 页
  • 1980 年:DEC / Intel / Xerox 联合发布 “Blue Book” DIX 标准,定到 10 Mbps
  • 1983 年:IEEE 802.3 标准化
  • 1990 年代:switched Ethernet + 双绞线把 CSMA/CD 变成历史名词
  • 今天:帧格式一直延续到 100 Gbps / 400 Gbps 以太网

Metcalfe 后来创办 3Com(取自 Computer / Communication / Compatibility),把以太网卡推成 PC 标配。他还有个著名的 Metcalfe Law(梅特卡夫定律):网络价值与节点数平方成正比——这定律就是从以太网经验里提炼的。

学到什么

  1. 没有中心也能高效协作——这是分布式系统最深的洞见之一。每张网卡自己决定,靠物理层电压做共同信号;今天 Raft、Paxos、gossip 协议都在重复这个母题
  2. 随机退避 > 固定退避——竞争越激烈,退避空间越大;这套数学后来在 TCP、分布式锁、消息队列里反复出现
  3. 协议会死,帧格式不死——CSMA/CD 已经死了 20 年,但 48 位 MAC 地址 + CRC32 + 64 字节最小帧从 1976 一直活到今天
  4. 物理形态会变,思想不变——同轴电缆 → 双绞线 → 光纤,hub → switch,半双工 → 全双工,但”分布式接入 + 帧格式”贯穿始终
  5. 抽象层次的力量——Metcalfe 把”接入控制”和”传输”严格分层,让上层 TCP/IP 不用关心下面用的什么介质;这是 OSI 七层模型最早的工程证据

延伸阅读

关联

  • tcp —— 同一栈的不同层:以太网管 L2 帧,TCP 管 L4 流;TCP 拥塞控制思想直接继承自这篇

一句话总结

没有指挥官,几百台电脑也能在同一根线上井然有序地说话——靠”先听再说、撞了就停、随机退避”三招。50 年前 13 页论文定的帧格式,今天 100 Gbps 网卡还在沿用。

思考题

  1. 如果让你重新设计一种”无中心多方共享信道”协议,不许用随机退避,你能想出别的避免反复冲突的办法吗?提示:可以从”令牌”、“时间分片”、“信号编码区分”几个方向想
  2. 为什么以太网选48 位 MAC而不是 32 位或 64 位?想想厂商数 × 每厂商网卡数的量级
  3. 现代数据中心万兆网(10 GbE)还要 CSMA/CD 吗?为什么交换机 + 全双工就能彻底消除冲突?

反向链接

  • caesar-rexford-2005 —— Caesar-Rexford 2005 — 你的包为什么绕了大半个地球
  • jacobson-1988 —— Jacobson 1988 — 让互联网不再被自己塞死
  • mahajan-2002-bgp-misconfig —— Mahajan 2002 — 三周看互联网,1% 的路由更新是手滑
  • tcp —— TCP — 在不可靠的 IP 上凿出一条 reliable 字节流