mportant;">
好的,我们来用一个生活中的例子更详细地解释 MTU、MSS,以及 IP 和 TCP 分片。
MTU 和 MSS 的概念
MTU(Maximum Transmission Unit,最大传输单元):
假设你搬家,需要用卡车搬运家具。
卡车的最大承载重量是 1500 公斤(MTU)。
任何超过这个重量的家具都需要拆分成多个部分运送。
MSS(Maximum Segment Size,最大分段大小):
IP 层分片的隐患
假设你有一个非常大的家具,重量是 3000 公斤(大于 MTU 的大小)。按照卡车的规定,你必须将其拆分成两个部分,每部分不超过 1500 公斤。这个过程就像 IP 层进行分片:
你需要把家具拆成两个部分,分别装上两辆卡车(分片)。
如果在运输过程中,任何一辆卡车(分片)丢失或损坏,整个家具都无法完整到达目的地。
因为只有当所有卡车(分片)都到达时,家具才能重新组装(IP 层的重组)。
如果一辆卡车丢失,你必须重新发送整个家具的所有部分,这非常耗时且低效。
TCP 协商 MSS 的好处
为了避免这种低效,搬家公司(TCP 协议)在你搬家前会和你协商:每件家具的最大重量不能超过 1460 公斤(MSS),这样每辆卡车加上包装和保护材料的总重量不会超过 1500 公斤(MTU)。这样:
你会提前把每件家具都拆成不超过 1460 公斤的部分(TCP 分段)。
每个部分单独装车,每辆卡车的总重量不超过 1500 公斤(MTU),不需要再进行分片(IP 分片)。
如果某辆卡车丢失,只需要重新发送那部分家具,而不是整个家具。
大大提高了运输(数据传输)的效率,减少了重传的次数。
实际的传输过程
协商阶段:
打包和运输:
你把家具拆成不超过 1460 公斤的部分分别装车。
每辆卡车加上包装和保护材料,总重量不超过 1500 公斤(MTU)。
搬家公司按卡车运输,每辆卡车都在规定重量内,不需要再分片(IP 不用再分片)。
丢失和重传:
具体案例
假设你需要传输一个 3000 字节的消息,MTU 是 1500 字节,MSS 是 1460 字节:
分段:
封装:
传输:
重传机制:
通过这种方式,搬家公司(TCP 协议)确保了家具搬运(数据传输)的高效性和可靠性。这样避免了 IP 层分片带来的低效和潜在问题,提高了整体的传输效率和可靠性。
如果在 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 为单位,而不用重传所有的分片,大大增加了重传的效率。
打赏支付宝微信扫一扫,打赏作者吧~
本文链接:https://www.kinber.cn/post/4495.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:
您阅读本篇文章共花了: