跳到主要内容

IP 协议

1. IP 协议概述

IP(Internet Protocol)是网络层的核心协议,负责在不同网络之间转发数据包。想象一下邮政系统:IP 就像是邮政编码和地址标识系统,确保数据包能从源头正确送达目标。

核心职责:

  • 📍 寻址:为每个设备分配唯一的 IP 地址
  • 🚚 路由:找到从源到目标的最佳路径
  • 📦 分片:将大数据包拆分成小包传输
  • 🔄 重组:在目标端重新组装数据包

2. IPv4 数据包结构详解

IPv4 头部是理解 IP 协议的核心,每个字段都有特定用途:

关键字段详解

🔢 版本 (Version, 4位)

IPv4: 0100 (二进制) = 4 (十进制)
IPv6: 0110 (二进制) = 6 (十进制)

意义:告诉路由器用哪个版本的 IP 协议解析这个包

📏 头部长度 (IHL, 4位)

最小值: 5 (表示 5×4 = 20字节,无选项字段)
最大值: 15 (表示 15×4 = 60字节,包含选项字段)

实际应用:路由器通过这个字段知道 IP 头部在哪里结束,数据部分从哪里开始

🚦 服务类型 (ToS, 8位)

现在称为 DSCP (Differentiated Services Code Point):

场景举例

  • 视频会议:设置高优先级,减少卡顿
  • 文件备份:设置低优先级,不影响正常业务

📦 总长度 (Total Length, 16位)

范围: 20 - 65535 字节
包含: IP头部 + 数据部分的总长度

🏷️ 标识符 (Identification, 16位)

用于分片重组:

🚩 标志位 (Flags, 3位)

位0: 保留,必须为0
位1: DF (Don't Fragment) - 禁止分片
位2: MF (More Fragments) - 还有更多分片

实际应用

# 测试路径MTU发现
ping -D www.baidu.com # 设置DF位,发现最大不分片包大小

📍 分片偏移 (Fragment Offset, 13位)

以8字节为单位的偏移量:

生存时间 (TTL, 8位)

防止数据包在网络中无限循环:

实际应用

# traceroute 工具就是利用 TTL 机制
traceroute www.baidu.com
# 发送 TTL=1,2,3... 的包,观察每一跳的路由器响应

🔧 协议 (Protocol, 8位)

标识上层协议类型:

1  = ICMP (Internet Control Message Protocol)
6 = TCP (Transmission Control Protocol)
17 = UDP (User Datagram Protocol)
89 = OSPF (Open Shortest Path First)

头部校验和 (Header Checksum, 16位)

只校验 IP 头部,不包括数据部分:

为什么每跳都要重算? 因为 TTL 字段在每个路由器都会减1,头部内容改变了。

3. IP 地址与子网

IP 地址结构

地址分类与用途

实际网络规划示例

公司网络规划:
总部: 10.1.0.0/16 (可容纳65534台设备)
分公司1: 10.2.0.0/24 (可容纳254台设备)
分公司2: 10.3.0.0/24 (可容纳254台设备)
DMZ区: 10.1.100.0/24 (服务器区域)

4. 路由转发流程

路由决策过程

路由表结构

最长前缀匹配示例

目标IP: 192.168.1.100

路由表:
192.168.0.0/16 -> 网关A
192.168.1.0/24 -> 网关B (匹配长度更长,选择这个)
0.0.0.0/0 -> 默认网关

选择: 192.168.1.0/24,因为 /24 比 /16 更具体

5. 分片与重组机制

分片触发条件

分片重组过程

分片问题与解决

# 问题:分片增加丢包风险
# 解决:路径MTU发现
ping -M do -s 1472 目标IP # 测试不分片的最大包大小

# 应用层解决方案
# TCP: 自动MSS协商,避免IP层分片
# UDP: 应用程序控制包大小

6. ICMP 协议 - IP 的好帮手

ICMP 是 IP 协议的重要补充,负责错误报告和网络诊断:

常用网络诊断工具

7. IPv4 vs IPv6 对比

8. 实际网络问题排查

场景1:网站访问缓慢

# 1. 检查本地到服务器的路径
traceroute www.example.com

# 2. 检查MTU路径发现
ping -M do -s 1472 www.example.com

# 3. 检查DNS解析
nslookup www.example.com

# 4. 分析可能原因
# - 路径中某个路由器负载高
# - MTU不匹配导致分片
# - DNS解析慢

场景2:数据包丢失

场景3:IP 地址冲突

# 检测IP冲突
arping -D 192.168.1.100 # 检测IP是否已被使用

# 查看ARP表
arp -a | grep 192.168.1.100

# 解决方案
# 1. 使用DHCP避免手动分配
# 2. 维护IP地址分配表
# 3. 启用IP冲突检测

9. 性能优化建议

网络层优化

监控关键指标

# 1. 延迟监控
ping -c 100 目标IP | tail -1

# 2. 吞吐量测试
iperf3 -c 服务器IP -t 60

# 3. 丢包率检查
mtr --report --report-cycles 100 目标IP

# 4. 路由稳定性
while true; do traceroute 目标IP; sleep 60; done