![如何避免RNDIS设备的IP冲突?](https://linux22.com/image/179126/%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8DRNDIS%E8%AE%BE%E5%A4%87%E7%9A%84IP%E5%86%B2%E7%AA%81%EF%BC%9F.png)
场景是这样的:我有几个设备使用 autoip 和 mdns over rndis(通过 USB 的以太网)连接到主机:您用 USB 连接它们,PC 检测到 rndis 设备,两端都选择 IPv4 地址并保留它如果没有被占用。该设备有一个唯一的 ID 作为主机名,因此 PC 可以打开 ID342384734.local 的套接字,一切都很好。
现在,有时同时连接的两个设备都会选择相同的 IP,例如 169.254.42.42。他们不会知道,因为他们位于不同的网络上并且不会看到对方。没有碰撞。 PC不在乎。但是两个 .local 名称都将解析为相同的 IP 地址 169.254.42.42,因此打开 ID1.local 和 ID2.local 的套接字将在同一设备上结束,因为在名称解析后它们无法区分!
使用 IPv6 解决了这个问题,但是对于 IPv4 是否有一个聪明的解决方案,例如教导 socket() 通过应答 mdns 请求的接口连接到 IP?
主机和设备是带有 avahi-daemon 和 avahi-autoipd 的 Linux。