Ich arbeite mit einem Cluster von ungefähr 40 Knoten, auf denen Debian 4 läuft. Jeder Knoten führt einen Daemon aus, der auf einer Multicast-IP sitzt und wartet.Auswählen einer Schnittstelle beim Multicasting unter Linux
Ich schrieb einige Client-Software, um ein Multicast über das LAN mit einem Clientcomputer auf dem gleichen Switch wie der Cluster zu senden, so dass jeder Knoten im Cluster das Paket empfangen und antworten würde.
Es funktioniert gut, außer wenn ich die Client-Software auf einem Computer mit LAN-und WAN-Schnittstellen ausführen. Wenn eine WAN-Schnittstelle vorhanden ist, funktioniert Multicast nicht. Offensichtlich geht das Multicast falsch über die WAN-Schnittstelle (eth0) und nicht über das LAN (eth1). Also verwende ich die Socket-Option SO_BINDTODEVICE, um zu erzwingen, dass der Multicast-Socket eth1 verwendet, und alles ist gut.
Aber ich dachte, dass die Routing-Tabelle des Kernels feststellen sollte, dass das LAN (eth1) offensichtlich ein kostengünstigeres Ziel für das Multicast ist. Gibt es einen Grund, warum ich den Socket explizit zwingen muss, eth1 zu verwenden? Und gibt es eine Möglichkeit (vielleicht ein ioctl-Anruf), dass die Anwendung automatisch feststellen kann, ob eine bestimmte Schnittstelle ein LAN oder WAN ist?
Nein, der Kernel oder die Sockets-API werden dies nicht automatisch für Sie übernehmen. Wenn Sie etwas Code schreiben könnten, der hilfreich wäre, wenn Leute Sockets anders programmieren. Grundsätzlich besteht ein Ansatz darin, jede Schnittstelle zu untersuchen und festzustellen, ob sie eine nicht im Internet routbare IP-Adresse verwendet. Alternativ können Sie alle Schnittstellen senden. – BobbyShaftoe