4.2 IP报文与路由转发


4.2 IP报文与路由转发

本节摘要:IP 首部是数据包的全球护照,关键字段包括 TTL、协议号、标识与片偏移;路由器逐跳用"最长前缀匹配"查表决定下一跳,再用 ARP 把下一跳 IP 翻译成 MAC 完成信封更换。本节逐字段解读首部、演示路由表匹配过程与 traceroute 输出,讲清"IP 不变、MAC 每跳换"这条旅程铁律。

领到身份,装进护照。这一节是整册"环球旅行"最核心的换乘戏码:数据包在路由器之间被一次次交棒。要看懂这场戏,先读懂护照上的每个栏目。

一、IP 首部逐栏解读

IPv4 首部(普通 20 字节,无选项时): 0 1 2 3 +-------+-------+-----------------------+-----------------------+ |版本 4 |首长 20| 服务类型 DSCP/ECN | 总长度 16b | +-------+-------+-----------------------+-----------------------+ | 标识 16b |标志 DF MF| 片偏移 13b | ← 分片三兄弟 +-----------------------+-----------------------+---------------+ | TTL 8b| 协议 8b | 首部校验和 16b | +-----------------------+-----------------------+---------------+ | 源 IP 地址 32b | +-------------------------------------------------------------+ | 目的 IP 地址 32b | +-------------------------------------------------------------+ 关键栏目导读: - TTL:每过一台路由器减 1,减到 0 即丢弃并回报。防止路由环路 造成数据包永生流浪。traceroute 正是故意制造 TTL 耗尽来绘制路径。 - 协议号:上层是谁。6 = TCP,17 = UDP,1 = ICMP。 路由器靠它把拆完封的载荷交给正确的上层模块。 - 标识 / 标志 / 片偏移:分片三兄弟。载荷超过链路 MTU 时 把一个大报文切成多个小片,各自独立路由,到目的地再重组。 - 首部校验和:只校验首部不校验数据,且每跳都要重算(因为 TTL 变了)。

分片值得展开一次完整过程:

背景:一个 4000 字节的 IP 报文(含 20B 首部)要过 MTU=1500 的链路。 切割:每个片最多装 1500 - 20 = 1480 字节载荷;1480 是 8 的倍数 (片偏移以 8 字节为单位,这是规定)。 片 1:载荷 1480B,偏移 0, MF=1(后面还有) 片 2:载荷 1480B,偏移 185, MF=1 片 3:载荷 1000B,偏移 370, MF=0(最后一片) 标识字段三片相同,目的主机据此认亲并按偏移拼回原文。 坑:任何一片丢失,整个报文作废重发(TCP 视角)—— 放大了丢包的代价。所以现代主机用 DF 标志(不许分片) 加路径 MTU 发现:宁可自己把 TCP 段切小,也不让路上分片。

二、路由表与最长前缀匹配

路由器转发决策就一句话:拿目的 IP 与表中每条前缀做与运算比较,命中者中选掩码最长的那条。为什么最长?前缀越长越具体——"交到某栋楼"永远比"交到某条街"精确。

# 一台路由器的路由表(简化) Destination Netmask Gateway Interface 0.0.0.0 0.0.0.0 203.0.113.1 eth0 ← 默认路由 10.1.0.0 255.255.0.0 10.0.0.2 eth1 ← /16 10.1.8.0 255.255.255.0 10.0.0.9 eth2 ← /24 203.0.113.0 255.255.255.252 直接连接 eth0 收到目的地址 10.1.8.77 的报文,匹配过程: 0.0.0.0/0 :任何地址都命中(前缀长度 0) 10.1.0.0/16 :10.1.8.77 属于 10.1.x.x → 命中(前缀 16) 10.1.8.0/24 :10.1.8.77 属于 10.1.8.x → 命中(前缀 24)★ 三条都命中,选前缀最长的 /24 → 交给网关 10.0.0.9 从 eth2 发出。 若目的是 8.8.8.8:只有默认路由命中 → 全部甩给运营商, "查无具体路线就上国道"就是默认路由的意义。

三、换乘现场:IP 不变、MAC 每跳换

路由器是链路层设备箱里的网络层大脑:它拆掉旧以太网信封,查表定下一跳,再用 ARP 问出下一跳的 MAC,套上新信封发出。全程 IP 首部里的源与目的地址纹丝不动(TTL 减一)。

图:三跳旅程中的信封更换

图:三跳旅程中的信封更换

用 traceroute 亲眼看看这条换乘链(原理:依次发 TTL=1,2,3... 的探测包,每台路由器耗尽 TTL 时用 ICMP 回报自己的地址):

$ traceroute -n example.com 1 192.168.1.1 0.87 ms ← 家里网关(同时完成 NAT) 2 100.64.12.1 3.21 ms ← 运营商接入侧 3 219.158.32.5 12.44 ms ← 骨干网,延迟开始跳升 4 219.158.98.61 11.98 ms 5 * * * ← 这一跳不回 ICMP(被配置静音),正常现象 6 93.184.216.34 38.70 ms ← 到达 解读:第 3 跳后延迟从 3ms 跳到 12ms——出了同城; 若某跳开始延迟陡增且后续全高,拥塞点就在那一跳附近; 若某跳后全部超时,多半是路径断了或整段被静音, 需要换目标交叉验证,别只凭一行星号下结论。

💡 关键直觉:traceroute 每一跳的延迟只反映"去程那一段加该路由器应答的优先级",路由器忙时回应慢不代表转发慢。看到中间某跳数值大但终点正常,不用紧张。

本节要点回顾

  • 护照栏目:TTL 防永生、协议号定上层、分片三兄弟应付小 MTU 链路
  • 分片的代价:一片丢全盘重发,现代用路径 MTU 发现主动避免
  • 转发规则:最长前缀匹配,越具体越优先,默认路由兜底
  • 换乘铁律:IP 端到端不变、MAC 逐跳更换、TTL 每跳减一
  • traceroute 原理:故意耗尽 TTL 骗路由器自报家门,是第 8 章排错的主力工具

下一节回答两个遗留问题:路表是怎么算出来的,以及迷路时网络如何告知——ICMP 与路由协议。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U