强制通过网络进行 UDP 广播(禁用环回)
force UDP broadcast via the network (disable loopback)
我想向网络上的多个设备发送 UDP 广播数据报,包括发送方设备本身。目标是让所有设备在完全相同的时间接收数据(好吧,+/- 5ms 是可以的)。
问题在于发送设备上的网络接口正在环回数据,因此会立即接收到数据(与网络延迟发挥作用的其他设备相比——例如 Wifi 相当长)
知道如何禁用我的网络接口直接环回数据吗?
我的另一个想法:是否可以创建一个虚拟网络接口来发送广播数据包并在另一个仅通过网络接收它的接口上监听?
我正尝试在 Linux 机器上用 C 语言来做。任何帮助将不胜感激!
UDP 作为 IP 负载发送。 IP 数据包的路由是 IP 堆栈的一个域。它决定数据包如何传输到目的地。当您的 IP 堆栈检测到目的地是本地主机时,它会将数据包排入接收队列,并且数据包将立即可用。如果您的适配器的发送队列已满,您将有延迟。所以你不能和这个概念同步。
如果您需要硬同步,您应该使用 NTP 或 SNTP 来同步时钟并为您想要的常见操作定义注释开始时间。
编辑:
(S)NTP 协议旨在实现毫秒级同步。由于我上面描述的原因,您将获得任何 UDP 数据包传输都无法实现的精度。
我想向网络上的多个设备发送 UDP 广播数据报,包括发送方设备本身。目标是让所有设备在完全相同的时间接收数据(好吧,+/- 5ms 是可以的)。
问题在于发送设备上的网络接口正在环回数据,因此会立即接收到数据(与网络延迟发挥作用的其他设备相比——例如 Wifi 相当长)
知道如何禁用我的网络接口直接环回数据吗?
我的另一个想法:是否可以创建一个虚拟网络接口来发送广播数据包并在另一个仅通过网络接收它的接口上监听?
我正尝试在 Linux 机器上用 C 语言来做。任何帮助将不胜感激!
UDP 作为 IP 负载发送。 IP 数据包的路由是 IP 堆栈的一个域。它决定数据包如何传输到目的地。当您的 IP 堆栈检测到目的地是本地主机时,它会将数据包排入接收队列,并且数据包将立即可用。如果您的适配器的发送队列已满,您将有延迟。所以你不能和这个概念同步。
如果您需要硬同步,您应该使用 NTP 或 SNTP 来同步时钟并为您想要的常见操作定义注释开始时间。
编辑: (S)NTP 协议旨在实现毫秒级同步。由于我上面描述的原因,您将获得任何 UDP 数据包传输都无法实现的精度。