1

我正在研究可靠的 UDP 网络,我必须知道一些事情。我认为 UDP 可靠算法就是这样工作的(我猜是 IDK);

  • 服务器发送:(header:6)abcdef
  • 客户端接收:(header:6)abdf,发回“我有 4 个数据,它们是 abdf”
  • 服务器发送:(header:2)ce
  • 客户收到:(header:2)ce,好的,我要合并它们!

现在这是可靠 UDP 的真正方法吗?

编辑(回答后,也许这对某人有帮助)我将使用 TCP,因为可靠的 UDP 不是处理我的操作的好方法。我将发送不重要的时间变量之类的位置。也许如果我为可靠的 UDP 创建一个算法,这个可靠的过程将需要 3-4 个 UDP send-recv,这意味着我此时可以发送 3-4 个其他不可靠的位置数据,并且我正在发送小数据,这样可以提高效率比可靠的UDP。

4

3 回答 3

2

获得可靠 UDP 的“真正方法”是使用 TCP。

如果您仍想通过 UDP 执行此操作,您可以通过与消息一起发送校验和来验证消息的完整性,然后在另一端重新计算校验和以查看它是否与您发送的校验和匹配。

如果不匹配,请再次请求数据包。请注意,这实质上是对 TCP 的重新发明。

于 2013-07-29T20:41:12.660 回答
1

好吧,即使有:

- Client receive: (header:6)abdf, sends back "I got 4 data, they are abdf"
- Server send: (header:2)ce

如果服务器不会收到您的响应(这可能发生在 UDP 中)怎么办?因此,如果您不关心连接速度,则切换到 TCP 是更好的选择。

于 2013-08-04T20:04:39.337 回答
0

您的问题听起来像是为Data Distribution Service量身定制的。

我会发送不重要的时间变量之类的位置

事实上,位置坐标是其许多供应商的流行示例。 RTI 有一个适合您的用例的演示

是的,很多人听到“IDL”时都会呻吟,但我建议你给它一个公平的震动。DDS 与许多流行的 pub-sub/distribution/etc 协议不同,它不是一个简单的封装/管道。

我认为真正很酷的事情是,很多逻辑和设计元素经常涉及“我如何应对底层网络或我的同行行为不端?”的问题。DDS 为您的代码提供服务质量协商和挂钩,以便在不满足 QoS 条款时做出反应。

我建议不要轻易做出这个决定,它比 TCP、UDP、AMQP 等复杂得多。但如果你能负担得起复杂性并能在足够大的系统上分摊它——它可以带来真正的好处。

最后,DDS 确实通过 UDP 传递“可靠”消息。它旨在支持许多不同的传输,以及许多不同维度的 QoS。当您看到该服务所考虑的所有不同维度的 QoS 时,这真是令人眼花缭乱。

于 2013-07-30T02:12:22.510 回答