引言
很多人一上来就学 TCP、HTTP,但如果不知道 IP 地址、网段、MAC 地址、ARP 分别在干什么,那么"数据为什么能发到对方机器上"这件事其实并没有真正想明白。
这一篇就把几个核心问题串起来:
- 私有 IP 地址范围是什么
- 如何判断是否同一网段
- ARP 是怎么找 MAC 地址的
- Ping 在同网段和跨网段时分别怎么工作
私有 IP 地址范围
常见的私有 IP 地址范围有三段:
10.0.0.0/8172.16.0.0/12到172.31.255.255192.168.0.0/16
它们通常出现在局域网中,不能直接在公网中路由。
简单记忆:
10.x.x.x适合大型网络172.16.x.x - 172.31.x.x适合中型网络192.168.x.x最常见,家庭路由器基本都在用
IP 地址如何拆成网段号和主机号
IP 地址由两部分组成:
- 网段号
- 主机号
关键在于"子网掩码"或者 CIDR 表示法。
通过 /24 这种写法判断
例如:
text
10.1.1.3/24
/24 表示前 24 位是网络位,也就是前三个字节属于网段号。
所以:
- 网段号:
10.1.1 - 主机号:
3
通过子网掩码判断
例如:
text
IP:10.1.1.3
子网掩码:255.255.255.0
255.255.255.0 本质上就是 24 位网络位,因此结论也是:
- 网段号:
10.1.1 - 主机号:
3
判断两台机器是否同网段,核心就是看它们与子网掩码进行与运算后,得到的网络地址是否相同。
MAC 地址和 ARP 到底在干什么
IP 地址负责"跨网络定位主机",MAC 地址负责"局域网内定位网卡"。
问题来了:如果我只知道对方 IP,怎么把数据交给对方网卡?
这就需要 ARP。
ARP 的作用很简单:
"根据目标 IP 地址,查询目标设备的 MAC 地址。"
典型流程如下:
- 发送方先查自己的 ARP 缓存。
- 如果缓存里已经有目标 IP 对应的 MAC,就直接发送。
- 如果没有,就在局域网里广播 ARP 请求。
- 拥有该 IP 的目标主机收到请求后,单播回复自己的 MAC 地址。
- 发送方把结果写入 ARP 缓存,后续就可以直接通信。
所以 ARP 解决的是"知道 IP,但不知道目标 MAC"的问题。
Ping 的本质是什么
Ping 常被用来测试网络是否可达。
它本质上使用的是 ICMP 协议。发送方发出 ICMP Echo Request,请求对方回应 Echo Reply。如果收到了回应,说明目标主机可达;如果长时间收不到,就可能是链路不通、主机不在线、被防火墙拦截,或者中间路由有问题。
同网段 Ping 的过程
假设 A 主机要 Ping B 主机,并且两台机器在同一网段。
整个过程大致如下:
- A 先判断目标 IP 是否与自己处于同一网段。
- 如果是同网段,就不需要找网关,直接准备在局域网内发送。
- A 先查 ARP 缓存,看是否已有 B 的 MAC 地址。
- 如果没有,就广播 ARP 请求。
- B 收到后返回自己的 MAC 地址。
- A 将目标 MAC 填入数据帧,发送 ICMP 请求报文。
- B 收到后回应 ICMP Reply。
这里有两个关键点:
- IP 地址决定目标是谁
- MAC 地址决定这一跳发给哪块网卡
下面这张图可以配合理解同网段下 ARP 查询和 Ping 发送的过程:

跨网段 Ping 的过程
如果 A 和 B 不在同一个网段,事情就不一样了。
此时发送方不会直接找目标主机的 MAC,而是先把数据交给"下一跳",通常就是默认网关。
流程如下:
- A 通过子网掩码判断,发现目标 IP 不在本地网段。
- A 查询路由表,找到匹配的下一跳。
- 在家庭或企业网络中,下一跳一般就是网关。
- A 如果不知道网关的 MAC 地址,就先对网关发起 ARP 查询。
- A 把目标 IP 仍然写成最终目标主机的 IP,但把二层帧里的目标 MAC 写成网关的 MAC。
- 网关收到后,查看目标 IP,再根据路由表决定下一步往哪里转发。
- 如果后面还要跨更多网络,就重复这个过程,直到到达目标网络。
所以跨网段通信里,真正逐跳变化的是 MAC 地址,而最终目标 IP 一般不会变。
路由表在这里做了什么
路由表的作用就是告诉主机:
"目标地址要从哪个接口发,交给哪个下一跳。"
如果找不到更精确的路由,就会匹配默认路由,也就是常见的:
text
0.0.0.0/0
它可以理解为"万能路由"。
把 Ping 和 ARP、路由串起来
很多人把这几个知识点分开记,其实它们是一个连续过程:
- 先根据 IP 和子网掩码判断是否同网段。
- 如果同网段,就直接找目标主机的 MAC。
- 如果不同网段,就找下一跳,也就是网关的 MAC。
- 最终通过数据链路层把帧发出去。
所以一次看似简单的 Ping,背后其实涉及:
- IP 寻址
- 子网划分
- ARP 解析
- 路由选择
- ICMP 报文收发
总结
网络通信不是"知道对方 IP 就能直接发过去",中间还有两个关键环节:
- 判断是本地直发还是交给网关
- 通过 ARP 找到这一跳对应的 MAC 地址
把这两个问题搞清楚,后面再看 TCP 建连、HTTP 请求,就不会觉得数据是在"凭空飞过去"。
如果这篇文章对你有帮助,欢迎继续阅读本系列后续内容。若文中有不准确或需要补充的地方,也欢迎指出。