【问题标题】:UDP unicast more reliable than broadcast?UDP单播比广播更可靠?
【发布时间】:2017-04-05 20:38:04
【问题描述】:

我们有一个当前支持单播和广播的网络引擎 - 我们一直在使用单播,但我正在探索广播功能以减少网络流量。

我的测试似乎表明单播比广播更可靠 - 这不是我期望看到的(我没有强大的网络背景)。

例如,在一个简单的测试场景中,数据包通过千兆以太网 LAN 从主机发送到客户端 - 我可以每秒单播 15,000 个 1000 字节数据包而不会丢失数据包。如果我切换到广播,我只能管理大约 1200 个 1000 字节的数据包,然后会遇到 +/- 20% 的数据包丢失。

这是预期的吗?在阅读有关单播和广播之间差异的信息时,我无法找到这个特定问题的明确答案。

如果这确实是预期的行为,那么在这方面多播会比广播更类似于单播吗(“可靠性”)?

测试详情

我开发了一个应用程序,它允许操纵各种设置(发送速率、数据包大小、每次“迭代”发送的数据包数量等)。我在本地运行了这个应用程序的几个实例,然后在网络上的其他 PC 上运行了更多实例(我只在我的 PC 和另一台 PC 上运行了一个实例)。

每个数据包都包含发送它的应用实例的名称、一个整数 ID(每次应用发送数据包时递增)和有效负载(通常为 0、500、1000 或 1400 字节大)。

当收到一个数据包时,会检查 ID 字段并确定它是否是预期的 ID(我跟踪我希望从每个应用实例接收的下一个 ID)。晚于预期的 ID 表明数据包已丢失或无序到达,早于预期的 ID 表明数据包已无序到达。

发送速率可以修改,默认我使用20ms延迟。每次发送的数据包数量也可以修改 - 例如,我可以指定我想每 20 毫秒发送 50 个数据包(每个数据包都有一个唯一的 ID)。

【问题讨论】:

  • 我很想看看你的方法。您是否正在测量所有参与者的广播数据包丢失?
  • @EJP 是的,有趣的是,即使在同一台 PC 上运行的参与者也会发生损失。我会尝试在问题中详细说明。
  • 您如何调整传输速度?您是否测量自上次发送以来经过了多长时间,计算要发送多少数据包,发送那么多,然后尽可能少地休眠?要不然是啥?细节与多播产生了巨大的不同,因为即使在本地也没有反馈。
  • @DavidSchwartz 测试应用此时只是有一个简单的延迟,但是生产软件使用了适当的时序管理。
  • "机器恰好在网络上" 他们仍然必须生成数据包并将其发送给它们,因此这是网络设备的开销。如果您已经接近极限,与这些额外的主持人一起广播可能会让您失望。在只有参与节点的 LAN 上再次尝试测试,看看是否有变化。

标签: network-programming udp broadcast multicast unicast


【解决方案1】:

当您向网络发送 UDP 广播时,必须复制数据包并将其发送到网络上的每个节点,从而为网络设备创造大量工作。如果您的 LAN 包含大量以前未单播的设备,则进行完整广播可以创建更多的网络活动并为网络设备工作。

但是,如果您的网络完全由希望参与的节点组成,我希望广播选项更可靠,因为网络设备从源接收的数据较少,并且能够运行优化程序来发送广播将数据包发送到与单独单播数据包相同数量的主机。

在进行网络测试时,使用受控环境非常重要,您可以在其中了解所涉及的变量并了解不同类型的扩展如何影响您的性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2017-04-19
    • 2014-05-11
    • 1970-01-01
    • 2015-03-14
    • 2010-09-28
    相关资源
    最近更新 更多