可靠的UDP算法

Reliable UDP Algorithm?

本文关键字:算法 UDP      更新时间:2023-10-16

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

  • 服务器发送:(标头:6)abcdef
  • 客户端接收:(头:6)abdf,发回"我有4个数据,它们是abdf"
  • 服务器发送:(标头:2)ce
  • 客户接收:(标题:2)ce,好吧,我要把它们组合起来

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

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

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

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

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

好吧,即使有:

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

若服务器不会收到您的响应(UDP中可能发生这种情况),该怎么办?所以,如果您不关心连接速度,切换到TCP是一个更好的选择。

您的问题听起来像是为数据分发服务量身定制的。

我会发送位置像不重要的,时间变量

事实上,位置坐标是许多供应商常用的例子。RTI有一个与您的用例非常吻合的演示。

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

我认为真正酷的是,经常会有很多逻辑和设计元素涉及"我如何对底层网络或我的对等方行为不端做出反应?"DDS提供了一种服务质量协商,并在不满足QoS条款时让代码做出反应。

我建议不要轻率地做出这个决定,它比TCP、UDP、AMQP等复杂得多。但如果你能负担得起复杂性,并能在足够大的系统上摊销,它就能带来真正的回报。

最后,DDS确实通过UDP提供了"可靠"的消息。它被设计为支持许多不同的传输和许多不同维度的QoS。当你看到这个服务所考虑的QoS的所有不同维度时,你真的会感到眼花缭乱。