-
如果TCP 的整个报文(头部 + 数据)交给 IP 层进行分片,会有什么异常呢?
-
当 IP 层有一个超过 MTU 大小的数据(TCP 头部 + TCP 数据)要发送,那么 IP 层就要进行分片,把数据分片成若干片,保证每一个分片都小于 MTU。把一份 IP 数据报进行分片以后,由目标主机的 IP 层来进行重新组装后,在交给上一层 TCP 传输层。
-
这看起来井然有序,但这存在隐患的,*那么当如果一个 IP 分片丢失,整个 IP 报文的所有分片都得重传*。
-
因为 IP 层本身没有超时重传机制,它由传输层的 TCP 来负责超时和重传。
-
当接收方发现 TCP 报文(头部 + 数据)的某一片丢失后,则不会响应 ACK 给对方,那么发送方的 TCP 在超时后,就会重发「整个 TCP 报文(头部 + 数据)」。
-
因此,可以得知由 IP 层进行分片传输,是非常没有效率的。
-
所以,为了达到最佳的传输效能 TCP 协议在*建立连接的时候通常要协商双方的 MSS 值*,当 TCP 层发现数据超过 MSS 时,则就先会进行分组,当然由它形成的 IP 包的长度也就不会大于 MTU ,自然也就不用 IP 分片了。
为什么IP都可以分片了,还需要TCP分组?
最新推荐文章于 2023-04-10 14:55:38 发布