为什么用了VPN之后网速会变慢?
前言
记得我刚来公司那会,从济南总公司复制西安分公司的文件服务器特别慢,慢到什么程度呢?
西安文件服务器存放了大量的图片,这些图片都是存放在文件夹之下,我们从济南通过VPN连接上西安文件服务器之后,打开文件夹有时候会转圈许久,而且两地飞秋之前传输文件也是有问题,经常发不出去,对方也搜索不到,网络是通的,但就是特别慢,我测试了一下速度 ,大概也就200KB左右,连大一些的目录都打不开,这是怎么回事?
本来我认为是内部环路或内部有arp欺骗类的病毒所致,环路和arp欺骗类的病毒都很好排除,一番排查排查之后无果,好像走投无路了,一番谷歌百度之后,可能是MTU、MSS出了问题,下面就是排除了。
MTU和MSS值我还是比较熟悉的,IEEE802.3的帧最大长度是1518字节,其中18个字节是头部和尾部,数据部分最大是1500字节,这个1500字节说的就是链路层的最大传输单元(MTU),MTU是包括了网络层和传输层的首部,也就是说要减去40个字节,也就是说传输层余下的最在数据单元就还剩下1460字节,默认是这样,这样其实并没有任何问题。
但是一旦遇到了VPN的场景,就不一样了,无论是哪种VPN,都会在网络层或是应用层加点东西,一旦加点东西之后,情况就变了,怎么变了呢?下面来比较一下。
没有VPN时
假设现在济南在下载西安文件服务器上一个5M的文件。
应用层的应用不会管传输层的死活,只会一立将大量的数据放到缓存当中,然后传输层会根据MSS值进行分片,默认情况下需要几个包呢?5MB=5120KB,5120KB=5242880B,一个包最在可以携带1460个B,也就是一个5M的文件需要3592个数据包,这是非常理想的情况。
遇上VPN
遇上VPN之后,服务器并不知道他发送的数据包要过VPN,依然是发出去3592个包,但在过VPN的时候,在网络层又加了20个B,这一加之后,情况大变,因为加上20个B之后,网络层的头部就达到40B了,在网络层就要分片了,分片需要时间,分片后数据起码又是之前的两倍多,速度自然就慢下来了。
优化原则
优化原则就是尽量减少在网络层的分片。
在端到端修改MSS值可以实现,无论是修改哪一端的MSS值值不太现实,只能在虚拟接口上下点功夫,只要修改一下虚拟接口的MSS就可以,只要将其修改小一些,留出MSS值和MTU之间的差值,建议差值在60个B。