
从 IP 到 MAC 再到端口:网络通信的分层定位
在网络世界里,一台主机要与其他设备通信,实际上依赖三个关键标识协同工作:IP 地址、MAC 地址和端口号。它们各司其职,分别解决「数据送到哪里」「相邻节点怎么跳转」以及「到达主机后交给谁处理」的问题。
IP 地址:网络层的逻辑标识

IP 协议(网际协议)目前有两个版本:IPv4 与 IPv6。日常讨论中未经特殊说明时,默认指的是 IPv4。IPv4 地址的基本特征如下:
- 数据长度:IP 地址本质上是一个 4 字节(Byte),即 32 位(Bit)的整数。
- 表示方法:为了便于人类读写,通常采用「点分十进制」形式来表示,例如
192.168.0.1。 - 数值范围:每个被点号分隔的十进制数代表 1 个字节,取值范围在 0 到 255 之间。
IPv4 地址空间总量约为 42.9 亿个(2^32 ≈ 4,294,967,296),这个数量早已无法支撑全球设备的增长。NAT 技术应运而生,让大量设备共享一个公网 IP;而 IPv6 则从协议层根本性地扩展了地址空间,但推广过程涉及国际政治与利益博弈,进展并不顺利。
跨网段通信:路由器的中转角色

当源主机(例如用户 A,IP 为 192.168.2.2)需要向另一个局域网中的目标主机(例如用户 B,IP 为 172.168.2.2)发送数据时,跨网段通信就此展开:
- 本地判断与交付:源主机网络层检测到目标 IP 不属于当前局域网,于是不会在本地网段广播,而是将数据包转发给本地网关——路由器。
- 路由器的转发:路由器连接着不同网段,拥有多个网卡和对应的 IP 地址(例如同时拥有
192.168.2.1和172.168.2.1)。它基于目标 IP 进行路由选择,把数据精准转发到下一跳网络,直到送达最终目标。
在整个传输路径上,底层物理介质和数据链路层协议可能完全不同(比如以太网与令牌环网)。网络层通过统一的 IP 报头屏蔽了这些物理差异,使得上层协议(如 TCP、FTP)在逻辑上以为两端是直接连通的;各节点在物理传输时则调用各自的驱动程序完成帧的封包与解包。
IP 地址与 MAC 地址:不变的终点与跳变的每一跳

IP 地址与 MAC 地址在跨网络传输中协同分工,角色截然不同。可以借用「唐僧西天取经」的故事来理解:
- IP 地址代表长途终点:「从哪里来,到哪里去」。在整个传输过程中,源 IP 和目的 IP 始终保持不变,它决定了数据传输的最终目标与整体路径选择。
- MAC 地址代表相邻跳转:「上一站从哪里来,下一站去哪里」。跨路由器的每一跳中,数据链路层的源 MAC 和目的 MAC 都会随着物理介质的变化而不断更新。
IP 地址指明远方的终点,MAC 地址解决局域网内相邻节点之间的跳转。两者配合,数据包才能跨越重重路由器,最终抵达目的地。
总结二者的核心区别:

- IP 地址在整个路由过程中保持不变;MAC 地址则在每一跳都会改变。
- IP 地址是长远目标,MAC 地址是下一阶段的交付目标。
- IP 地址是路径选择的重要依据;MAC 地址是局域网帧转发的重要依据。
IP 网络层的根本意义在于:提供一层网络虚拟化,让底层所有异构网络对上层而言都是统一的 IP 网络,从而屏蔽最底层物理介质的差异。
端口号:把数据交给正确的进程
数据到达主机并不是终点——最终使用数据的是人,而人在系统中的代表就是进程。系统内同时运行的进程数量极多,数据到达后如何准确转发给目标进程,就需要端口号来完成标识。

端口号的基本特征
- 端口号是一个 2 字节、16 位的整数。
- 它用来唯一标识一个主机内的进程,告诉操作系统当前数据应该交给哪个进程处理。
- IP 地址 + 端口号,能够标识网络上某一台主机的某一个进程。
- 一个端口号在同一时刻只能被一个进程占用。
端口号的范围划分
0 - 1023:知名端口号。HTTP、FTP、SSH 等广泛使用的应用层协议使用固定端口,例如 HTTP 默认 80、SSH 默认 22。1024 - 65535:操作系统动态分配的端口号。客户端程序的端口号就是从这个范围由操作系统分配。

端口号与进程 ID 的关系
端口号和进程 PID 都能标识进程,但设计上有本质区别:一个进程可以绑定多个端口号,但一个端口号不能被多个进程绑定。进程 PID 属于系统内部概念,若直接在网络中使用 PID,会导致系统进程管理与网络协议强耦合,因此网络层选择了独立的端口号机制。
源端口号与目的端口号
传输层协议(TCP 和 UDP)的数据段中分别包含源端口号和目的端口号,用来描述「数据是谁发的」和「要发给谁」。与 IP 地址类似,这两个端口号在端到端传输过程中保持不变,确保通信双方能够准确识别彼此。