网络基础12 分钟阅读更新于 2026-07-30

MTU、IP 分片和 MSS:网络包太大时会发生什么

围绕MTU、IP 分片重组、TCP MSS 和协议栈发送流程章节,讲清数据包大小限制、分片代价和 TCP 如何避免 IP 层分片。

相关工具

包不是想多大就多大

前面讲 IP、ARP、路由器转发时,我们一直把网络包当成一个整体:应用层数据加上 TCP 或 UDP 头,再加 IP 头,再交给网络接口层发出去。但真实链路有尺寸限制。一个包太大,不能原样塞进下一段链路。

资料 在 IP 分片与重组部分提到,每种数据链路的最大传输单元 MTU 都不相同。比如 FDDI 的 MTU 是 4352 字节,以太网常见 MTU 是 1500 字节。不同链路设计目的不同,能承载的最大数据也不同。

所以 MTU 先解决一个很实际的问题:这一段链路一次最多能承载多大的网络包?超过这个大小,IP 层就可能把数据报拆成多个分片再发送。

MTU 是链路层的上限

MTU 是 Maximum Transmission Unit,最大传输单元。它不是应用层的限制,也不是 HTTP 或数据库协议的限制,而是某种数据链路一次能传输的最大帧载荷大小。以太网里常见的 MTU 是 1500 字节。

这里容易混的是“应用数据大小”和“网络包大小”。如果应用层给 TCP 5000 字节数据,TCP 和 IP 不会直接把 5000 字节裸着发出去。它要加 TCP 头、IP 头,到了网络接口层还要加帧头帧尾。MTU 看的是 IP 数据报能不能放进当前链路,不是只看应用数据本身。

相关的协议栈发送流程里也写到,网络层会给数据包增加 IP 头,然后通过查询路由表确认下一跳,并按照 MTU 大小进行分片。也就是说,MTU 是网络层往下交付时必须面对的边界。

IP 分片:超过 MTU 就拆开走

当 IP 数据包大小大于 MTU 时,IP 数据报就会被分片。分片后的每一片都会带上 IP 头,其中会包含能让目标主机重组的信息,比如同一个标识、片偏移,以及后面是否还有更多分片的标志。

这些分片会分别在网络里传输。中间路由器只负责转发,不会把分片提前拼回去。资料 明确说,经过分片之后的 IP 数据报在重组时,只能由目标主机进行,路由器不会进行重组。

这点很重要。路由器如果每一跳都重组再拆分,转发压力会很大。更合理的做法是把分片当成普通 IP 包继续往下送,等它们都到达目标主机后,再由目标主机按偏移和标识重新拼出原始 IP 数据报。

MTU 与 IP 分片流程图,展示以太网 MTU 1500 字节、IP 分片、片偏移、MF 标志和目标主机重组
MTU 与 IP 分片

IP 数据报超过链路 MTU 时会被拆成多个分片;分片只在目标主机重组,任一分片丢失会导致整个数据报作废。

分片的代价:丢一片,整包作废

IP 分片看起来能解决包太大的问题,但代价不小。文中说,在分片传输中,一旦某个分片丢失,就会造成整个 IP 数据报作废。因为目标主机只有拿到全部分片,才能重组出完整数据报。

这意味着分片越多,整体失败概率越高。假设一个 IP 数据报被拆成 5 片,只要其中 1 片丢了,另外 4 片即使成功到达也没有意义。目标主机无法拼出完整数据,只能丢弃。

分片还会增加处理成本。每个分片都有自己的 IP 头,网络设备要转发更多包,目标主机要维护重组状态。网络质量不稳定时,过多分片会让丢包、重传和延迟问题更明显。

MSS:TCP 尽量别让 IP 去分片

正因为 IP 分片代价高,TCP 引入了 MSS。资料 在 TCP 选项部分写到,MSS 是最大报文段长度选项,TCP 连接初始化时,通信双方会用它协商最大报文段长度。

常见情况下,TCP 模块会把 MSS 设置为 `MTU - 40` 字节。这里的 40 字节通常是 20 字节 IP 头和 20 字节 TCP 头。以太网 MTU 是 1500 字节时,常见 MSS 就是 1460 字节。

这样一来,TCP 每次交给 IP 层的数据段不会太大。加上 TCP 头和 IP 头以后,整个 IP 数据报仍然不超过 MTU,就能尽量避免本机发生 IP 分片。

MSS 避免 TCP 数据触发 IP 分片示意图,展示 MSS 等于 MTU 减 IP 头和 TCP 头,以及 TCP 分段和 IP 分片对比
MSS 如何避免 TCP 数据触发 IP 分片

TCP 在连接建立时协商 MSS,并按 MSS 切分数据,让每个 IP 包尽量不超过 MTU。

TCP 分段和 IP 分片不是一回事

TCP 分段发生在传输层,IP 分片发生在网络层。资料 第 87 页讲浏览器发送 HTTP 请求时提到,如果 HTTP 请求消息比较长,超过 MSS 的长度,TCP 会把 HTTP 数据拆成一块块发送,而不是一次性发送所有数据。每块数据加上 TCP 头后,再交给 IP 模块。

