第四章 · 层级:把世界装进一棵树
上一章结尾留了一个问题:一个号码要同时满足「唯一」和「可读」,位数很快就爆了。全球几十亿部电话,如果每部电话都直接从 00000000001 排到 99999999999,号码倒是够用,但没人记得住,也没人能维护——你想想,负责发号的那个人得记住几十亿个号码分给了谁。这个死局的解法,古人写信时就会了:没人把地址写成「中华人民共和国第 8742 万号住户」,而是写「江苏省南通市海门县……」——一级一级缩小范围,像走台阶一样走到目标跟前。这就是本章的主角:层级编号,把一个巨大的编号空间切成若干段,每一段只回答一个更小范围的问题。
电话区号:一台巨型分拣机的使用说明书
拨一个外地手机号,你拨的其实是 11 位数字。但打固定电话时,你得先拨区号。区号这个东西,就是一层明明白白的层级。
先看国际层。你给中国打电话要拨 +86,这个 86 不是随便抓的。上世纪六十年代,国际电信联盟(一个协调各国电信标准的联合国机构,你可以理解成「全球电话系统的总管委会」)把世界分成九个编号区:1 给北美,3 和 4 给欧洲,8 和 9 给亚洲……中国分到的是 8 区里的 86,香港 852、澳门 853、台湾 886,都是 8 字头一家人。第一层回答的问题是:这通电话要去哪个国家?
再看国内层,这里藏着一套几乎没人注意、但设计得相当讲究的体系。中国的固定电话网早年是四级汇接结构:最顶上是北京,区号 010——全国独一份的两位区号,自带首都特权;往下是八个大区交换中心,瓜分 02X 这一段:广州 020、上海 021、天津 022、重庆 023、沈阳 024、南京 025、武汉 027、成都 028、西安 029。再往下是普通地级市的三位区号,而且三位的数字不是乱排的:东北大区的城市,区号第二位跟着沈阳走 4 字头,比如大连 0411;华东跟着南京走 5 字头,比如苏州 0512;中南跟着武汉走 7 字头,比如长沙 0731。
翻译成人话:看到一个区号 0571,你不需要查表就能推理——5 字头,华东,南京大区的地盘;杭州的。区号本身就是一张压缩过的地图。
还有个耐人寻味的细节:026 是空缺的。这个紧挨着南京 025 的号码几十年没发出去,官方说法是预留,民间最流行的猜测是给台北留的——因为台湾在行政区划序列里常被归入华东,025 的下一个就是 026。真假姑且不论,这件事本身就说明了一个道理:层级编号一旦建立,空位也是有含义的,发号的人得为还没出现的城市留位置。
美国人玩的是同一套思路的另一个版本。1947 年北美编号计划给全美分区号时,还在用转盘电话——手指插进孔里拨到底,数字越大,转盘回弹越慢,拨一个 0 要等将近一秒。于是设计者把「回弹最快」的号码给了人口最多的城市:纽约 212(总脉冲数只有 5),洛杉矶 213,芝加哥 312。而人烟稀少的地区领到了 907(阿拉斯加)这种慢吞吞的号码。今天转盘早进博物馆了,但曼哈顿的老号码 212 至今是身份象征——一段编号的设计逻辑,会凝固在号码里,比设计者活得还久。
邮政编码:六位数里的四级台阶
区号是给交换机看的层级,邮编是给分拣员看的层级。中国的邮政编码是六位,实行「四级六码制」,每一位都有明确分工:
- 前两位:省。比如
22是江苏,13是吉林。 - 第三位:邮区,一个省内按邮路划的大片。
- 第四位:县或市。
- 最后两位:投递局,也就是最终把信送到你手上的那个邮电所。
拿真实的例子拆一遍:226156——22 江苏,6 南通邮区,1 海门县邮局,56 具体投递局。一封信从外省进江苏,分拣设备只读前两位就能决定它上哪趟火车;到了南通,再看第三位、第四位往下分。每一级分拣员只需要认识编号的一段,不需要认识全国几十万个地名。
翻译成人话:六位邮编不是「一个号码」,而是「四个问题排队等着回答」——哪个省?哪个邮区?哪个县?哪个投递局?每回答一个,剩下的世界就小一圈。
层级真正的杀手锏:把发号的权力下放
到这儿你可能会说:层级不就是把一个大号码拆成几段吗,有什么了不起?了不起的地方不在号码本身,而在组织方式。一个扁平编号系统必须有一个「全知全能」的中央发号员,所有号码都从他手里过;而层级系统里,国际电信联盟只管把 86 发给中国,中国邮电部门只管把 021 发给上海,上海市内的号码怎么分,上海自己说了算。每一级只需要对自己那一段保持唯一,谁也不打扰谁。
软件工程师对这套东西熟得很:文件路径 /home/wjs/book/04.html 就是层级编号,操作系统维护根目录,你维护你自己的 home。快递公司内部分单号也是这么干的——总部给每个转运中心划一段号段,转运中心再往下放给网点,谁也不用等总部审批。层级让编号系统从「一个中央机构的记账本」变成「一棵可以无限挂节点的树」,这是它能规模化的根本原因。
但树也有树的烦恼。电话区号绑死的是地理,可万一编号想表达的不是「在哪儿」呢?比如一台服务器的地址,它属于哪个「网络」,跟它在哪个城市是两回事。下一章我们会看到,互联网干脆给同一台机器上了两套户口——一套按物理拓扑分层给路由器用,一套按管理权分层给人用——而这两套层级之间,还需要一个全天候的翻译官。