IP fragmentation IP 分片(网易的大包)

今天用tcpdump 和 wireshark 抓取了网易包,结果发现从网易发过来的TCP 分节都是经过重组的(reassemable). 最大的TCP分节到了8000byte左右。

但是观察了TCP建立的三次握手的过程,本地和网易的MSS都是1460,这表明网易服务器上的TCP协议栈并没有按照双发协商的MSS,限制TCP的

最大分节。猜测应该是对协议栈进行了自定制。

 

先分析一下网易的大的TCP分节发送的过程,

 

1, 网易的WEB服务器通过CGI获得了http response,然后封装在TCP 分节当中,假设这个大的分节有8000byte, TCP协议栈并没有现在TCP分节的大小,不然不会

构造这么大的TCP分节。

2,TCP层 把TCP分节发送给IP 层, 由IP层加上IP包头,(现在达到了8020byte) 进行路由分发,这里有一个不确定的问题,就是网易的IP主机要不要进行IP fragment,

这取决于网易的主机到网关之间的MTU,分为两种情况:

    2.1 , MTU < 8020, 比如就是常见的Ethernet,MTU为1500, 那么这时候网易的主机就要进行IP fragment, 把大的IP包进行分片城若干等于或者小于1500的包。

    2.2 , MTU> 8020, 这种情况下,网易的主机和网关之间的网络可能是特殊的网络,比如一些专线,我们的产品上的IP over ATMMPE 的MTU可以达到8192或者更高。

              这时候就不用再主机上进行分片。而把分片放到了网关,或者是中间的路由器上,因为我本地的网络是Ethernet,所以在某个中间路由上肯定需要做分片。

3,分片后的IP包,逐个到达了我的本地PC,然后IP进行重组。重组成为8000byte的TCP分节,然后发送给TCP层。

4,我的本地PC收到了TCP分节,然后交给浏览器进行解析。 wireshark报告说这事一个重组过的TCP分节。

 

网易这样做的好处:

1, 大的TCP分节加快了传输。

2, IP 重组的消耗是在客户端,并不会对主机有压力。

 

还有一个很疑惑的问题,就是IP的分片是在网易的主机还是在中间的路由器。

个人猜测是在中间的路由器,因为IP的分片很消耗CPU,在我们的产品上IP分采用软件实现,如果需分片的包比较多的话,CPU很容易达到100%。

如果是在网易的主机上做分片那么估计主机很难搞定。那么很可能是在网关或者是中间路由器上做IP分片(前提是网易主机到网关的网络MTU很大),如果有一个很强的路由器能够轻松搞定IP分片,就比较好了,网易即加速了传输,又把IP分片和重组的压力分到了路由器和客户端。

 

如果有网易的朋友看到这篇文章,还请不吝赐教。

你可能感兴趣的:(TCP/IP)