IP分片 与 TCP分段的区别 !!!!careful

首先声明:TCP分片应该称为TCP分段

在TCP/IP分层中,数据链路层用MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头,如以太网的MTU为1500字节,实际上数据帧的最大长度为1518    = 6+6+2+4+1500 字节,其中以太网数据帧的帧头为6+6+2字节。

当发送的IP数据报的大小超过了MTU时,IP层就需要对数据进行分片,否则数据将无法发送成功。

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

区别:    

1;==========     TCP分段产生原因是MSS.(最大分段大小

2.IP分片由网络层完成,也在网络层进行重组;      TCP分段是在传输层完成,并在传输层进行重组.   //透明性

3. 到了这里有一个问题自然就明了了,TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,很明显,分段后的每一段TCP报文段再加上IP首部后的长度不可能超过MTU,因此也就不需要在网络层进行IP分片了。因此TCP报文段很少会发生IP分片的情况。 若数据过大,只会在传输层进行数据分段,到了IP层就不用分片。

而我们常提到的 IP分片是由于UDP传输协议造成的,因为UDP传输协议并未限定传输数据报的大小。

——————————————————————————————————————————————————————

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

                                                  区分TCP分段和IP分片,了解它们工作在不同的层

避免IP分片!!!! why  如下:

在网络编程中,我们要避免出现IP分片,那么为什么要避免呢?

原因是IP层是没有超时重传机制的,如果IP层对一个数据包进行了分片,只要有一个分片丢失了,只能依赖于传输层进行重传,结果是所有的分片都要重传一遍,这个代价有点大。

由此可见,IP分片会大大降低传输层传送数据的成功率,所以我们要避免IP分片。

对于UDP包,我们需要在应用层去限制每个包的大小,一般不要超过1472字节,即以太网MTU(1500—UDP首部(8)—IP首部(20)。

对于TCP数据,应用层就不需要考虑这个问题了,因为传输层已经帮我们做了。在建立连接的三次握手的过程中,连接双方会相互通告MSS(Maximum Segment Size,最大报文段长度),MSS一般是MTU—IP首部(20)—TCP首部(20),每次发送的TCP数据都不会超过双方MSS的最小值,所以就保证了IP数据报不会超过MTU,避免了IP分片。

猜你喜欢

转载自www.cnblogs.com/zhangkele/p/9899278.html