IP 分片/MTU 与TCP分段/MSS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IP 分片/MTU 与TCP分段/MSS相关的知识,希望对你有一定的参考价值。

参考技术A TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组。

我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念。

MTU前面已经说过了,是链路层中的网络对 数据帧的一个限制 ,依然以以太网为例,MTU为1500个字节。一个IP数据报在以太网中传输, 如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。分片传输的IP数据报不一定按序到达,但IP首部中的信息能让这些数据报片按序组装。

IP数据报的分片与重组是在网络层进完成的。

MSS是TCP里的一个概念(首部的 选项字段 中)。MSS是TCP数据包每次能够传输的最大数据分段, TCP报文段的长度大于MSS时,要进行分段传输 。

TCP协议在建立连接的时候通常要协商双方的MSS值,每一方都有用于通告它期望接收的MSS选项(MSS选项只出现在SYN报文段中,即TCP三次握手的前两次)。MSS的值一般为MTU值减去两个首部大小(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以如果用链路层以太网, MSS的值往往为1460 。而Internet上标准的MTU(最小的MTU,链路层网络为x2.5时)为576,那么如果不设置,则MSS的默认值就为536个字节。很多时候,MSS的值最好取512的倍数。 TCP报文段的分段与重组是在运输层完成的 。

TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,很明显,分段后的每一段TCP报文段再加上IP首部后的长度不可能超过MTU,因此也就不需要在网络层进行IP分片了。 因此TCP报文段很少会发生IP分片的情况 。

再来看UDP数据报,由于UDP数据报不会自己进行分段,因此当长度超过了MTU时,会在网络层进行IP分片。   同样,ICMP(在网络层中)同样会出现IP分片情况。

总结:UDP不会分段,就由IP来分。TCP会分段,当然就不用IP来分了!

IP数据报分片后,只有第一片带有UDP首部或ICMP首部,其余的分片只有IP头部,到了端点后根据IP头部中的信息再网络层进行重组。

而TCP报文段的每个分段中都有TCP首部,到了端点后根据TCP首部的信息在传输层进行重组。 IP数据报分片后,只有到达目的地后才进行重组,而不是向其他网络协议,在下一站就要进行重组。

对IP分片的数据报来说,即使只丢失一片数据也要重新传整个数据报(既然有重传,说明传输层使用的是具有重传功能的协议,如TCP协议)。

这是因为 IP层本身没有超时重传机制 ------由更高层(比如TCP)来负责超时和重传。

当来自TCP报文段的某一段(在IP数据报的某一片中)丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报(可能有多个IP分片),没有办法只重传数据报中的一个数据分片。

TCP/IP具体解释--TCP的分段和IP的分片

写在前面:

    分组能够发生在运输层和网络层。运输层中的TCP会分段,网络层中的IP会分片。IP层的分片很多其它的是为运输层的UDP服务的,因为TCP自己会避免IP的分片,所以使用TCP传输在IP层都不会发生分片的现象。

我们在学习TCP/IP协议时都知道。TCP报文段假设非常长的话,会在发送时发生分段。在接受时进行重组,相同IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组。

    我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念。

    MYU(最大传输单元)

    MTU前面已经说过了,是链路层中的网络对数据帧的一个限制,依旧以以太网为例。MTU为1500个字节。一个IP数据报在以太网中 传输,假设它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。

分片传输的IP数据报不一定按序到达。但IP首部中的信息能让这些数据报片按序组装。IP数据报的分片与重组是在网络层进完毕的。

    MSS(最大分段大小)

    MSS是TCP里的一个概念(首部的选项字段中)。MSS是TCP数据包每次可以传输的最大数据分段,TCP报文段的长度大于MSS时,要进行分段传输。

TCP协议在建立连接的时候通常要协商两方的MSS值,每一方都实用于通告它期望接收的MSS选项(MSS选项仅仅出如今SYN报文段中,即TCP三次握手的前两次)。MSS的值一般为MTU值减去两个首部大小(须要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以假设用链路层以太网。MSS的值往往为1460。而Internet上标准的MTU(最小的MTU,链路层网络为x2.5时)为576,那么假设不设置,则MSS的默认值就为536个字节。非常多时候,MSS的值最好取512的倍数。TCP报文段的分段与重组是在运输层完毕的。

    到了这里有一个问题自然就明了了,TCP分段的原因是MSS,IP分片的原因是MTU,因为一直有MSS<=MTU。非常明显,分段后的每一段TCP报文段再加上IP首部后的长度不可能超过MTU,因此也就不须要在网络层进行IP分片了。因此TCP报文段非常少会发生IP分片的情况。

    再来看UDP数据报,因为UDP数据报不会自己进行分段,因此当长度超过了MTU时,会在网络层进行IP分片。相同。ICMP(在网络层中)相同会出现IP分片情况。

    总结:UDP不会分段,就由IP来分。

TCP会分段。当然就不用IP来分了!

    另外。IP数据报分片后,仅仅有第一片带有UDP首部或ICMP首部,其余的分片仅仅有IP头部,到了端点后依据IP头部中的信息再网络层进行重组。而TCP报文段的每一个分段中都有TCP首部,到了端点后依据TCP首部的信息在传输层进行重组。

IP数据报分片后,仅仅有到达目的地后才进行重组,而不是向其它网络协议,在下一站就要进行重组。

   最后一点,对IP分片的数据报来说。即使仅仅丢失一片数据也要又一次传整个数据报(既然有重传。说明运输层使用的是具有重传功能的协议,如TCP协议)。

这是由于IP层本身没有超时重传机制------由更高层(比方TCP)来负责超时和重传。当来自TCP报文段的某一段(在IP数据报的某一片中)丢失后,TCP在超时后会重发整个TCP报文段,该报文段相应于一份IP数据报(可能有多个IP分片)。没有办法仅仅重传数据报中的一个数据分片。


在IP层分片时,仅仅有第一个分片存在运输层协议头部,其余分片都不包括运输层协议的首部,这一点非常重要。然后TCP的分段,每个分段都包括TCP首部信息,。

再有就是IP分片时到达目的地之后再进行重组的,IP层的重组是发生在目的地的IP层,TCP的重组是发生在目的地的传输层中。

以上是关于IP 分片/MTU 与TCP分段/MSS的主要内容,如果未能解决你的问题,请参考以下文章

TCP UDP 分段 IP分片

TCP/IP/ICMP 学习实践

tcp分片和ip分片的区别

TCP分段与IP分片

TCP/IP--IP分片

TCP/IP具体解释--TCP的分段和IP的分片