有没有办法仅通过 UDP 或 TCP 创建类似于 IPIP 或 GRE 隧道的东西?
我在两台服务器之间有一个 GRE 隧道,我注意到有时它会开始丢弃数据包。同时,如果我通过互联网在服务器之间 ping,我没有问题。
我相信这是来自我的提供商的流量整形问题(它没有考虑 GRE 协议)。我也尝试过 IPIP 隧道,结果相同。
有没有办法仅通过 UDP 或 TCP 创建类似于 IPIP 或 GRE 隧道的东西?
我在两台服务器之间有一个 GRE 隧道,我注意到有时它会开始丢弃数据包。同时,如果我通过互联网在服务器之间 ping,我没有问题。
我相信这是来自我的提供商的流量整形问题(它没有考虑 GRE 协议)。我也尝试过 IPIP 隧道,结果相同。
试一试openvpn。您可以通过 UDP 或 TCP 创建隧道。
我不确定是什么导致了您的特定问题,但您应该注意,通常隧道使用不可靠的传输流(即 UDP)比使用可靠的传输流更好。
这样做的原因是,如果您确实发生数据包丢失,则隧道TCP 层应该是管理重传的层,而不是真正的传输层。
如果两层都内置了重传,它们可能会开始陷入重传战争,最终会扼杀吞吐量。
另外,不要忘记任何隧道协议都会降低有效的 MTU(因此会降低 TCP MSS)。如果未适当调整 MTU 和 MSS,您将看到过多的碎片和/或丢弃的数据包。
您知道您是丢弃 GRE 数据包还是通过 GRE 隧道传输的数据包?对于任何类型的隧道,几乎任何类型的隧道都会遇到 MTU 问题并不少见。MTU 问题可能很难诊断,因为较小的数据包(如默认 ping)可以很好地通过隧道。您只会看到较大数据包的问题,而且通常只有在应用程序或系统设置了 DF(不分片)位时才会出现问题。不幸的是,这很常见。
您可以通过使用具有大数据包大小和 DF 位集的 ping 来端到端测试网络路径中最小的 MTU。
在 Windows 上,您可以使用 -f 选项设置 DF 位,并使用 -l 选项设置数据包大小,如下所示:
在 Linux 上,您使用“-M do”选项设置 DF 位,并使用 -s 选项设置数据包大小,如下所示:
你没有说你在使用什么 GRE 端点。如果它们是 Cisco 路由器,这个链接非常好。如果没有,请在 Google 上搜索 GRE MTU 问题,您会发现大量信息。
PPP over SSH也许?
这个关于隧道的小指南可以帮助您选择正确的。