这是《计算机网络 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 IP 层负责把包从源主机送到目标主机。它提供全局寻址和路由能力,但不保证可靠、有序和带宽。理解 IP 地址、子网、路由选择、TTL、分片和 IPv6,是定位“连不上”“绕路”“丢包”和“跨可用区延迟”的基础。
4.1 IPv4 地址与子网
IPv4 地址是 32 位:
192.168.1.10
子网掩码可以用点分十进制或前缀长度表示:
192.168.1.10/24
255.255.255.0
/24 表示前 24 位是网络前缀,后 8 位是主机部分。
特殊地址:
| 地址 | 含义 |
|---|---|
0.0.0.0/0 |
默认路由或任意地址 |
127.0.0.1 |
IPv4 回环 |
10.0.0.0/8 |
私网地址 |
172.16.0.0/12 |
私网地址 |
192.168.0.0/16 |
私网地址 |
169.254.0.0/16 |
链路本地地址 |
255.255.255.255 |
受限广播 |
查看地址:
ip addr show
ip -brief addr
4.2 公网、私网与地址规划
公网地址可全球路由,私网地址只在内部网络使用,通常经过 NAT 访问公网。
规划示例:
10.0.0.0/16 生产 VPC
10.0.0.0/20 公共子网
10.0.16.0/20 应用子网
10.0.32.0/20 数据子网
10.0.48.0/20 运维子网
原则:
- 预留扩展空间;
- 按环境和用途分层;
- 避免不同 VPC 或数据中心重复网段;
- 数据库子网不放公网网关;
- 负载均衡、应用、数据库分层管理;
- 记录每个网段的用途。
4.3 路由表
路由器根据最长前缀匹配选择路由。
示例:
Destination Next Hop Interface
0.0.0.0/0 10.0.0.1 eth0
10.0.0.0/16 10.0.0.1 eth0
10.20.0.0/16 10.20.0.1 eth1
172.17.0.0/16 docker0 docker0
查看:
ip route
ip route get 10.20.1.10
route -n
路由选择过程:
- 取目的 IP;
- 查找所有匹配路由;
- 选择前缀最长的路由;
- 确定下一跳和出接口;
- 通过 ARP 或邻居发现得到下一跳 MAC;
- 封装并发送帧。
4.4 默认网关与策略路由
默认路由:
ip route add default via 192.168.1.1 dev eth0
策略路由可以根据源地址、入口接口或标记选择不同表:
ip rule show
ip route show table 100
常见场景:
- 多网卡分别访问不同运营商;
- 容器或虚拟机流量走独立表;
- VPN 与默认路由冲突;
- 云环境多路由表关联不同子网;
- 服务流量与存储流量分走不同路径。
4.5 TTL 与 traceroute
IP 包每经过一台路由器,TTL 减 1。TTL 为 0 时路由器丢弃并返回 ICMP Time Exceeded。
traceroute 利用该机制探测路径:
traceroute 10.20.1.10
traceroute -I 10.20.1.10
traceroute -T -p 443 10.20.1.10
mtr 10.20.1.10
解读:
- 某跳
* * *不一定代表故障,可能限速 ICMP; - 后续跳全部超时更值得关注;
- 延迟逐跳上升且持续,可能路径异常;
- 中间跳丢包但终点不丢,可能只是控制平面限速;
- 最好用
mtr观察趋势。
4.6 IP 分片与 PMTUD
如果 IP 包大于出接口 MTU,且不可分片标志存在,则返回 ICMP Fragmentation Needed;否则进行分片。
TCP 通常在握手阶段协商 MSS,避免 IP 分片:
MTU 1500
IP Header 20
TCP Header 20
MSS 1460
隧道叠加会降低有效 MTU:
物理 MTU 1500
VXLAN + Overlay IP + UDP + VXLAN Header
有效载荷减少
典型现象:
- ping 小包通;
- TCP 握手成功;
- 大请求或响应卡住;
- SSL 握手在证书阶段失败;
- MSS 或 PMTUD 问题。
测试:
ping -M do -s 1472 10.20.1.10
tracepath 10.20.1.10
云环境和容器网络中应统一检查宿主机、虚拟网络、隧道和安全设备的 MTU。
4.7 IPv6
IPv6 地址为 128 位:
2001:db8:1:2::1/64
特点:
- 地址空间大;
- SLAAC 支持无状态自动配置;
- NDP 替代 ARP;
- 地址结构常为
/64子网; - 内置 IPsec 支持但不是自动启用;
- NAT 不是必需设计。
常用命令:
ip -6 addr
ip -6 route
ping -6 2001:db8::1
traceroute -6 2001:db8::1
应用兼容要点:
- socket API 使用
AF_INET6或双栈; - URL 中 IPv6 需要方括号;
- DNS 需要同时考虑 A 和 AAAA;
- 防火墙必须显式治理 IPv6;
- 监控和审计不能只统计 IPv4。
4.8 路由协议概览
| 协议 | 类型 | 常见场景 |
|---|---|---|
| 静态路由 | 手工配置 | 小规模、简单出口 |
| OSPF | IGP 链路状态 | 企业和数据中心内 |
| BGP | 路径向量 | 互联网、云互联、大型数据中心 |
| ECMP | 等价多路径 | Spine-Leaf、VXLAN |
生产应用通常不直接配置这些协议,但需要理解云 VPC 路由表、专线、对等连接和负载均衡路径可能受它们影响。
4.9 排障流程
连不上目标时:
ip addr
ip route
ping <gateway>
ping <target>
traceroute <target>
ip route get <target>
ss -ntp
判断顺序:
- 本机地址是否正确;
- 链路是否 up;
- 网关是否可达;
- 路由是否指向预期接口;
- 目标是否在线;
- 中间路径哪里断开;
- 安全组或防火墙是否拦截;
- 服务是否监听端口。
本章小结
IP 层提供寻址和路由,子网决定本地与跨网段通信方式,路由表通过最长前缀匹配选择路径。TTL 支持 traceroute,MTU 和 MSS 影响大包传输,IPv6 引入更大地址空间和 NDP。排查连接问题应先看本机地址与路由,再测试网关、路径、端口和安全策略。
思考题
- 为什么路由匹配使用最长前缀而不是最先匹配?
- TTL 如何支持 traceroute?
- TCP 握手成功但大文件传输卡住,可能与什么有关?
- IPv6 环境下 ARP 由什么协议替代?
- 为一个三可用区 VPC 设计 IP 和路由规划。