可靠的UDP实现

时间:2012-01-27 00:09:56

标签: c++ udp network-protocols

我需要符合以下条件的UDP实现:

  • 适用于Linux和Mac(仅限最新版本)
  • 可以使用C ++
  • 订购数据包
  • 保证数据包传送
  • 非面向对象(如UDP)

注意:我不想为此使用TCP。 注意:它可以由任何套接字API实现,只要它在两个平台上可用并且可供C ++使用。

编辑: 我看过UDT,RUDP和SCTP。这些似乎是主要的竞争者。有什么想法吗?

编辑: UDT似乎正是我要找的。事实是它是在用户空间中实现的内核UDP将是一个巨大的性能问题?或者速度是否仍然比TCP / STCP快?

编辑(2/15/12): 我想出了一个使用TCP和中央重定向服务器的解决方案。系统允许一个客户端通过一个永远开放的TCP连接向服务器发送数据,然后他们将服务器的TCP连接传递给另一个客户端,然后连接到第二个客户端。

6 个答案:

答案 0 :(得分:2)

我相信你想要SCTP

答案 1 :(得分:2)

这是一个老问题,但我看到没人回答任何关于UDT的事情。我有一些经验,所以我可以分享它们。

UDT非常好用。你基本上就像使用UDP套接字一样使用它,并获得你从中列出的所有内容。

表现方面,我没有注意到任何问题。实际上,它有几种算法可以最大化吞吐量,你可以获得非常惊人的结果(我在100 MB / s以太网LAN上获得了> 90 MB / s)。它也适用于慢/高延迟链接。

当然,它并不完美,有些错误的情况并没有按照我喜欢的方式处理,但是,在大多数情况下,你只是将它插入"而且你很好。

答案 2 :(得分:1)

免责声明:我在一家生产商业UDP数据传输工具的公司工作。

有很多UDP数据传输工具,包括免费软件和商业软件。您选择哪一个除了您已经引用的因素外还取决于几个因素:

  • 您运送的是哪种数据?文件,程序生成的数据流,短消息?千字节,兆字节,千兆字节或太字节?大多数UDP解决方案都集中在文件或大数据流上。很少有人也针对小型或通用消息进行了优化。

  • 您的网络拓扑是什么?客户端 - 服务器,点对点,服务器到服务器?这将影响防火墙问题,并可能影响商业解决方案的成本。

  • 您希望部署哪种网络环境?一些基于UDP的传输协议仅适用于最终用户能够配置适当目标速度的非常快速的网络或网络。其他的则针对低速,高延迟(如卫星)进行了优化。有些在任何环境下都能正常工作。

  • 您愿意花多少钱?存在开源和商业解决方案。商业解决方案中的价格差异很大,可能取决于上述一些因素。

  • 您需要多少支持?一些开源解决方案周围有强大的社区,有些几乎被放弃了。同样,商业解决方案的支持程度各不相同。

显然,我正在努力走好一条路,让你在不推广自己公司的情况下考虑事情。如果我走得太远,我向所有人道歉。

答案 3 :(得分:0)

您可能正在寻找RTI-DDS。有一个C ++ API和一个QoS保证通过UDP传递。不确定Mac支持,但您可以在support@rti.com上询问。

答案 4 :(得分:0)

听起来你要求的是RUDP

无论如何,实施起来非常复杂。我不知道有什么事情

我还想强调一个事实,即如果内核没有这样做,性能会急剧下降。通常在应用程序中执行诸如数据包重组等操作要么需要更多缓冲,要么在数据速率足够高时生成更多重试(这可能是相当适度的流量。)

答案 5 :(得分:0)

This教程系列可能对你有用。

编辑:下一个教程的链接位于页面底部,可靠UDP的帖子实际上是第3个,但第一个和第二个也是很好的读数。