一、什么是网际协议(IP)
定义 :网际协议(Internet Protocol,IP)是TCP/IP协议族中的核心网络层协议 ,定义了数据在网络中传输的基本单元(IP数据报),并负责将数据从源主机路由到目标主机。
核心功能:
-
寻址:为每台连接到互联网的设备分配唯一的IP地址
-
分片与重组:将大的数据报拆分成适合底层网络传输的小片,到达目的地后再重组
-
路由:选择路径将数据报从源转发到目标
关键特点:
-
无连接:每个IP数据报独立传输,不预先建立连接
-
不可靠:不保证数据报一定能到达(可能丢失、乱序、重复)
-
尽力而为:IP协议只"尽力"发送,差错控制和可靠传输由上层协议(如TCP)负责
二、IP地址
2.1 IP地址的作用
IP地址是互联网上每台设备的唯一标识 ,类似于现实生活中的门牌号。
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32位 | 128位 |
| 地址数量 | 约43亿个 | 约3.4×10³⁸个 |
| 表示方法 | 点分十进制(如 192.168.1.1) |
冒分十六进制(如 2001:db8::1) |
| 现状 | 已耗尽,逐步向IPv6过渡 | 逐步普及 |
(点击 跳转 见IPv6更多知识)
2.2 IPv4地址结构
一个IPv4地址由网络部分 和主机部分组成。
192.168.1.100
└────┬──┘ └┬┘
网络号 主机号
网络号 :标识设备所在的网络
主机号:标识该网络中的具体设备
2.3 IP地址分类(传统分类法)
| 类别 | 首字节范围 | 网络号位数 | 主机号位数 | 用途 |
|---|---|---|---|---|
| A类 | 1-126 | 8位 | 24位 | 超大型网络 |
| B类 | 128-191 | 16位 | 16位 | 大型网络 |
| C类 | 192-223 | 24位 | 8位 | 小型网络 |
| D类 | 224-239 | --- | --- | 组播地址 |
| E类 | 240-255 | --- | --- | 保留(科研) |
注意:127.x.x.x 保留给本机回环测试(localhost = 127.0.0.1)
2.4 特殊IP地址
| 地址 | 用途 |
|---|---|
0.0.0.0 |
默认路由,表示"任何网络" |
255.255.255.255 |
本地广播(同一网络内所有设备) |
127.0.0.1 |
本机回环地址(测试自己的网络协议栈) |
10.0.0.0/8 |
私有地址(内网用,不公网路由) |
172.16.0.0/12 |
私有地址 |
192.168.0.0/16 |
私有地址(最常见,如家庭路由器) |
2.5 子网掩码
作用:从IP地址中提取网络号和主机号。
原理:
-
子网掩码是一个32位数
-
网络部分对应位 = 1
-
主机部分对应位 = 0
示例:
IP地址: 192.168.1.100 → 11000000.10101000.00000001.01100100
子网掩码: 255.255.255.0 → 11111111.11111111.11111111.00000000
└──────┬───────────────────────────┘ └────┬───┘
网络部分 主机部分
网络地址 = IP地址 AND 子网掩码 = 192.168.1.0
主机号 = 100
CIDR表示法 :192.168.1.0/24 表示前24位是网络部分。
2.6 公有地址 vs 私有地址
| 类型 | 说明 | 示例 |
|---|---|---|
| 公有IP地址 | 全球唯一,可在互联网上路由 | 8.8.8.8(Google DNS) |
| 私有IP地址 | 仅在内部网络使用,不能直接上公网 | 192.168.1.100(你家的电脑) |
NAT(网络地址转换):允许多个私有IP地址共享一个公有IP地址访问互联网(家用路由器实现)。
三、IP数据报格式
3.1 IPv4数据报结构

