登陆openvpn用ssh连接服务器比直接IP用ssh连接服务器慢
用openvpn+ssh连接服务器有的时候非常慢,有的时候很快,不知道如何定位原因。 在慢的时候,直接SSH 连接服务器外网IP就很快。
Answers
你是不是使用了 TCP 连接?
如果在 OpenVPN 上使用 TCP 连接,可能会遇到 TCP over TCP 问题。
如果你连接到 OpenVPN 服务器的速度比 OpenVPN 连接到其他网站的速度慢,那么你在浏览其他网站的时候就会发生 TCP over TCP 问题。
TCP 为了保证数据完整,会自动重发数据包,如果一个数据包发出去超过一定时间后没有收到对方回复的 ACK 包,那么 TCP 协议栈会自动重发这个数据包。超时时间是根据网络连接状况动态决定的,网络速度越快,超时时间越短。
下面来考虑 TCP over TCP 的问题。你在浏览网页的时候,和网站建立了 TCP 连接,但是这个 TCP 连接是建立在 OpenVPN 的 TCP 连接之上的。当网站向你发送一个数据包时,这个数据包会通过 OpenVPN 的 TCP 连接发送给你。在正常情况下,你收到这个数据包后会立刻给服务器发送一个 ACK 包,如果超过一定的时间没有发送 ACK 包,服务器会重新给你发送这个数据包。然而,由于网站服务器和 OpenVPN 服务器之间的链接速度很快,而你和 OpenVPN 服务器之间的链接速度相对较慢,于是网站服务器重发数据包的间隔就会小于 OpenVPN 给你重发数据包的间隔,问题就这么产生了。
由于 OpenVPN 服务器和你的连接比较慢,在你给网站服务器返回 ACK 包之前,网站服务器已经等不及了,于是重发了数据包。紧接着,这个重发的包需要通过 OpenVPN 的 TCP 连接发送给你,但是由于速度问题,你依然来不及回复 ACK 包,于是网站服务器会继续向你重发数据包。而在重发数据包的过程中,又会造成网络进一步拥堵,结果导致你和 OpenVPN 之间的连接速度进一步下降,更来不及回复 ACK 包了,最后的结果就是整条连接充满了大量的重发包,而几乎没有正常的流量了。
这就是 OpenVPN 在使用 TCP 模式的时候可能会发生的 TCP over TCP 问题。在通常情况下,你到 OpenVPN 服务器的连接速度不可能比 OpenVPN 服务器到网站的连接速度更快,所以一旦你开始浏览网页,就会发现网络突然变得很慢。
所以使用 OpenVPN 的时候不要使用 TCP 模式,如果你不知道你在做什么,直接使用 UDP 模式就行了。