시나리오는 다음과 같습니다. autoip 및 mdns over rndis(USB를 통한 이더넷)를 사용하여 호스트에 연결된 여러 장치가 있습니다. USB로 연결하면 PC가 rndis 장치를 감지하고 양쪽 끝에서 IPv4 주소를 선택하고 점유되지 않은 경우 유지합니다. . 장치에는 호스트 이름으로 고유 ID가 있으므로 PC는 ID342384734.local을 사용하여 소켓을 열 수 있으며 모든 것이 정상입니다.
이제는 동시에 연결된 두 장치가 169.254.42.42와 같은 동일한 IP를 선택하는 경우가 있습니다. 그들은 서로 다른 네트워크에 있고 서로를 볼 수 없기 때문에 알 수 없습니다. 충돌이 없습니다. PC는 상관하지 않습니다. 그러나 두 .local 이름은 모두 동일한 IP 주소 169.254.42.42로 확인되므로 ID1.local과 ID2.local에 대해 열린 소켓은 이름 확인 후에 구별할 수 없기 때문에 동일한 장치에 있게 됩니다.
IPv6을 사용하면 이 문제가 해결되지만 mdns 요청에 응답하는 인터페이스를 통해 IP에 연결하도록 소켓()을 가르치는 것과 같은 IPv4에 대한 영리한 솔루션이 있습니까?
호스트와 장치는 avahi-daemon 및 avahi-autoipd가 있는 Linux입니다.