上一篇文章里,我们建好了一个小王国:一个山谷、几个村庄、几座信号塔,还有一套本地网络。这套系统运转得相当不错——考虑到它的发明者还相信医学主要是平衡四种体液。
但权力迟早会成为王国里最有野心之人的目标,一个王国迟早会装不下他们。侦察兵发现山那边有定居点,军队沿着以前只走羊的路前进,几年之内,我们那个整洁的小王国就变成了一个横跨数个山谷的帝国。
![]()
道德困境不在本文讨论范围内。作为中世纪欧洲的网络工程师,我们显然没有资格评判领主的军事政策。我们需要评判的是:第一部分的通信系统,能否扛住这次扩张?
旧系统的边界
我们的旧系统知道如何在一个山谷内传输帧,但它完全不知道什么是山谷、边界在哪里,也不知道当目的地藏在三道山口和别人的税收系统后面时该怎么办。
所以我们要用建本地网络同样的方式来建更大的系统。继续用信号塔,直到消息能穿越整个帝国;等这套机制真正跑通了,再回到真实的计算机和互联网。这个顺序很重要——因为当你先感受到问题,IP地址、网关和路由表就变得好记多了。
这篇文章要讨论的是:IP地址、网络前缀、网关、路由表和ARP,如何把本地网络变成网络的网络。然后看同样的模型在Linux上长什么样,DHCP如何给主机它需要的信息,以及一个数据包穿过多个路由器时会发生什么。
现实部分聚焦于以太网上承载的IPv4。其他链路技术可以不通过以太网承载IP,IPv6用邻居发现替代ARP,但一个边界清晰的世界暂时够用了。我们的帝国已经够难治理了,不必再开几个新大陆。
名字冲突:两个山谷,两个0A
在现有系统里,每座塔都有一个本地名字,比如0A、0B或0C。当整个已知世界都在一个山谷里时,这完全够用。
然后我们拿下了另一个山谷。
它有自己的塔,可能叫1A、1B、1C。也可能叫0A、0B、0C——因为中世纪王国之间的协调水平,显然不比现代IT部门之间的协调好多少。
现在,发给0A的命令有歧义了。山谷1有一个0A,山谷2也有一个0A。旧名字只有在我们已经知道说的是哪个本地网络时,才能告诉我们消息该给谁。
这不是旧系统的缺陷。本地名字本来就是为本地投递发明的,在一个山谷内它依然完美地完成着这项工作。帝国只是创造了一个新的问题:
当"0A"不再唯一时,你如何确定消息该往哪个方向送?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.