目录
[一、IP 协议的作用与构成](#一、IP 协议的作用与构成)
[1. IP 的作用](#1. IP 的作用)
[2. 唯一性标识](#2. 唯一性标识)
[3. IP 报头结构](#3. IP 报头结构)
[1. 网络的设计思想](#1. 网络的设计思想)
[2. 信息发送过程](#2. 信息发送过程)
[3. 网段划分](#3. 网段划分)
[4. 子网划分方法](#4. 子网划分方法)
[5. 特殊 IP 地址](#5. 特殊 IP 地址)
[三、IP 地址数量限制](#三、IP 地址数量限制)
[1. IPv6](#1. IPv6)
[2. 动态分配](#2. 动态分配)
[3. 私有 IP 和公网 IP](#3. 私有 IP 和公网 IP)
[4. NAT(网络地址转换)](#4. NAT(网络地址转换))
[5. 运营商的作用](#5. 运营商的作用)
[6. 消息传输过程](#6. 消息传输过程)
[7. 路由细节](#7. 路由细节)
[四、IP 分片与重组](#四、IP 分片与重组)
[1. MTU(最大传输单元)](#1. MTU(最大传输单元))
[2. IP 报头中的分片相关字段](#2. IP 报头中的分片相关字段)
[3. 分片组装](#3. 分片组装)
一、IP 协议的作用与构成
1. IP 的作用
IP 协议提供一种能力:将数据从 A 主机跨网络传输到 B 主机。
"能力"的理解:
-
有很大概率能送到,但难免会失手(不可靠)
-
如果网络需要 100% 送到对方,需要 TCP 参与
分工:
-
TCP:提供策略(丢包重传、流量控制等)
-
IP:提供能力(尽力而为地传输数据包)
能力 + 策略 = 可靠的数据传输
2. 唯一性标识
| 层级 | 标识 | 作用 |
|---|---|---|
| IP 层 | IP 地址 | 标识主机(主机到主机) |
| TCP/UDP 层 | 端口号 | 标识进程(进程到进程) |
IP 地址 = 目标网络号 + 目标主机号
-
同一个网络内,主机编号不同
-
不同网络,网络编号不同
3. IP 报头结构

IP 报头基本长度为 20 字节,选项部分可变,总长度范围 [20, 60] 字节。
| 字段 | 长度 | 说明 |
|---|---|---|
| 4 位版本号 | 4 位 | IPv4 固定为 4 |
| 4 位首部长度 | 4 位 | 单位是 4 字节,最大值 15,因此报头最大 60 字节 |
| 8 位服务类型 | 8 位 | 3 位废弃,1 位置 0,4 位可选(低延迟、高吞吐、高可靠等) |
| 16 位总长度 | 16 位 | 整个 IP 数据报的长度(报头 + 数据) |
| 16 位标识 | 16 位 | 标识一组分片,同一数据报的分片标识相同 |
| 3 位标志位 | 3 位 | 1 位保留,1 位禁止分片(DF),1 位更多分片(MF) |
| 13 位片偏移 | 13 位 | 分片在原始数据报中的位置(单位 8 字节) |
| 8 位生存时间 | 8 位 | TTL(Time To Live),每经过一个路由器减 1,到 0 丢弃 |
| 8 位协议 | 8 位 | 上层协议类型(6=TCP,17=UDP) |
| 16 位校验和 | 16 位 | 只校验 IP 报头,确保报头正确性 |
| 32 位源 IP 地址 | 32 位 | 发送方 IP |
| 32 位目标 IP 地址 | 32 位 | 接收方 IP |
| 选项 | 可变 | 可选字段,用于扩展功能 |
关键字段详解:
8 位生存时间(TTL):
-
网络结构复杂,可能存在环路
-
每经过一个路由器,TTL 减 1
-
当 TTL 变为 0 时,路由器丢弃该数据报
-
防止数据报在网络中无限循环
16 位校验和:
-
只校验 IP 报头,不校验数据
-
确保报头在传输过程中没有被损坏
-
可能因磁场等原因导致比特位翻转
二、子网划分
1. 网络的设计思想
网络是几十年发展的产物,是经历几十年建设的,并且是很早就被设计过的。
理解报文路由,核心是要理解网络是如何被设计的。
2. 信息发送过程
text
主机 → 路由器 → 对方路由器 → 对方主机
内网转发 公网转发 内网转发
为什么这样设计?
发送消息就是找到对方主机的过程,寻找就是一个排除错误的过程。
划分子网的好处:
-
将查找目标计算机 → 查找目标网络
-
一次排除一群不是目标的主机
-
大大提升查找效率
3. 网段划分
在子网中新增一台主机:
-
它的网络号必须和子网网络号一致
-
它的主机号不能和子网中其他主机重复
IP 分配:
-
电脑连接路由器后,路由器通过 DHCP 协议自动分配 IP 地址
-
路由器有构建子网的功能
-
路由器自己的主机号往往是 1(如 192.168.1.1)
4. 子网划分方法
传统分类划分法:将 IP 地址分为 A、B、C 等类网络

| 类别 | 网络号位数 | 主机号位数 | 特点 |
|---|---|---|---|
| A 类 | 8 位 | 24 位 | 用于大型网络 |
| B 类 | 16 位 | 16 位 | 用于中型网络 |
| C 类 | 24 位 | 8 位 | 用于小型网络 |
问题:随着上网设备增多,这种划分方式导致 IP 浪费
-
A 类网有 24 位主机号,但一个组织很难有这么多机器
-
大量 IP 地址被浪费
解决方案:子网掩码
子网掩码是一个 32 位的数字:
-
前面连续为 1(表示网络号部分)
-
后面连续为 0(表示主机号部分)
text
子网掩码 & IP 地址 = 网络号
子网掩码为 1 的位才对网络号有效。
优势:
-
不区分 A、B、C 类网络
-
可以将用不到的主机号位转为网络号位
-
提高 IP 地址利用率
示例:
-
IP:192.168.1.10
-
子网掩码:255.255.255.0
-
网络号:192.168.1.0
-
主机号:10
5. 特殊 IP 地址
| 地址 | 含义 |
|---|---|
| 网络号 + 主机号全 0 | 代表整个局域网(如 192.168.1.0) |
| 网络号 + 主机号全 1 | 广播地址(如 192.168.1.255) |
| 127.x.x.x | 本地环回地址(通常用 127.0.0.1) |
三、IP 地址数量限制
IPv4 地址总量约为 43 亿,如果每个设备都有一个公网 IP,显然不够用。
1. IPv6
-
用 128 位(16 字节)表示一个 IP 地址
-
数量极其庞大,理论上可以给地球上的每一粒沙子分配一个 IP
2. 动态分配
-
路由器只给当前联网的设备分配 IP
-
设备下线后,IP 可以被回收重用
3. 私有 IP 和公网 IP
私有 IP 范围:
-
10.0.0.0 ~ 10.255.255.255
-
172.16.0.0 ~ 172.31.255.255
-
192.168.0.0 ~ 192.168.255.255
普通人接触到的就是内网、子网、局域网 IP。
路由器本身有构建子网、给子网主机分配 IP 的能力。
4. NAT(网络地址转换)
路由器的接口:
-
WAN 口:连接上层网络(公网)
-
LAN 口:连接子网设备
有的路由器 WAN 口连接到公网 IP,就是公网出入口路由器。
数据发送过程:
-
内网主机(192.168.1.3)发送数据到公网地址
-
由于源 IP 是内网地址,在公网中不可路由
-
每经过一个路由器,路由器将自己的 WAN 口 IP 替换到源 IP 字段
-
到达公网出入口路由器时,源 IP 已经被替换为公网 IP
-
公网中用设计好的规则找到目的地
-
返回时,路由器根据 NAT 表将目标 IP 替换回内网 IP
这个过程就叫 NAT(Network Address Translation)。
优点:
-
多个内网设备可以共享一个公网 IP
-
内网 IP 可以重复(不同局域网),不影响通信
5. 运营商的作用
-
上层路由器由运营商管理
-
如果费用欠费等,运营商可以选择不向上转发报文
-
这就是"连不上网"的原因之一
6. 消息传输过程
公网 IP 可以根据地区向对应机构申请获得,IP 的前 8 位(A 类网络)表示一个地区。
一个地区能拥有的 IP 数量,决定了该地区网络的规模。
示例:5.1.10.2 发送到 6.2.15.2
-
子网掩码 255.0.0.0,从 5 开头转发到 6 开头
-
6 地区收到,掩码变为 16 位,找到 6.2 开头
-
6.2 地区服务器收到,通过网络码确定没问题,继续向下转发
-
直到转发到目的地
7. 路由细节
路由器既对内又对外,内部会存储:
-
上一层路由器的信息
-
平级路由器的信息
路由:在复杂的网络结构中找出一条通往终点的路线。
查路由表结果:
-
查到下一条:转发给指定的下一跳路由器
-
没查到:走 default 缺省路由,从 eth0 扔出去交给其他路由器
缺省路由就是进行内网转发的地方。
四、IP 分片与重组
1. MTU(最大传输单元)
-
数据链路层最大传送单元 MTU 固定为 1500 字节
-
如果 IP 数据报超过 MTU,就要在 IP 层进行分片
-
分片与上下层无关
问题:
-
由于 IP 层与上下层解耦,丢一片就等于整个数据报全丢
-
分片会增加丢包概率
最佳实践:尽量做到不分片
-
传输层(TCP/UDP)交给 IP 层的数据要控制大小
-
让一个报文刚好小于 MTU(考虑 IP 报头)
2. IP 报头中的分片相关字段
16 位标识:
-
表示一组分片
-
同一数据报的所有分片标识相同
3 位标志位:
-
第 1 位:保留
-
第 2 位:DF(Don't Fragment)- 禁止分片,如果报文超过 MTU 就直接丢弃
-
第 3 位:MF(More Fragments)- 更多分片,最后一片为 0,其它为 1
13 位片偏移:
-
表示当前分片在原始数据报中的位置
-
单位是 8 字节(因为 13 位不够表示所有字节偏移)
3. 分片组装
判断分片:
-
标志位 MF = 1:是分片的一部分(不是最后一片)
-
标志位 MF = 0 且片偏移 ≠ 0:是分片的最后一片
-
标志位 MF = 0 且片偏移 = 0:不是分片(完整数据报)
组装过程:
-
将相同 16 位标识的分片收集到一起
-
按片偏移升序排序
-
检查完整性:如果一片的偏移 + 大小 ≠ 下一片的偏移,说明有分片丢失
-
组装完成后交给上层协议处理