这和 IP 分片的思路不一样。TCP 知道连接状态、序列号、ACK、重传等机制。某个 TCP 段丢了,TCP 可以根据确认和重传机制补发对应段。IP 分片则更底层,目标主机必须等所有分片到齐才能重组,丢一片就很麻烦。

所以很多时候我们希望由 TCP 在进入 IP 层之前就把数据切到合适大小,而不是让 IP 层被动分片。MSS 的作用就在这里:提前控制每个 TCP 段的数据部分大小。

UDP 更容易踩到分片问题

资料 在 TCP 与 UDP 区别里也提到,TCP 数据大于 MSS 时会在 TCP 层分片传输,到达目的地后也在传输层合并;UDP 数据大于 MTU 时会在 IP 层分片,并在 IP 层合并。

这意味着 UDP 应用如果一次发送很大的数据报,就更容易触发 IP 分片。UDP 本身没有 TCP 那样的连接、确认、重传和 MSS 保护。某个 IP 分片丢失后,上层看到的往往就是整个 UDP 数据报没了。

所以做实时音视频、游戏、日志上报、DNS 扩展报文等 UDP 场景时,不能只想着“UDP 快”。数据报大小也要控制。包太大,速度优势可能被分片、丢包和重试吞掉。

路径上最小的 MTU 才是关键

一台机器本地网卡 MTU 是 1500,不代表整条路径都能稳定承载 1500 字节的 IP 包。中间链路可能有隧道、PPPoE、VPN、云网络封装,它们会吃掉一部分空间,实际可用 MTU 可能更小。

当某段路径的 MTU 更小,包就可能在那里被分片,或者因为设置了禁止分片而被丢弃,并返回 ICMP 差错报文。上一节讲 ICMP 时提到过,ICMP 可以报告 IP 包被废弃的原因,这类信息在路径 MTU 发现里很有用。

现实中有些网络会屏蔽 ICMP,导致路径 MTU 发现不顺,表现成小请求正常、大响应卡住、上传文件异常、TLS 握手后无数据等问题。遇到这类现象,MTU 不是第一个想到的点,但值得放进排查清单。

为什么 IPv6 更强调源端处理

上一篇讲 IPv6 首部时提到,IPv6 不允许中间路由器进行分片与重组,分片只能由源主机和目标主机处理。这个设计和本篇的主题正好接上:分片很耗时,路由器越少做,转发越简单。

IPv4 里中间路由器可能会分片,IPv6 则把这件事推回端系统。源主机需要更认真地知道路径能承载多大的包,避免发出中间链路无法处理的大包。这样路由器不用在路上反复拆包,网络核心更专注于转发。

这也说明 MTU、MSS、ICMP 不是孤立知识。MTU 是链路限制,MSS 是 TCP 对这个限制的适配,ICMP 能反馈路径上的尺寸问题,IPv6 则把分片责任进一步收束到端系统。

排查时看哪些现象

如果小包能通、大包不通,可以怀疑 MTU。比如 ping 小包正常,带较大包长就丢;网页能打开首页,但下载、上传、接口大响应经常卡住;VPN 里访问某些站点异常。这类问题都可能和路径 MTU 有关。

如果 TCP 连接建立正常,但传输大数据时频繁重传,要看 MSS 是否协商合理,隧道或代理有没有改变实际路径 MTU。抓包时可以关注 TCP 握手里的 MSS 选项,也可以看是否出现分片或 ICMP fragmentation needed 之类提示。

如果是 UDP 应用,尤其要控制单个数据报大小。UDP 没有 TCP 的 MSS 协商,不要默认底层会舒服地替你处理大包。应用层自己拆小一点,往往比交给 IP 分片更稳。

面试里怎么讲

如果被问 MTU,可以这样答:MTU 是某种数据链路一次能传输的最大单元,不同链路 MTU 不同,以太网常见 MTU 是 1500 字节。IP 数据包超过 MTU 时可能发生 IP 分片。

如果被问 IP 分片的代价,就说分片后的 IP 数据报只能在目标主机重组,路由器不负责重组;任一分片丢失,整个 IP 数据报都会作废,所以分片会放大丢包影响,也会增加处理成本。

如果被问 MSS,就说 MSS 是 TCP 最大报文段长度,连接建立时双方通过 TCP 选项协商。常见情况下 MSS 等于 MTU 减 IP 头和 TCP 头,比如以太网 1500 减 20 减 20 得到 1460。TCP 按 MSS 分段,可以尽量避免 IP 层分片。

常见问题

MTU 和 MSS 有什么区别?

MTU 是链路层一次能承载的最大网络包大小;MSS 是 TCP 数据部分的最大长度,通常按 MTU 减去 IP 头和 TCP 头计算。

IP 分片为什么不推荐?

分片只在目标主机重组,任一分片丢失都会导致整个 IP 数据报作废,还会增加转发和重组成本。

UDP 大包为什么更容易出问题?

UDP 没有 TCP 的 MSS 协商和可靠重传保护,发送超过 MTU 的大数据报时更容易触发 IP 分片,分片丢失会让整个 UDP 数据报失败。

计算机网络

继续阅读

返回专题