Skip to content

IP 协议:寻址、路由与分包转发

很多人第一次接触网络,会把 IP 理解成“一个地址”。

这当然只说对了一小部分。

IP 是 Internet Protocol,也就是互联网协议。它真正解决的是 在一个由很多网络和路由设备组成的环境里,数据包如何带着目标地址,从源主机一路转发到目标主机。


1. IP 协议到底在解决什么问题

如果没有 IP,一台机器很难知道:

  1. 目标机器是谁
  2. 数据包该往哪条路走
  3. 跨网段、跨路由器时谁来继续转发

所以 IP 的核心职责是:

  1. 逻辑寻址
  2. 数据包封装
  3. 路由转发

它不负责的是:

  1. 不保证可靠送达
  2. 不保证按序到达
  3. 不处理应用层语义

🌟 所以 IP 的边界很清楚,它负责把包尽力送到目标机器,不负责把包可靠、按序、无重复地交付给应用。


2. IP 地址是什么

IP 地址可以看成 网络层用来标识主机或接口的一种逻辑地址。

它和 MAC 地址不一样:

概念更偏什么
IP 地址网络层逻辑寻址
MAC 地址链路层本地硬件地址

在真实网络里:

  1. IP 负责跨网络寻址
  2. MAC 更偏当前链路里的本地投递

3. IPv4 和 IPv6 怎么理解

3.1 IPv4

IPv4 是目前大量系统里仍然常见的一代协议。

它使用 32 位地址,常见写法例如:

text
192.168.1.10

3.2 IPv6

IPv6 是为了解决地址空间不足、路由聚合和协议演进等问题而推进的新一代协议。

常见写法例如:

text
2408:8207:2c10:abcd::10

学习时最重要的不是强背格式,而是先知道:

  1. IPv4 地址空间有限
  2. IPv6 地址空间更大,设计也更现代

4. 路由到底是什么

路由可以看成:

当目标地址不在本地网络里时,数据包应该下一跳发给谁。

也就是说,主机发包时通常不是自己知道全世界所有路径,而是:

  1. 看目标是否本地可达
  2. 如果不在本地网段,就把包交给默认网关
  3. 后续由一跳一跳的路由设备继续转发

所以路由器解决的是:

  1. 看目标 IP
  2. 查路由表
  3. 决定下一跳

5. IP 包为什么还要分片和重组

网络链路能承载的数据帧大小不是无限的。

这就带来一个现实问题:

如果上层交下来的一段数据太大,底层链路一次装不下怎么办。

于是就会涉及:

  1. 分片
  2. 传输
  3. 重组

这部分你不用一开始就把所有字段背下来,但要先知道:

  1. 网络传输不是“无限大一整块数据直接飞过去”
  2. 包大小、链路限制和 MTU 会影响传输行为

6. IP 协议的能力边界

这部分非常重要。

6.1 IP 负责把包送到目标主机附近

它关心的是机器级别的寻址和转发。

6.2 IP 不负责可靠交付

如果包丢了、乱序了、重复了,IP 不会像 TCP 那样替你补上全部机制。

6.3 IP 不知道业务请求是什么

HTTPRPC、文件上传、视频流,对 IP 来说本质上都只是不同的数据负载。

所以 IP 的能力边界很像:

  1. 我尽量往目标机器送
  2. 但送没送到、顺序对不对、应用怎么解释,不是我单独负责

7. 一个数据包大致怎么走

可以用最简化的流程理解:

  1. 应用把数据交给传输层
  2. 传输层再交给网络层
  3. 网络层给数据加上源 IP 和目标 IP
  4. 主机根据路由决定发给本地网关还是本地目标
  5. 路由器一路根据目标 IP 查表转发
  6. 最终到达目标主机

这就是为什么 IP 经常和“寻址”“路由”“下一跳”绑定在一起。


8. 常见命令示例

下面这些命令不是协议本身,但很适合帮助理解网络层行为:

bash
ping 8.8.8.8
traceroute example.com
ifconfig
netstat -rn

它们分别常用于观察:

  1. 连通性
  2. 路由路径
  3. 本机网络接口
  4. 路由表

9. 常见误区

9.1 以为 IP 地址就是机器的“永久身份”

不准确。

很多地址是动态分配的,网络环境一变,地址也可能变化。

9.2 以为 IP 一定可靠

不是。

可靠性更多是传输层,尤其是 TCP 在补。

9.3 以为“能 ping 通”就代表应用一定能访问

不代表。

网络层可达,不等于传输层端口可达,也不等于应用层服务正常。


10. 一句话总结

IP 协议这条主线,本质上是在解决 如何让数据包带着逻辑地址,在多网络和多路由设备组成的环境里,被一步步转发到目标主机。

基于 VitePress 构建的个人技术笔记。