Computer NetworkNotes

第 04 章:IP 与路由

zjc 于 2026-01-04 发布

这是《计算机网络 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 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     运维子网

原则:

  1. 预留扩展空间;
  2. 按环境和用途分层;
  3. 避免不同 VPC 或数据中心重复网段;
  4. 数据库子网不放公网网关;
  5. 负载均衡、应用、数据库分层管理;
  6. 记录每个网段的用途。

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

路由选择过程:

  1. 取目的 IP;
  2. 查找所有匹配路由;
  3. 选择前缀最长的路由;
  4. 确定下一跳和出接口;
  5. 通过 ARP 或邻居发现得到下一跳 MAC;
  6. 封装并发送帧。

4.4 默认网关与策略路由

默认路由:

ip route add default via 192.168.1.1 dev eth0

策略路由可以根据源地址、入口接口或标记选择不同表:

ip rule show
ip route show table 100

常见场景:

  1. 多网卡分别访问不同运营商;
  2. 容器或虚拟机流量走独立表;
  3. VPN 与默认路由冲突;
  4. 云环境多路由表关联不同子网;
  5. 服务流量与存储流量分走不同路径。

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

解读:

  1. 某跳 * * * 不一定代表故障,可能限速 ICMP;
  2. 后续跳全部超时更值得关注;
  3. 延迟逐跳上升且持续,可能路径异常;
  4. 中间跳丢包但终点不丢,可能只是控制平面限速;
  5. 最好用 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
有效载荷减少

典型现象:

  1. ping 小包通;
  2. TCP 握手成功;
  3. 大请求或响应卡住;
  4. SSL 握手在证书阶段失败;
  5. 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

特点:

  1. 地址空间大;
  2. SLAAC 支持无状态自动配置;
  3. NDP 替代 ARP;
  4. 地址结构常为 /64 子网;
  5. 内置 IPsec 支持但不是自动启用;
  6. NAT 不是必需设计。

常用命令:

ip -6 addr
ip -6 route
ping -6 2001:db8::1
traceroute -6 2001:db8::1

应用兼容要点:

  1. socket API 使用 AF_INET6 或双栈;
  2. URL 中 IPv6 需要方括号;
  3. DNS 需要同时考虑 A 和 AAAA;
  4. 防火墙必须显式治理 IPv6;
  5. 监控和审计不能只统计 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

判断顺序:

  1. 本机地址是否正确;
  2. 链路是否 up;
  3. 网关是否可达;
  4. 路由是否指向预期接口;
  5. 目标是否在线;
  6. 中间路径哪里断开;
  7. 安全组或防火墙是否拦截;
  8. 服务是否监听端口。

本章小结

IP 层提供寻址和路由,子网决定本地与跨网段通信方式,路由表通过最长前缀匹配选择路径。TTL 支持 traceroute,MTU 和 MSS 影响大包传输,IPv6 引入更大地址空间和 NDP。排查连接问题应先看本机地址与路由,再测试网关、路径、端口和安全策略。

思考题

  1. 为什么路由匹配使用最长前缀而不是最先匹配?
  2. TTL 如何支持 traceroute?
  3. TCP 握手成功但大文件传输卡住,可能与什么有关?
  4. IPv6 环境下 ARP 由什么协议替代?
  5. 为一个三可用区 VPC 设计 IP 和路由规划。