转自: http://hi.baidu.com/%B5%FB%C1%B5%BA%A30714/blog/item/600d6b1e289fdd77f624e49c.html
在很多时候我们都会提到tcp重组和ip碎片重组,那么这个过程到底什么样子的呢?
首先,我们先从分片说起:
很多人分不清楚tcp分段和ip分片的概念,我大体解释一下{
当我们再考虑网络上的问题时,首先应该想到的是网络的分层结构,我们所说的分段、分片都要放到一次会话中去考虑,
我们知道进程间的通信发生在应用层,但是实际的数据传输确是发生在下面的基层,举个例子如下图:
想要搞清楚分片脑子里就要有这么一个模型图,由图可以看到tcp处于传输层,ip处于网络层。另外我们还需要知道:
1.IP分片产生的原因是网络层的MTU;TCP分段产生原因是MSS(最大报文段).
2.IP分片由网络层完成,也在网络层进行重组;TCP分段是在传输层完成,并在传输层进行重组. //透明性
3.对于以太网,MSS为1460字节,而MUT往往会大于MSS.
现在我们以这次会话为例子:
客户和服务器进行通话,(1)连接建立之后进行tcp数据通信,我们来看一下传输层的处理:
tcp建立三次握手,在建立握手的过程中产生合适的mss(具体的处理机制参见TCP/IP详解P257),这个mss肯定是<=网络层
的最大路径MTU,然后tcp数据封装成ip数据包通过网络层发送,当服务器端传输层接收到tcp数据之后进行tcp重组。!!!ip数据包在
传输过程中是不会发生分片的!!!
我们得到这样一个结论:tcp数据在通信的时候是不会发生ip分片的
(2)连接之后进行udp或icmp通信,由于udp数据采用不可靠的通信,所以他会直接把整个udp数据封装成ip数据包传送,如果
MTU小于ip数据包包长,此时就会发生ip分片。关于ip分片可能会发生多次,因为网络中的MTU存在多个,然后到服务器端的ip层
进行重组。
我们得到这样一个结论:udp数据在通信的时候大部分会发生ip分片
}