IP分片的隐患,以及TCP分片

好的,我们来用一个生活中的例子更详细地解释 MTU、MSS,以及 IP 和 TCP 分片。

MTU 和 MSS 的概念

  1. MTU(Maximum Transmission Unit,最大传输单元)
  • 假设你搬家,需要用卡车搬运家具。

  • 卡车的最大承载重量是 1500 公斤(MTU)。

  • 任何超过这个重量的家具都需要拆分成多个部分运送。

  1. MSS(Maximum Segment Size,最大分段大小)
  • 每件家具在装上卡车之前,需要包装和保护。

  • 包装和保护材料(相当于 IP 和 TCP 头部)总共占用 40 公斤。

  • 所以,每辆卡车实际能装载家具的最大重量是 1460 公斤(MSS)。

IP 层分片的隐患

假设你有一个非常大的家具,重量是 3000 公斤(大于 MTU 的大小)。按照卡车的规定,你必须将其拆分成两个部分,每部分不超过 1500 公斤。这个过程就像 IP 层进行分片:

  • 你需要把家具拆成两个部分,分别装上两辆卡车(分片)。

  • 如果在运输过程中,任何一辆卡车(分片)丢失或损坏,整个家具都无法完整到达目的地。

  • 因为只有当所有卡车(分片)都到达时,家具才能重新组装(IP 层的重组)。

  • 如果一辆卡车丢失,你必须重新发送整个家具的所有部分,这非常耗时且低效。

TCP 协商 MSS 的好处

为了避免这种低效,搬家公司(TCP 协议)在你搬家前会和你协商:每件家具的最大重量不能超过 1460 公斤(MSS),这样每辆卡车加上包装和保护材料的总重量不会超过 1500 公斤(MTU)。这样:

  • 你会提前把每件家具都拆成不超过 1460 公斤的部分(TCP 分段)。

  • 每个部分单独装车,每辆卡车的总重量不超过 1500 公斤(MTU),不需要再进行分片(IP 分片)。

  • 如果某辆卡车丢失,只需要重新发送那部分家具,而不是整个家具。

  • 大大提高了运输(数据传输)的效率,减少了重传的次数。

实际的传输过程

  1. 协商阶段
  • 你和搬家公司(TCP 握手阶段)协商好每件家具的最大重量(MSS)。
  1. 打包和运输
  • 你把家具拆成不超过 1460 公斤的部分分别装车。

  • 每辆卡车加上包装和保护材料,总重量不超过 1500 公斤(MTU)。

  • 搬家公司按卡车运输,每辆卡车都在规定重量内,不需要再分片(IP 不用再分片)。

  1. 丢失和重传
  • 如果某辆卡车在运输过程中丢失,只需要重新打包那部分家具重发一辆卡车。

  • 而不是整个家具重新拆分装车再运输。

具体案例

假设你需要传输一个 3000 字节的消息,MTU 是 1500 字节,MSS 是 1460 字节:

  1. 分段
  • 数据被分成两个 TCP 分段:第一个分段 1460 字节,第二个分段 1540 字节(1460 + 80 字节的头部)。
  1. 封装
  • 第一个 TCP 分段封装后总长 1500 字节,包括 IP 头部和 TCP 头部。

  • 第二个 TCP 分段也封装后总长 1500 字节。

  1. 传输
  • 每个分段作为一个独立的 IP 包进行传输,不需要进行 IP 层分片。
  1. 重传机制
  • 如果某个 IP 包丢失,例如第二个 IP 包,接收方不会发送 ACK 确认。

  • 发送方会触发重传机制,只重新发送丢失的分段,而不是整个数据流。

通过这种方式,搬家公司(TCP 协议)确保了家具搬运(数据传输)的高效性和可靠性。这样避免了 IP 层分片带来的低效和潜在问题,提高了整体的传输效率和可靠性。

  • MTU:一个网络包的最大长度,以太网中一般为 1500 字节;

  • MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度;

如果在 TCP 的整个报文(头部 + 数据)交给 IP 层进行分片,会有什么异常呢?

当 IP 层有一个超过 MTU 大小的数据(TCP 头部 + TCP 数据)要发送,那么 IP 层就要进行分片,把数据分片成若干片,保证每一个分片都小于 MTU。把一份 IP 数据报进行分片以后,由目标主机的 IP 层来进行重新组装后,再交给上一层 TCP 传输层。

这看起来井然有序,但这存在隐患的,那么当如果一个 IP 分片丢失,整个 IP 报文的所有分片都得重传

因为 IP 层本身没有超时重传机制,它由传输层的 TCP 来负责超时和重传。

当某一个 IP 分片丢失后,接收方的 IP 层就无法组装成一个完整的 TCP 报文(头部 + 数据),也就无法将数据报文送到 TCP 层,所以接收方不会响应 ACK 给发送方,因为发送方迟迟收不到 ACK 确认报文,所以会触发超时重传,就会重发「整个 TCP 报文(头部 + 数据)」。

因此,可以得知由 IP 层进行分片传输,是非常没有效率的。

所以,为了达到最佳的传输效能 TCP 协议在建立连接的时候通常要协商双方的 MSS 值,当 TCP 层发现数据超过 MSS 时,则就先会进行分片,当然由它形成的 IP 包的长度也就不会大于 MTU ,自然也就不用 IP 分片了。

经过 TCP 层分片后,如果一个 TCP 分片丢失后,进行重发时也是以 MSS 为单位,而不用重传所有的分片,大大增加了重传的效率。

相关推荐
狐5732 分钟前
2025-06-02-IP 地址规划及案例分析
网络·网络协议·tcp/ip
黎茗Dawn1 小时前
5.子网划分及分片相关计算
网络·智能路由器
m0_637146931 小时前
计算机网络基础总结:TCP/IP 模型、TCP vs UDP、DNS 查询过程
笔记·tcp/ip·计算机网络
恰薯条的屑海鸥1 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)
网络·学习·安全·web安全·渗透测试
科技小E1 小时前
口罩佩戴检测算法AI智能分析网关V4工厂/工业等多场景守护公共卫生安全
网络·人工智能
御承扬1 小时前
从零开始开发纯血鸿蒙应用之网络检测
网络·华为·harmonyos
DevSecOps选型指南10 小时前
2025软件供应链安全最佳实践︱证券DevSecOps下供应链与开源治理实践
网络·安全·web安全·开源·代码审计·软件供应链安全
利刃大大11 小时前
【在线五子棋对战】二、websocket && 服务器搭建
服务器·c++·websocket·网络协议·项目
国科安芯11 小时前
抗辐照MCU在卫星载荷电机控制器中的实践探索
网络·嵌入式硬件·硬件工程·智能硬件·空间计算
EasyDSS12 小时前
国标GB28181设备管理软件EasyGBS远程视频监控方案助力高效安全运营
网络·人工智能