编织世界:互联网寻址之旅

本文最后更新于 2026年5月19日 晚上

在上一节中我们讲到了OSI七层参考模型,而负责传输的下三层会根据目标主机的“地址”进行传输。可见,在通信传输中,“地址”是不可或缺的。

现实生活中,我们理解“地址”比较容易,当人们打电话时,电话号码就是“地址”,寄快递时,收件人加上收件地址就是“地址”。但在计算机网络中,地址的概念比较复杂抽象。

在实际通信过程中,每层的协议使用的地址都不尽相同。比方说,在TCP/IP通信中,不同的层会使用不同类型的地址作为标记,例如数据链路层使用MAC地址,网络层使用IP地址,传输层使用端口号等,在应用层之中,电子邮件地址也可以当做通信地址。

光有地址也不行,要想让地址在通信中发挥作用,首先需要确定通信的主体。一个地址必须明确地表示一个地址,同一个通讯网络中不能有两个相同的地址。就好像老师叫小李同学回答问题,但班里有两个小李同学。在这种情况下,“小李”作为地址是不合适的。这就是地址的唯一性。

当地址的总数不多时,有了唯一的地址就可以确定相互通信的主机。但当地址越来越多时,人们就需要用高效的方法来找出通信的目标地址。为此,人们发现了地址的另一个特征,层次性。

比方说,电话号码中包含了国家区号和国内区号。比方说,有一个学生宿舍号为1-229,这是说在一号宿舍楼,第二层,第29个房间的学生。这样,如果想要找一号楼全体学生,只需要找前缀为“1”的所有学生就好。可以看出将地址进行层次的划分能够更快地定位某一地址。

现实中,IP地址一般作为分层地址使用MAC地址作为无分层地址使用。两者都有唯一性,但只有IP地址具有层次性。

MAC地址由设备制造厂商对每块NIC(网卡)进行指定。人们通过制造商识别号,内部产品编号、产品编号等确保MAC地址的唯一性。虽然MAC地址一定程度上表现出层次性,前24位是厂商标识,后24位是设备序列号,但是我们无法确定NIC被用到了什么地方,这种层次性与设备所在的网络位置无关,因此对于寻址没有任何作用。所以尽管MAC地址是真正负责最终通信的地址,但在实际寻址中,IP地址必不可少。

那么IP地址是怎么实现分层的呢?IP地址由网络号和主机号两部分组成。主机之间即使IP地址不同,只要网络号相同,就说明他们处于同一个网段。通常,同一个网段的主机也属于同一个企业或者组织。另一方面,网络号相同的主机一般分布都比较集中,这也为IP寻址提供了极大方便,也叫IP地址的聚合性。这也是IP地址具有层次性的原因。

在网络传输中,每个节点会根据数据的地址信息来判断应该由哪个NIC发送出去。为此,各个地址会参考一个发出接口列表。在这一点上MAC寻址与IP地址寻址是一样的,只不过MAC寻址所参考的表叫做地址转发表,而IP寻址所参考的表叫做路由控制表。地址表中记录的是实际的MAC表,路由表中则是集中了之后的网络号。

我们来看看具体情况。

主机A要发送一条消息给主机B,首先数据会分成一个个的小包,并附上目标主机的地址。之后主机A将包发给交换机1,交换机1内储存着地址转发表,交换机1根据数据包中的目标MAC地址查询自己的MAC地址表。如果找到对应的端口,就直接从该端口转发出去;如果找不到,则会进行广播(在以太网中),或者发送到指定的默认网关(通常就是路由器1)。路由器1接收到数据包后,会查看其网络层目标IP地址,并查询自己的路由表。路由表告诉它如何到达目标IP所在的网络。如果目标网络直接连接在路由器1上(例如通过交换机2),它就会将包转发到对应的接口(如发给交换机2);否则,它会将包转发给路径上的下一个路由器(如路由器2)。之后的过程与主机A的包到路由器1的过程相反。

正如我们所见,从抽象的地址概念到具体的寻址过程,网络中数据的精准传输依赖于一套精密的逻辑体系。然而,再完美的逻辑也需要物理实体来承载。地址决定了数据“去哪儿”,而网络设备则负责了“如何去”的实际工作。正是这些隐藏在机箱、线缆与信号背后的硬件,将一个个抽象的地址转化为真实的连接,共同构筑起了我们每天都在使用的现代计算机网络。

根据《图解TCP/IP》第一章网络基础知识 1.8地址 整理

后记(2026.05.17)

其实我一直想要看这本书里关于vpn的章节来着,但是跳着看不是我的阅读习惯,我就没有看,其实现在vpn已经是这种翻墙技术的代称了,这个词发生了泛化,就像现在比较先进的vpspsv技术,和vpn已经变了很多了,但是我们还是叫它vpn,因为我们都把它们用来翻墙,就这个功能来说,其实两者没有区别。