我可以忽略UDP在受控环境中缺乏可靠性功能吗?

时间:2015-01-09 18:06:41

标签: networking network-programming udp

我认为UDP在逻辑上是完美的选择(我需要能够向数百个客户端广播)。这是一个非常小的受控环境(整个网络都是几平方米,所有设备都是本地的,网络是超大的千兆以太网和各地的交换机。)

我可以简单地"忽略"所有增加的可靠性需要在udp上抛出(检查消息到达,重新发送它们等),因为那些主要应用于预期的数据包丢失(互联网)或者是否真的建议处理udp为"可能不会到达"即使在这样的条件下?

我不是要求理论制作,真的想知道是否有人可以从经验告诉我,如果我真的可能在这样的环境中丢失udp数据包,或者它是否会成为一个非常罕见的事件显然发送事物并假设工作比处理所有可能的错误简单得多。

1 个答案:

答案 0 :(得分:2)

这是随机性的问题。即使在小型本地网络中,也会发生数据包丢失 。也许他们在正常使用场景中的绝对概率为1e-10。也许更多,也许更少。

因此,现在有了实际经验:如果在高吞吐量情况下使用,网络控制器和操作系统确实很难实现。更糟糕的是适用于交换机。因此,如果您接近网络基础设施的容量或计算能力,那么损失就更有可能发生。

所以,最后这只是一个关于你想要处理错误的网络堆栈有多高的问题:如果你不想让你的应用程序在1合1的情况下失败,你需要添加一些流量/数据完整性控制;这真的不是那么难。如果你可以忍受平均程序必须每隔一段时间重新启动的事实,那就是用户级别的纠错...

一般来说,我鼓励你承担风险。在大多数情况下,CPU功率太便宜,带宽也是如此。尝试ZeroMQ,它具有广播通信模型,并将确保数据完整性(并在必要时重新发送内容),可用于几乎所有相关语言,并在所有相关操作系统上运行,并且(至少从我的角度来看)比原始UDP套接字更容易使用。