有没有办法仅通过 UDP 或 TCP 创建类似于 IPIP 或 GRE 隧道的东西?
我在两台服务器之间建立了 GRE 隧道,我注意到它有时会开始丢包。同时,如果我通过互联网在服务器之间进行 ping 操作,则不会出现任何问题。
我相信这是我的提供商的流量整形问题(它没有考虑 GRE 协议)。我也尝试过 IPIP 隧道,结果相同。
答案1
尝试一下 openvpn。您可以通过 UDP 或 TCP 创建隧道。
答案2
我不确定是什么导致了你的问题,但你应该注意,一般来说,隧道最好使用不可靠传输流(即UDP)比可靠流更可靠。
这样做的原因是如果你碰巧遇到数据包丢失隧道式TCP 层应该是管理重传的层,而不是真正的传输层。
如果两层都内置了重传功能,那么它们可能会开始发生重传战,最终导致吞吐量下降。
另外,不要忘记任何隧道协议都会降低有效 MTU(从而降低 TCP MSS)。如果 MTU 和 MSS 调整不当,您将看到过多的碎片和/或丢包。
答案3
您是否知道是否丢弃了 GRE 数据包或 GRE 隧道内隧道传输的数据包?对于任何类型的隧道,遇到 MTU 问题并不罕见。MTU 问题可能很难诊断,因为较小的数据包(如默认 ping)可以顺利通过隧道。您只会在较大的数据包上看到问题,并且通常只有在应用程序或系统设置 DF(不分段)位时才会出现问题。不幸的是,这很常见。
您可以使用具有较大数据包大小和设置 DF 位的 ping 来端到端测试整个网络路径上的最小 MTU。
在 Windows 上,您可以使用 -f 选项设置 DF 位,并使用 -l 选项设置数据包大小,如下所示:
ping -f -l 1450
在 Linux 上,您可以使用“-M do”选项设置 DF 位,并使用 -s 选项设置数据包大小,如下所示:
ping -M do -s 1450
你没有说你使用什么作为 GRE 端点。如果它们是 Cisco 路由器,此链接非常好。如果没有,请在 Google 上搜索 GRE MTU 问题,您会找到大量信息。
答案4
这个小隧道施工指南可以帮助您选择正确的一个。
- 正如 Alnitak 所说,任何 TCP 支持的东西在延迟方面都非常糟糕(IP 不需要 TCP 提供的可靠性,而且需要付出代价。)。通常,PPP over SSH 或 PPP over HTTP 最有用,因为它们最终能够通过防火墙。
- 平通常通过 ICMP 协议完成,因此通常会被实施早期丢弃的过载路由器最后丢弃。看看您是否也遇到过 UDP 或 TCP“ping”丢弃的情况会很有趣。丢包在互联网上很常见。