在本地测试 UDP 广播

Posted

技术标签:

【中文标题】在本地测试 UDP 广播【英文标题】:Test UDP Broadcast locally 【发布时间】:2021-03-31 15:54:05 【问题描述】:

这是一个学校项目,所以我需要使用 UDP 广播。

我正在构建一个仅通过 UDP 使用端口 5000 的 P2P 应用程序。我需要向我网络中的所有客户端发送发现广播数据包。

通常该应用程序将在 Hamachi 上使用,但出于开发目的,我想使用最简单最快的网络环境,因此我想在本地测试多个实例。

我发现可以使用 127.0.0.1 127.0.0.2 等作为本地实例的 IP。 (实际测试了ips从1到6,互相随机发消息)

我现在需要使用相同的 5000 端口,但是做一个广播 UDP

当我在环回接口上调用 ifconfig 时,我没有看到 BROADCAST 选项。

由于显然不可能将 BROADCAST 选项添加到环回接口,因此最简单的方法是:

每个实例 1 个 IP 地址 同一个端口 在本地运行

我应该考虑为此使用 Docker 或 VM 或一些网络模拟器吗?

【问题讨论】:

您是否尝试发送到环回网络 (127.0.0.0/8) 的广播地址 (127.255.255.255)? 广播将仅限于本地广播网络,您可以使用网络广播地址(网络中的最后一个地址)或更常见的方式向本地广播网络上的所有主机广播,255.255.255.255 的有限广播地址将在任何 IPv4 网络上工作(您无需计算网络广播地址)。您可以使用单播测试您的应用程序,但使用有限广播地址进行最终构建。 @RonMaupin 我写了一个快速的 Python 脚本,其中每个脚本都监听 127.0.0.index 并向 ``、<broadcast>127.255.255.255255.255.255.255 发送广播,但没有一个其他脚本得到消息。如果需要,我可以分享代码。 并非所有网络类型都有广播。当然,IEEE 协议(以太网、Wi-Fi、令牌环等)可以,但其他协议(帧中继、ATM 等)不可以。您操作系统中的环回网络似乎是后者之一。 【参考方案1】:

如果您只想向所有客户端广播,也许多播对您来说就足够了。这可以满足您提到的所有三个需求。 Here 是定义,here 是一个小例子可以帮助你。

【讨论】:

您能否澄清group broadcast 的含义?我不熟悉他的术语 对不起,我编辑了我的答案以使其更清楚。希望对你有帮助。 不幸的是,我认为lo0 环回接口也不支持...lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 如果使用多播,你不需要坚持lo0。 如果我不使用lo0,我怎样才能多播到同一台机器上的多个实例(相同的端口,不同的ip)?

以上是关于在本地测试 UDP 广播的主要内容,如果未能解决你的问题,请参考以下文章

UDP 单播广播多播

无法在 iOS 设备上发送 UDP 广播 - NWConnection

在 Pixel 2 和 Pixel 2 XL 接收 UDP 广播数据包

Java笔记:UDP基础使用与广播

Go语言笔记:UDP基础使用与广播

Go语言笔记:UDP基础使用与广播