Skip to content

模型Model

路径MTU与IP分片

Path MTU · IP fragmentation · PMTUD

按每跳MTU算IPv4分片偏移与重组范围,分清IPv6源端分片、路径探测与TCP分段。

形式陈述 ​

一条链路的MTU是它能承载的最大IP数据报长度,包含IP首部,不包含链路首尾。固定路径的路径MTU是沿途各链路MTU的最小值。路径或封装变化后,这个值也可能变化。

IPv4在允许分片(DF=0)时,可将过大的数据报拆成若干IP分片。每片有自己的IP首部,载荷是原IP载荷的一个区间。Fragment Offset以8字节为单位;除最后一片外,载荷长度须为8的倍数。MF=1表示后面仍有原数据报的字节,MF=0标出末端。目的端依据源、目的、协议和Identification等字段归组,再按偏移重组;路由器不替上层可靠重传缺片。

以下仅计算首部恒为20字节、无选项、起初未分片的IPv4数据报。出链路MTU为 M≥68 字节时,非末片最大载荷是

8⌊M−208⌋.

必须同时检查每片总长度不超过 M、区间连续覆盖原载荷且无重叠。真实选项、对已有分片再次分片和恶意重叠需更完整规则,本式不覆盖它们。

IPv6路由器不执行这种逐跳分片。过大的包被丢弃并产生Packet Too Big;需要分片时由源节点加入Fragment首部。IPv4的DF与“需要分片”错误、IPv6的Packet Too Big都可帮助源端更新路径MTU估计,但反馈丢失或被过滤会造成黑洞。路径MTU探测不是一次握手就永久获知真值。

直觉

MTU限制一个下层盒子装得下多少,不限制整项应用任务有多大。大文件可以被TCP切成许多段,而某个TCP段承载的IP数据报又可能受MTU约束。TCP分段发生在传输层,IP分片发生在网络层,重组位置也不同。

分片没有给丢包增加修复能力。一份数据报需要所有必要片段才能重组;其中一片缺失,已经到达的其余片段也可能在重组超时后被丢弃。

例子与边界

原IPv4总长3020字节,含20字节首部与3000字节载荷,DF=0,出链路MTU=1500。最大非末片载荷为1480。三片账本如下:

原载荷区间 载荷长度 IP总长 Offset字段 MF
[0,1480) 1480 1500 0 1
[1480,2960) 1480 1500 185 1
[2960,3000) 40 60 370 0

偏移185与370分别还原为1480与2960字节。若第三片先到,接收者知道终点为3000,却不能凭此交付缺失前缀;只有区间全部覆盖才得到原数据报。这里多出两个IP首部,网络层发送总字节为3060,而不是3020。

若同一原包DF=1,路由器不能按上表分片;它会丢弃并按规范条件返回错误。源端若无视新MTU反复发送同样的大包,重试次数不会解决大小矛盾。

对无扩展首部的IPv6,路径MTU=1280且TCP首部20字节时,不分片的数据载荷上限为 1280−40−20=1220 字节。加入TCP选项或IPv6扩展首部后还要扣除其长度;“MTU减40”不是跨版本通用公式。

推论与应用

设三片分别独立地以概率 1−p 到达,一次重组成功率是 (1−p)3;这是额外独立性模型下的算式,真实丢包可能相关。它说明应区分每包丢失率与一整份被分片数据报的成功率。

TCP的MSS通告约束对端接收的单段数据大小,并不单独给出路径上所有链路的MTU。可靠传输仍需将MSS、IP首部开销和路径探测共同纳入分段决策。

参考资料
  • RFC 791,§§2.3、3.1–3.2:IPv4分片、偏移与重组。
  • RFC 8200,2017,§§4.5、5:IPv6 Fragment首部、仅源端分片及最小链路MTU。
  • RFC 1191,§3,IPv4 PMTUD;RFC 8201,2017,§§3、5,IPv6路径MTU发现。这里只描述基本反馈机制,不宣称覆盖后续packetization-layer探测算法。
关系图谱3 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组