我们有一个当前支持单播和广播的网络引擎——到目前为止我们一直在使用单播,但我正在探索广播功能以减少网络流量。
我的测试似乎表明单播比广播更可靠——这不是我期望看到的(我没有强大的网络背景)。
例如,在一个简单的测试场景中,数据包通过千兆以太网 LAN 从主机发送到客户端 - 我可以每秒单播 15,000 个 1000 字节数据包而不会丢失数据包。如果我切换到广播,我只能管理大约 1200 个 1000 字节的数据包,然后遇到 +/- 20% 的数据包丢失。
这是预期的吗?在阅读有关单播和广播之间差异的信息时,我无法找到这个特定问题的明确答案。
如果这确实是预期的行为,那么在这方面(“可靠性”)多播会更类似于单播而不是广播吗?
测试详情
我开发了一个应用程序,它允许操纵各种设置(发送速率、数据包大小、每次“迭代”发送的数据包数量等)。我在本地运行了这个应用程序的几个实例,然后在网络上的其他 PC 上运行了更多实例(我只在我的 PC 和另一台 PC 上运行了一个实例)。
每个数据包都包含发送它的应用程序实例的名称、一个整数 ID(每次应用程序发送数据包时递增)和一个有效负载(通常为 0、500、1000 或 1400 字节大)。
当收到一个数据包时,会检查 ID 字段并确定它是否是预期的 ID(我跟踪我希望从每个应用程序实例接收的下一个 ID)。晚于预期的 ID 表明数据包已丢失或无序到达,早于预期的 ID 表明数据包已无序到达。
发送速率可以修改,默认我使用 20ms 延迟。每次发送的数据包数量也可以修改 - 例如,我可以指定我想每 20 毫秒发送 50 个数据包(每个数据包都有一个唯一的 ID)。