TCP分、IP分片、MTU、MSS联系

为什么会有IP分片?直接原因是上层协议企图发送一段数据,其长度超过了MTU(Maxitum Transmission Unit)。什么情况,或者说什么协议会尝试发送这么长的数据?常见的有UDP和ICMP,需要特别注意的是,TCP一般不会。

为什么TCP不会造成IP分片呢?原因是TCP自身支持分段:当TCP要传输长度超过MSS(Maxitum Segment Size)的数据时,会先对数据进行分段,正常情况下,MSS小于MTU,因此,TCP一般不会造成IP分片。

而UDP和ICMP就不支持这种分段功能了,UDP和ICMP认为网络层可以传输无限长(实际上有65535的限制)的数据,当这两种协议发送数据时,它们不考虑数据长度,仅在其头部添加UDP或ICMP首部,然后直接交给网络层就万事大吉了。接着网络层IP协议对这种“身长头短”的数据进行分片,不要指望IP能很“智能”地识别传给它的数据上层头部在哪里,载荷又在哪里,它会直接将整个的数据切成N个分片,这样做的结果是,只有第一个分片具有UDP或者ICMP首部,而其它分片则没有。

 IP分片―MTU(最大传输单元)―1500   UDP    数据链路层

TCP分段―MSS(最大分段大小)―1460   TCP    传输层

MSS其实就是TCP报文payload的大小。

 

    在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500,即MTU(Maximum Transmission Unit)为1500; 

  在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;

  在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;

  所以,在应用层,你的Data最大长度为1472。

 

IP分片只有第一个带有传输层或ICMP首部,其余的分片只有IP头。

若TCP报文非常长那么在IP层传输时就有可能要分解成多个短数据报片。(计算机网络谢希仁)

TCP分段每个都有完整首部。


你可能感兴趣的:(MTU,IP分片,TCP分,MSS联系)