1844年5月24日,摩尔斯在国会大厦地下室敲出“What hath God wrought”,电流两分钟内跑完华盛顿到巴尔的摩的距离。这段历史被写进无数科技史,但很少有人叫对它的名字——电报其实是人类第一个数字网络。它传的不是声音的波形,而是离散的符号:有脉冲、没脉冲,中继的操作员只需要判断“有没有”,再原样复刻一份发往下一段线路。这个“判断+重生”的动作,后来有了一个更响亮的名字:路由器。
一百多年后,工程师们要让分散的计算机互相说话,面对的其实是同一道题:怎么在一堆不可靠的物理链路上,搭出可信的信息通道。答案不是一次性想出来的方案,而是几十年里一层层打的补丁——今天每打开一个网页,背后走的正是这条补丁历史。
电报房里的“路由器”
小镇之间的电报靠人工转发。甲镇发来的纸带,操作员读出内容,挑一条更接近目的地的空闲线路重发,忙时排队等着。这套流程后来被分组交换网络原封不动继承,只是把操作员换成了电路。1960年代,Paul Baran研究抗毁伤的分布式通信,Donald Davies给“切成小块、独立转发”的做法起了个名字叫“packet”,Leonard Kleinrock用排队论证明了这套东西在数学上跑得通。三人从不同角度得出同一个结论:与其为每次通话预留一整条线(电话系统的电路交换),不如把数据切碎、让链路被所有人共享,允许丢包和乱序,事后再想办法弥补。
这个“事后弥补”的选择,决定了后面几十年协议史的走向。
1983年,互联网换了心脏
ARPANET最早用NCP协议,能连的机器数量有限,扩展性很快见顶。1983年1月1日,ARPANET整体切换到TCP/IP——这一天常被视为互联网真正意义上的生日,比万维网早了将近十年。IP只负责一件事:把包尽力送到下一跳,送不送得到不保证、顺序不保证,这是刻意的简化,核心网络越简单,故障和扩容的成本就越低。可应用层需要的是可靠、有序的字节流,这个缺口交给了TCP——把“确认、重传、排队”这些活儿下放到通信两端,而不是让中间的路由器操心。这不是妥协,是端到端原则的自觉选择:核心保持哑巴,聪明留给两端。
补丁一层层往上叠
IP和TCP解决了“怎么把字节可靠送到一台机器”,但没人愿意天天背一串数字去访问网站。早期互联网靠一份叫HOSTS.TXT的文件,所有主机名和地址集中登记在里面,机器一多,文件同步就崩了。DNS把命名系统改成分层、分布式、带缓存的架构:.com归谁管、某个域名归谁管,层层下放,谁都不用知道全貌。这也是为什么某个网站打不开,第一件该怀疑的往往不是网络本身,而是DNS这一层有没有查到正确地址。
裸奔的问题留到最后才补。早期HTTP明文传输,谁都能在链路中间看到你输入的信用卡号。TLS在应用层和TCP之间加了一层加密和身份验证,浏览器地址栏的锁头,验证的其实是“你连的这台服务器,真的持有它自称域名的证书”——这也解释了为什么钓鱼网站也能挂锁头:锁头保证的是通道加密和身份没被冒充,不保证网站本身干净。
- 结论.每一次锁头、缓存、重定向背后,都是某个具体协议在补一个具体的历史窟窿,不是设计出来的完整蓝图。
千兆网为什么还卡,海底电缆坏了数据去哪
打开一个网页,浏览器要先问DNS要地址,再和服务器握手建立TCP连接,再走一遍TLS握手确认身份,最后才轮到内容真正开始传——每一步都是一次跨大洲的往返,带宽再高也压不掉这几趟“路程”。这正是“千兆网络还卡顿”的答案:瓶颈往往不在管道粗细,在排了几趟队。至于死链是谁的锅,大部分时候不是“网络坏了”,而是DNS没查到、证书验证失败,或者服务器那头真的关了——这几种情况,用户自己的路由器完全无辜。
海底电缆断了,数据不会傻等。IP层“尽力而为”的设计意味着每个包独立选路,路由协议随时感知哪条线路失效,自动把流量甩到还活着的邻居身上。这正是分组交换相对电路交换真正赢的地方:电路交换里一条线路死了,通话直接断;分组交换里,坏的只是一条路,不是整张网。
没有总设计师,只有连夜打补丁的人。
至于这套体系有没有尽头,答案是没有。经典TCP在弱网下容易“队头阻塞”,一个包丢了后面全等它,这几年被建在UDP之上的QUIC和HTTP/3重新设计;DNS长期裸奔又不设防伪造,后来加上DNSSEC管完整性、DoT/DoH管加密。
- 风险.补丁思维的代价是复杂度只增不减——每一次“修好一个洞”,都给系统再添一层需要维护的历史包袱。
旧协议解决旧问题,新协议永远在追新问题。这条链条,大概率还会继续往下写。
