TCP 层的分段跟IP 层的分片之间的关系 MTU 和MSS 存在的关系
TCP 层的分段和IP 层的分片之间的关系 MTU 和MSS 存在的关系
首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层。但是对于分段来说,这是经常发生在UDP 传输层协议上的情况,对于传输层使用TCP 协议的通道来说,这种事情很少发生。
1,MTU (Maximum Transmission Unit ,MTU ),最大传输单元
(1)以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节。链路层的这个特性称作MTU 。不同类型的网络大多数都有一个上限。如果IP 层有一个数据要传,且数据的长度比链路层的 MTU 还大,那么IP 层就要进行分片(fragmentation ),把数据报分成若干片,这样每一个分片都小于MTU 。
(2)把一份IP 数据报进行分片以后,由到达目的端的IP 层来进行重新组装,其目的是使分片和重新组装过程对运输层(TCP/UDP)是透明的。由于每一分片都是一个独立的包,当这些数据报的片到达目的端时有可能会失序,但是在IP 首部中有足够的信息让接收端能正确组装这些数据报片。
(3)尽管IP 分片过程看起来透明的,但有一点让人不想使用它:即使只丢失一片数据也要重新传整个数据报。why ?因为IP 层本身没有超时重传机制------由更高层(比如TCP )来负责超时和重传。当来自TCP 报文段的某一片丢失后,TCP 在超时后会重发整个TCP 报文段,该报文段对应于一份IP 数据报(而不是一个分片),没有办法只重传数据报中的一个数据分片。
(4)使用UDP 很容易导致IP 分片,TCP 试图避免IP 分片。那么TCP 是如何试图避免I P 分片的呢?其实说白了,采用TCP 协议进行数据传输是不会造成IP 分片的,因为一旦T CP 数据过大,超过了MSS ,则在传输层会对TCP 包进行分段(如何分,见下文!),自然到了IP 层的数据报肯定不会超过MTU ,当然也就不用分片了。而对于UDP 数据报,如果U DP 组成的 IP 数据报长度超过了1500,那么IP 数据报显然就要进行分片,因为UDP 不能像TCP 一样自己进行分段。总结:UDP 不会分段,就由我IP 来分。TCP 会分段,当然也就不用我IP 来分了!
2,MSS (Maxitum Segment Size )最大分段大小的缩写,是TCP 协议里面的一个概念
(1)MSS 就是TCP 数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP 协议在建立连接的时候通常要协商双方的MSS 值,这个值TCP 协议在实现的时候往往用M TU 值代替(需要减去IP 数据包包头的大小20Bytes 和TCP 数据段的包头20Bytes )所以往往MSS 为1460。通讯双方会根据双方提供的MSS 值得最小值确定为这次连接的最大MS S 值。
(2)相信看到这里,还有最后一个问题:TCP 是如何实现分段的呢?其实TCP 无所谓分段,因为每个TCP 数据报在组成前其大小就已经被MSS 限制了,所以TCP 数据报的长度是不可能大于MSS 的,当然由它形成的IP 包的长度也就不会大于MTU ,自然也就不用IP 分片了。
简而言之:
1.IP 分片产生的原因是网络层的MTU ;TCP 分段产生原因是MSS.
2.IP 分片由网络层完成,也在网络层进行重组;TCP 分段是在传输层完成,并在传输层进行重组. //透明性
3. 对于以太网,MSS 为1460字节,而MUT 往往会大于MSS.
故采用TCP 协议进行数据传输,是不会造成IP 分片的。若数据过大,只会在传输层进行数据分段,到了IP 层就不用分片。
所以可以看成是这种情况:传输层协议想发送一个超过了MTI 的数据报,这个时候网络层就需要对其进行分片,一般UDP 和ICMP 会出现分片情况,但是TCP 不会出现这种情况!因为TCP 使用了MSS 来避免分片!
IP 分片只有第一个带有传输层或ICMP 首部,其余的分片只有IP 头。至于怎么重组就是到对端以后IP 层的事情了。
若TCP 报文非常长那么在IP 层传输时就有可能要分解成多个短数据报片。(计算机网络谢希仁)
TCP 分段每个都有完整首部。
PS:所以我觉得是这样的,TCP 的分段是针对应用层的数据来说的,比如使用TCP 发送10K B 的数据,这个时候就需要将70KB 分成若干个MSS ,到了网络层就不需要分片了。MSS 的存在就避免了网络层分片的发生,
IP 层的分片是针对传输层中使用UDP 协议来说的,如果使用UDP 发送数据,UDP 并不知道如何分段,那么到了IP 层就需要进行分片,分片的原则根据MTU ,那么分UDP 最大的数据负载就是1500-8=1472
TCP 层的分段跟IP 层的分片之间的关系 MTU 和MSS 存在的关系
TCP 层的分段和IP 层的分片之间的关系 MTU 和MSS 存在的关系
首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层。但是对于分段来说,这是经常发生在UDP 传输层协议上的情况,对于传输层使用TCP 协议的通道来说,这种事情很少发生。
1,MTU (Maximum Transmission Unit ,MTU ),最大传输单元
(1)以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节。链路层的这个特性称作MTU 。不同类型的网络大多数都有一个上限。如果IP 层有一个数据要传,且数据的长度比链路层的 MTU 还大,那么IP 层就要进行分片(fragmentation ),把数据报分成若干片,这样每一个分片都小于MTU 。
(2)把一份IP 数据报进行分片以后,由到达目的端的IP 层来进行重新组装,其目的是使分片和重新组装过程对运输层(TCP/UDP)是透明的。由于每一分片都是一个独立的包,当这些数据报的片到达目的端时有可能会失序,但是在IP 首部中有足够的信息让接收端能正确组装这些数据报片。
(3)尽管IP 分片过程看起来透明的,但有一点让人不想使用它:即使只丢失一片数据也要重新传整个数据报。why ?因为IP 层本身没有超时重传机制------由更高层(比如TCP )来负责超时和重传。当来自TCP 报文段的某一片丢失后,TCP 在超时后会重发整个TCP 报文段,该报文段对应于一份IP 数据报(而不是一个分片),没有办法只重传数据报中的一个数据分片。
(4)使用UDP 很容易导致IP 分片,TCP 试图避免IP 分片。那么TCP 是如何试图避免I P 分片的呢?其实说白了,采用TCP 协议进行数据传输是不会造成IP 分片的,因为一旦T CP 数据过大,超过了MSS ,则在传输层会对TCP 包进行分段(如何分,见下文!),自然到了IP 层的数据报肯定不会超过MTU ,当然也就不用分片了。而对于UDP 数据报,如果U DP 组成的 IP 数据报长度超过了1500,那么IP 数据报显然就要进行分片,因为UDP 不能像TCP 一样自己进行分段。总结:UDP 不会分段,就由我IP 来分。TCP 会分段,当然也就不用我IP 来分了!
2,MSS (Maxitum Segment Size )最大分段大小的缩写,是TCP 协议里面的一个概念
(1)MSS 就是TCP 数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP 协议在建立连接的时候通常要协商双方的MSS 值,这个值TCP 协议在实现的时候往往用M TU 值代替(需要减去IP 数据包包头的大小20Bytes 和TCP 数据段的包头20Bytes )所以往往MSS 为1460。通讯双方会根据双方提供的MSS 值得最小值确定为这次连接的最大MS S 值。
(2)相信看到这里,还有最后一个问题:TCP 是如何实现分段的呢?其实TCP 无所谓分段,因为每个TCP 数据报在组成前其大小就已经被MSS 限制了,所以TCP 数据报的长度是不可能大于MSS 的,当然由它形成的IP 包的长度也就不会大于MTU ,自然也就不用IP 分片了。
简而言之:
1.IP 分片产生的原因是网络层的MTU ;TCP 分段产生原因是MSS.
2.IP 分片由网络层完成,也在网络层进行重组;TCP 分段是在传输层完成,并在传输层进行重组. //透明性
3. 对于以太网,MSS 为1460字节,而MUT 往往会大于MSS.
故采用TCP 协议进行数据传输,是不会造成IP 分片的。若数据过大,只会在传输层进行数据分段,到了IP 层就不用分片。
所以可以看成是这种情况:传输层协议想发送一个超过了MTI 的数据报,这个时候网络层就需要对其进行分片,一般UDP 和ICMP 会出现分片情况,但是TCP 不会出现这种情况!因为TCP 使用了MSS 来避免分片!
IP 分片只有第一个带有传输层或ICMP 首部,其余的分片只有IP 头。至于怎么重组就是到对端以后IP 层的事情了。
若TCP 报文非常长那么在IP 层传输时就有可能要分解成多个短数据报片。(计算机网络谢希仁)
TCP 分段每个都有完整首部。
PS:所以我觉得是这样的,TCP 的分段是针对应用层的数据来说的,比如使用TCP 发送10K B 的数据,这个时候就需要将70KB 分成若干个MSS ,到了网络层就不需要分片了。MSS 的存在就避免了网络层分片的发生,
IP 层的分片是针对传输层中使用UDP 协议来说的,如果使用UDP 发送数据,UDP 并不知道如何分段,那么到了IP 层就需要进行分片,分片的原则根据MTU ,那么分UDP 最大的数据负载就是1500-8=1472