加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 酷站推荐 > 酷站 > 正文

为什么 TCP/IP 协议会拆分数据

发布时间:2020-02-19 05:16:00 所属栏目:酷站 来源:站长网
导读:TCP/IP 协议簇建立了互联网通信协议的概念模型,该协议簇的两个主要协议就是 TCP 和 IP 协议。这两个协议不仅能够保证数据会从源机器的源进程发送到目标机器的目标进程中,还能保证数据的不重不漏以及发送的顺序。 图 1 - TCP/IP 协议簇 当应用层协议使用

TCP 协议为了保证可靠性,会通过 IP 协议的 MTU 计算出 MSS 并根据 MSS 分段避免 IP 协议对数据包进行分片。因为 IP 协议对数据包的分片对上层是透明的,如果协议不根据 MTU 做一些限制,那么 IP 协议的分片会导致部分数据包失去传输层协议头,一旦数据包发生丢失就只能丢弃全部数据。

我们可以通过一个例子分析 MSS 存在的必要性。如下图所示,假设 TCP 协议中不存在 MSS 的概念,因为每个数据段的大小没有上限,当 TCP 协议交给 IP 层发送两个 1600 字节(包括 IP 和 TCP 协议头)的数据包时,由于物理设备的限制,IP 协议的路径 MTU 为 1500 字节,所以 IP 协议会对数据包分片:

为什么 TCP/IP 协议会拆分数据

图 4 - 分片传输的 TCP 数据

四个数据包中只有两个会包含 TCP 协议头,即控制位、序列号等信息,剩下的两个数据包中不包含任何信息。因为网络无法保证数据包的送达顺序,所以当上述四个数据包乱序到达目的主机时,因为数据包中 TCP 协议头的缺失,所以接收方没有办法对数据包进行重组,自然也就无法保证可靠性和顺序了。

总结

数据拆分的根本原因说到底还是物理设备的限制,不过每一层协议都受限于下一层协议做出的决定,并依赖下层协议重新决定设计和实现的方法。虽然 TCP/IP 协议在传输数据时都需要对数据进行拆分,但是它们做出拆分数据的设计基于不同的上下文,也有着不同的目的,我们在这里总结一下两个网络协议做出类似决定的原因:

IP 协议拆分数据是因为物理设备的限制,一次能够传输的数据由路径上 MTU 最小的设备决定,一旦 IP 协议传输的数据包超过 MTU 的限制就会发生丢包,所以我们需要通过路径 MTU 发现获取传输路径上的 MTU 限制;

TCP 协议拆分数据是为了保证传输的可靠性和顺序,作为可靠的传输协议,为了保证数据的传输顺序,它需要为每一个数据段增加包含序列号的 TCP 协议头,如果数据段大小超过了 IP 协议的 MTU 限制,接收方就无法按顺序对数据包进行重组,TCP 协议也就无法提供可靠性和顺序的保证;

通过本文的分析,相信各位读者不仅了解了为什么 TCP/IP 协议会拆分数据,也了解了为什么 UDP 协议的数据报不应该超过 MTU - 28 字节,一旦超过该限制,IP 协议的分片机制会增加 UDP 数据报无法重组的可能性]。到最后,我们还是来看一些比较开放的相关问题,有兴趣的读者可以仔细思考一下下面的问题:

IP 协议的分片机制都会导致哪些问题?

TCP 连接双方是如何确定连接的 MSS?这个值是动态的么?

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读