3.2 关键字段解释
| 字段 | 长度 | 含义 |
|---|---|---|
| 版本 | 4位 | IP协议版本(IPv4=4,IPv6=6) |
| 首部长度 | 4位 | IP首部有多少个32位字(最小5,最大15) |
| 服务类型(TOS) | 8位 | 指示优先级、延迟、吞吐量等(QoS用) |
| 总长度 | 16位 | 整个IP数据报的长度(首部+数据),最大65535字节 |
| 标识 | 16位 | 标识同一个原始数据报的所有分片 |
| 标志 | 3位 | 是否允许分片、是否是最后一个分片 |
| 片偏移 | 13位 | 该分片在原始数据报中的位置(以8字节为单位) |
| 生存时间(TTL) | 8位 | 最大跳数,每经过一个路由器减1,减到0时丢弃(防止循环) |
| 协议 | 8位 | 上层协议类型(6=TCP,17=UDP,1=ICMP) |
| 首部校验和 | 16位 | 仅校验IP首部(数据部分由上层校验) |
| 源IP地址 | 32位 | 发送方IP地址 |
| 目的IP地址 | 32位 | 接收方IP地址 |
四、IP分片与重组
4.1 为什么需要分片
问题 :不同的物理网络有最大传输单元(MTU)限制。
-
以太网MTU = 1500字节
-
PPPoE(宽带拨号)MTU = 1492字节
-
某些网络MTU可能更小
解决 :当IP数据报长度超过下一跳网络的MTU时,路由器将其分片成多个较小的数据报。
4.2 分片过程
原始数据报(3000字节)
┌────────────────────────────────────────────────────┐
│ IP首部(20)│ 数据(2980) │
└────────────────────────────────────────────────────┘
↓ 分片(MTU=1500)
┌──────────────────────────────────┐
│ 首部20 │ 数据1480(分片1,偏移0) │ 标志=更多分片
├──────────────────────────────────┤
│ 首部20 │ 数据1480(分片2,偏移1480)│ 标志=更多分片
├──────────────────────────────────┤
│ 首部20 │ 数据20(分片3,偏移2960) │ 标志=最后分片
└──────────────────────────────────┘
4.3 重组
-
只在最终目标主机进行重组,路由器不重组(除了特殊情况)
-
根据标识字段识别属于同一原始数据报的分片
-
根据片偏移 和标志字段确定顺序
-
所有分片到达后,重组原始数据报
五、IP路由
5.1 路由原理
路由:IP数据报从源到目的地的路径选择过程。
路由表:每个路由器维护一张路由表,包含:
-
目标网络地址
-
下一跳地址
-
出接口
路由器出接口就是数据包离开路由器 的那个端口(物理或逻辑),相当于路由器的"出口大门"。
是什么 :路由器根据路由表选路后,数据包实际发出去 的那个端口(如
GigabitEthernet0/0/1)。做什么:负责将数据包从路由器转发到下一跳设备(如交换机、光猫或对端路由器)。
与"入接口"(进口)相对,是数据转发的出口。
- 路由度量(距离、带宽等)
路由度量(Metric)是路由器用来量化"去往某个网络有多好"的一个数值 。说白了,它就是路由条目的**"价格标签"**------数值越小,代表路径越优,数据包越优先走这条路。
常见度量指标
路由器通过综合计算多种指标来决定这条路的"代价":
度量类型 作用 通俗理解 **跳数 (Hop Count)** 数据包经过的路由器台数 经过的收费站越少越好 **带宽 (Bandwidth)** 链路的速度上限 路越宽,跑得越快 **延迟 (Delay)** 数据包传输的耗时 路况是否拥堵,是否绕远 **可靠性 (Reliability)** 链路的稳定程度(丢包率) 这条路是不是老修路、老断线 **负载 (Load)** 链路当前的流量占用 这条路现在堵不堵车 决策逻辑
路由器在有多条路可走时,会优先选择 Metric 值最小的路径。
场景:去北京有两条路,一条是4车道高速(带宽大)但绕远(跳数多),一条是2车道国道(带宽小)但直连。
计算 :如果算法更看重跳数 ,会选国道;如果更看重带宽,会选高速。
结果:Metric 就是这套算法算出的最终"分数"。
实际应用
静态路由 :手动配置时直接指定 Metric(如
ip route ... metric 10),数值越小优先级越高。动态路由:OSPF、EIGRP 等协议会自动计算 Metric(如 OSPF 基于带宽算 cost)。
一句话总结 :Metric 是路由的优先级权重,数值越小路径越优,决定了数据包"怎么走"。
5.2 路由过程(简化)
主机A(192.168.1.10)发送数据给主机B(8.8.8.8)
1. 主机A检查:目标是否在同一网络?
- 192.168.1.10/24 vs 8.8.8.8 → 不在同一网络
- 将数据报发送给默认网关(192.168.1.1)
2. 路由器R1(192.168.1.1):
- 查路由表 → 发现目标8.8.8.0/24 → 下一跳R2(10.0.0.2)
3. 路由器R2:
- 查路由表 → 目标8.8.8.0/24 → 直接连接(从eth0发出)
4. 主机B(8.8.8.8)收到数据报
5.3 路由表示例
目标网络 子网掩码 下一跳 出接口
0.0.0.0 0.0.0.0 192.168.1.1 eth0
192.168.1.0 255.255.255.0 直接连接 eth0
10.0.0.0 255.255.255.0 直接连接 eth1
8.8.8.0 255.255.255.0 10.0.0.2 eth1
0.0.0.0/0是默认路由,匹配所有不在其他路由表中的目标。
六、IPv4 vs IPv6
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32位 | 128位 |
| 地址数量 | ~43亿 | 几乎无限 |
| 地址表示 | 点分十进制(192.168.1.1) | 十六进制(2001:db8::1) |
| 首部长度 | 可变(20-60字节) | 固定40字节 |
| 分片 | 路由器和主机都能分片 | 只有源主机分片 |
| 校验和 | 有(仅首部) | 无(依赖上层) |
| 安全性 | 可选(需额外IPsec) | 内置IPsec支持 |
| 配置 | 手动或DHCP | 自动配置(无状态) |
| NAT | 普遍使用 | 不需要 |
| 广播 | 支持 | 不支持(用组播替代) |
七、IP协议与上层/下层的关系
┌─────────────────────────────────────────┐
│ 应用层(HTTP、FTP、DNS等) │
├─────────────────────────────────────────┤
│ 传输层(TCP、UDP) │
│ TCP段/UDP数据报 │
├─────────────────────────────────────────┤
│ 网络层(IP) ← 我们在这里 │
│ IP数据报 │
├─────────────────────────────────────────┤
│ 数据链路层(以太网、Wi-Fi等) │
│ 帧 │
├─────────────────────────────────────────┤
│ 物理层(双绞线、光纤等) │
└─────────────────────────────────────────┘
封装过程:
用户数据 → TCP头 + 数据 = TCP段 → IP头 + TCP段 = IP数据报 → 以太网头 + IP数据报 = 以太网帧
八、IP协议的局限性
| 问题 | 说明 | 解决方案 |
|---|---|---|
| 不可靠 | 数据报可能丢失 | 上层TCP提供可靠传输 |
| 无顺序保证 | 数据报可能乱序 | TCP负责排序 |
| 无重复检测 | 可能收到重复包 | TCP去重 |
| 无差错控制 | 数据部分错误不检测 | 上层协议(如TCP/UDP)提供校验 |
| 无拥塞控制 | IP不感知网络拥塞 | TCP实现拥塞控制 |
| 无流量控制 | IP不协调收发速度 | TCP实现流量控制 |
关键理解 :IP的"不可靠"是设计选择,而不是缺陷。将可靠性放在传输层(TCP)实现,使IP可以保持简单、高效,适用于各种应用场景。
!!物理地址和IP地址、地址解析协议与网际协议的关联 --->> 点击 跳转