用门牌号比喻互联网地址

王建硕 2022-09-23 22:15

前天和池建强同学一起讨论写作的时候,提到关于类比这件事情。他说我是属于他认识的人中间特别喜欢打比方的一个。

这一点,我承认。我觉得打比方是一种测试,只有我们能够在另外一件事物内部找到和讨论的对象相同本质的东西,才说明我们真的知道一个东西是怎么工作的。否则,只用同一个东西,我们太容易把刚刚听到的复述一遍,或者简单改述,就以为自己了解了。在比方的时候,所有的细节都需要自己补充。虽然不是很准确,但这个时候神似比形似更重要。

举一个例子,我们谈到如何让小白了解互联网如何工作。池同学说可以用门牌号类比域名。我建议,如果从本质的角度来看,门牌号更像 IP 地址,而大厦的名字,才是域名。从这里,我们开始天马行空的思考如何把 IP 地址的寻址过程,和一个城市的广场,街道,弄堂还有门牌联系起来,就又有了这一篇文章。

互联网上的门牌号

首先,一个建筑需要一个门牌号,在一个街道里面需要唯一。比如现实里面有一个门牌号叫:

安福路128号

在网络世界里面,所有的名字都是数字的,比如这一户:

 202.120.12.3

其实,这一户表示的是 202.120.12 街上的第 3 号房子。在互联网的世界上,地址只有两层:街道和号码,没有城市,区等这些层次。

那问题来了。用户怎么区分哪部分是街道的名字,哪部分是门牌号呢?怎么知道它是 202.120.12 街上的 号,而不是 202.120 街上的 12.3 号,或者别的划分方法呢?IP 地址又不能写成 

202.120.12 街 3 号

工程师们的浪漫,就是用另外一个叫做子网掩码的方式来解决这个问题。子网掩码 

255.255.255.0 

变成二进制,就是 111111111.11111111.11111111.00000000 。这是告诉你,1 这一位对应的 IP 地址的部分就是街道名,0 对应的部分就是门牌号。每条街上每户除了知道自己的地址,也知道这个叫做子网掩码的东西,就很容易的把这条街上所有的地址分清楚街道名和门牌号在什么地方断开。

搞清楚街名和门牌号有啥用处呢?

比如我住在 202.120.12.2 号,根据政府给我的子网掩码 255.255.255.0,我知道我其实是住在 202.120.12 街的 2 号。

一天我出门买菜,菜市场的地址是 202.120.12.3 号,用子网掩码把街和门牌号分开,就是 202.120.12 街的 3 号。一比较,哦,原来我们住在同一条街上,我就会在这条街上面寻找 号。

如果我要去上学,学校的地址是 72.47.228.92,用我的子网掩码算出来的街道号是 72.47.228 街,不是我自己的这条街,那怎么办?好在除了自己的门牌号,以及子网掩码,政府还会给我一个地址,叫做网关地址,比如

202.120.12.100

网关地址肯定是本条街的一个户,比如 100 号。凡是不在我自己这条街上的地址,我就会直接走到网关这个弄堂里,也就是 202.120.12 街的 100 号。

这个弄堂一头连着 202.120.12 街,另外一头可能连着 72.47.228 街。当我从弄堂另外一头出来的时候,我的身份可能就变成 72.47.228 街的 2 号。到了这里,我再看看我的学校地址,72.47.228 街的 92 号。这好办,就在这条街上找到了。


不断寻址的过程

如果我要去的公司地址是 72.48.2.2,跟弄堂另外一头的这条街还不一样,我就要看一下这条街的网关是多少,然后我再走到这个巷子里面,又从另外一个名字的街道的一户出来。如此往复,如果走到了公司在的那条街上,就在街上找公司,如果不在那条街上,就走进这条街的网关弄堂。一直走呀走,直到最终找到。

当然这样的效率不够高,有的时候,这种跨越不同道路的小弄堂会集中在一个巨大的广场上,这个广场上有好多指路牌。如果我们走到这个广场,能看到很多条弄堂,分别列出了几个大的方向,比如20开头的地址的走这里,30开头的地址,走那里。如果表上没有写的,走一个缺省的弄堂等等。这样效率就提高不少。这个大大的广场叫做路由器,这个指示牌就是路由表

互联网由小网络组成

整个互联网就是这么一个巨大的城市。虽然整个城市很大,都是由基本上构造一样的小街道构成的。每条街道的每一个门牌号在建立的时候,政府都会发给它三条重要信息:

  1. 你自己的街道号和街道上的门牌号

  2. 你所在的街道的子网掩码(负责把街道号和门牌号分开)

  3. 网关地址(就是本街道找不到的时候去到其他街道的弄堂地址)

就靠着这三条简单的信息,整个互联网所有的网络就这样有条不紊的工作者。

至于域名,是另外一个系统,就是一个城市的黄页。它里面就两栏:第一栏,建筑名称,比如「金茂大厦」,第二栏,告诉你金茂大厦的地址是72.48.2.2。这个对应关系就可以把人可以认识的随意的名字转换成门牌号吗,有了门牌号,无论你在这个城市的任何地方,只要根据这样的步骤:

  1. 根据所在街道的子网掩码判断一下自己要去的地方和现在在的地方是不是在一条街上。如果在,就找到了。

  2. 如果不在一条街上,就直接通过网关的那个弄堂到另外一条街上

  3. 重复如上的过程,直到走到。

互联网上一次正常的访问,需要跳个十几个到几十个这样的街道很正常。从自己,直到最终的地址的过程,就是互联网的寻址过程。

从此以后,如果再看到如下的配置就能看懂了对吗?

这个配置讲的故事是:你住在一个名叫 192.168.3 的街道的 10 号。如果你去的地址不在 192.168.3 街上,你就只管通过 192.168.3 街的 1 号走到另外一条街上,然后继续你的寻路之旅就可以了。

打比方的作用

世界上的很多东西都有类似的地方。比如街道的设置和网络的工作原理其实是共通的。找到这些相似点,既能搞清楚 IP 地址工作的方式,也是乐趣的来源。

推荐阅读