c++ - 通过C++绕过NAT和开放端口实现低延迟

标签 c++ networking tcp udp

我的目的是:

  • 不要求用户打开其路由器上的端口
  • 使用我的应用程序通过代码完成所有工作

这有可能吗?考虑到这个应用程序应该只能与安装了相同应用程序的其他机器一起工作,我可以从头开始编写某种协议(protocol)来做到这一点吗?

我的总体想法是尽可能快地建立连接,我还必须交换小数据包,降低延迟对我来说比仅仅拥有高吞吐量更重要。

最佳答案

不要弄乱 NAT。无论如何,这对延迟没有多大帮助。您使用的是 TCP/IP,这是一种相当高级的协议(protocol),而且速度相对较慢。也就是说 - 该协议(protocol)为您做了很多很棒的工作 - 但以延迟为代价。 (它维护连接状态,并保持数据包有序,并在保证数据包传递等方面做得很好。)

如果您想要一个非常低延迟的网络 channel ,请使用 UDP - 这是较低级别的,并且做的工作几乎不如 TCP。 UDP 只是尽最大努力将每个数据包传送到目的地,而无需保持连接打开,数据包不一定按顺序到达,并且有已知的方法可以知道数据包是否到达了目的地。

您需要自己构建这些东西 - 或者学会在没有它们的情况下生活。

基于 UDP 构建的应用程序往往会重复大量信息,并且在实现协议(protocol)逻辑时存在很大的错误空间。结果通常是较低的延迟 - 但通常以可靠性或传输速率为代价。

此外 - 如果您需要低延迟,请不要通过其他协议(protocol)进行隧道传输,例如通过 SSH 等进行隧道传输。这只会增加延迟。

关于c++ - 通过C++绕过NAT和开放端口实现低延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11384602/

相关文章:

c# - 单声道兼容网络/套接字库

python - 如何使用 MsgWaitForMultipleObjects 可靠地检测断开的 TCP 套接字?

scala - 通过 akka-stream 作为客户端读取 TCP

c# - 如何在 C# 中将大文件拆分成 block ?

node.js - 我应该使用 WebRTC 还是 Websockets(和 Socket.io)进行 OSC 通信

c++ - Valgrind 说写入无效,但我只是分配给一个字符串

c++ - 对文件中的字符串进行排序

tomcat - 无法从父主机访问 Docker 容器中的托管应用程序

c++ - 如何将数组从 C++ DLL 传递给 VBA?

c++ - 在 C++ 中,是否有通过字符串调用对象属性的方法?