通过UDP或TCP隧道

有没有办法通过UDP或TCP创build类似于IPIP或GRE隧道的东西?

我有两个服务器之间的GRE隧道,我注意到有时它开始丢包。 同时,如果我通过互联网在服务器之间ping我没有问题。

我相信这是一个stream量整形的问题forms我的提供者(它没有考虑到GRE协议)。 我也尝试了一个IPIP隧道,结果相同。

给openvpn一枪。 您可以通过UDP或TCP创build隧道。

我不确定是什么导致了你的特定问题,但是你应该注意,一般来说,隧道使用不可靠的传输stream(比如UDP)要比可靠的传输stream更好。

这样做的原因是,如果确实发生了数据包丢失, 隧道化的 TCP层应该是pipe理重传的层,而不是真正的传输层。

如果两个层都有内置的重传,他们可能开始进入重传战争,最终杀死吞吐量。

另外,不要忘记,任何隧道协议都会降低有效的MTU(从而降低TCP MSS)。 如果MTU和MSS没有适当的调整,你会看到过多的碎片和/或丢弃的数据包。

你知道如果你丢掉GRE隧道里的GRE数据包或数据包吗? 对于任何types的隧道,遇到MTU问题并不罕见。 MTU问题可能很难诊断,因为较小的数据包(如默认ping)很好地通过隧道。 只有当应用程序或系统正在设置DF(不分片段)位时,才会看到较大数据包的问题。 这不幸的是很常见。

您可以通过使用大数据包大小的ping和DF位设置来testing整个networkingpath中最小的MTU的端到端。

在Windows上,您可以使用-f选项设置DF位,并使用-l选项设置数据包大小,如下所示:

ping -f -l 1450 

在Linux上,使用“-M do”选项设置DF位,并使用-s选项设置数据包大小,如下所示:

 ping -M do -s 1450 

你没有说你在使用什么GRE端点。如果他们是思科路由器, 这个链接是相当不错的。 如果没有,search谷歌GRE MTU的问题,你会发现很多信息。

SSH上的PPP也许?

这个隧道的小指南可以帮助你select正确的。

  • 正如Alnitak所说,TCP支持的任何东西都是非常不利的(IP不需要TCP提供的可靠性,而且价格昂贵)。 一般情况下,通过SSH进行PPP或通过HTTP进行PPP是最终能够通过防火墙的主要手段。
  • ping通常是通过ICMP协议来完成的,因此通常会由于重载的路由器而丢弃最后的路由器。 看看你是否遇到UDP或者TCP“ping”的问题也会很有趣。 丢包在互联网上相当普遍。