12月 012010
 

2010-10-24

笔者(66ip.com)在实践中遇到OPENVPN变慢,以及掉包的现像.在网络上也有许多人询问,但多无明确的答复.现根据研究略作分析.

1 为什么会掉包?
根本原因是由于网络连接质量较差.
当ICMP报文封装成IP数据报,再封装成帧在网络上传输时,由于帧的丢失导致掉包.

2 为什么将UDP改成TCP掉包会减少?
网上许多人答复掉包的解决方案是换用TCP协议.在下测试时,发现换用TCP协议的确使掉包减少了。
原因分析:
ICMP报文封装成IP数据报,此数据报传输在虚拟的VPN线路上。
当OPENVPN使用UDP协议时,虚拟的VPN线路是基于UDP协议的,ICMP本身并无什么差错控制功能,UDP也是一个无连接、不可靠的协议,所以线路质量不佳时就易表现为掉包。
当OPENVPN改用TCP协议时,虚拟的VPN线路是基于TCP协议的,TCP协议是有连接的、可靠的协议,有较强的差错控制、流量控制、拥塞控制功能,故虽然也会有帧丢失,但TCP协议本身进行了对出错的TCP报文段进行了重发,故掉包会得到抑制。

3 为什么UDP改成TCP后PING值会增加,下载速度会减慢?
经66ip.com测试,UDP改成TCP后,使得ping值严重增加,此时测试下载速度会较使用UDP协议有很大的下降.
原因分析:
改用TCP后,与使用UDP相比,丢帧的程度是差不多的,TCP以大量的重发来弥补丢帧,所以PING值会增加,下载速度会减慢。非常有趣的是,PING值会表现得很不稳定。

4 将UDP协议改成TCP是解决掉包的好主意吗?
不是.
一是如上分析会使速度变慢。
二是当在OPENVPN线路应用于采用TCP协议传输的高层应用时,在OPENVPN中采用TCP也没有必要。因为上层的TCP协议已经具有容错功能了,再在虚拟的OPENVPN线路中采用具有容错功能的TCP,只能是对性能的浪费。换言之,对于网页访问来讲,即使OPENVPN采用了UDP使得掉包较多,也不宜换成TCP使得掉包减少但速度变慢。
除非当高层应用采用容错功能较弱的协议时,则需要在OPENVPN中用TCP使得线路具有差错控制功能。如线路只是用来PING时(ICMP协议,不过世界上应该没这样的人只是弄OPENVPN来PING),如只是进行UDP传输时(如一些点对点下载的软件,但我想这些软件在应用层应该添加了差错控制功能,否则会很不稳定的,所以还是不需要在OPENVPN中用TCP)。

还存在一种说法:当线路不佳时,UDP用户数据报会丢失,引起大量重发而阻塞网络。笔者尚在观察研究中。
解决掉包的根本方法怕是只有提升网络质量。

5 加密与掉包
据有人测试,当取消加密算法会有大约10%的性能提升,66ip.com测试发现的确存在这种提升。
但据有关材料称,墙会对国内外间的VPN流量进行严密监控。所以在下推想:如果不采用加密算法,可能墙会对VPN流量产生影响,甚至引发丢包??所以建议对于FAN QIANG的还是加密。

6 压缩与掉包
严格来讲没多少关系。压缩会较大的提高传输效率,建议不要取消。有文章称压缩会对CPU有影响,但笔者测试发现在普通流量的传输中,这种影响是极小的,不足为说。

以上基本为在下原创研究,参考了一些资料。抛砖引玉,也许有一些讲法是不对的,请指教。

 回复

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>