Dass Sie Multicast durch Ihre Linux-Box laufen lassen, indem Sie Unicast-Routing verwenden, ist eine Kombination aus ein paar glücklichen Umständen.
Multicast-Routing ist nicht dasselbe wie Unicast-Routing. Unicast-Routing basiert darauf, dass Datenverkehr an eine einzelne Adresse gesendet wird, Multicast-Datenverkehr jedoch an eine Gruppenadresse gesendet wird, die Hosts darstellt, die die Multicast-Gruppe abonnieren möchten.
Hosts verwenden IGMP, um einem Multicast-Router mitzuteilen, dass sie einer Multicast-Gruppe beitreten möchten, und der Multicast-Router beginnt dann, Multicast-Datenverkehr für diese Gruppe an das Netzwerk der Hosts zu senden, die dies anfordern.
Moderne Switches verwenden IGMP-Snooping, um festzustellen, welche Switch-Ports Hosts haben, die den Beitritt zu einer bestimmten Multicast-Gruppe anfordern, und sie senden den Datenverkehr für diese Multicast-Gruppe nur an die Switch-Ports, an denen die Hosts den Beitritt zur Multicast-Gruppe angefordert haben.
Linux selbst unterstützt kein Multicast-Routing, und Sie müssen dem Linux-Gerät etwas hinzufügen, um Multicast-Routing zu unterstützen. Siehe folgendes Diagramm:
Wenn die Multicast-Quelle beginnt, Multicast-Datenverkehr für eine Multicast-Gruppe zu senden, hat der Switch wahrscheinlich keine IGMP-Anfragen zum Beitritt zur Multicast-Gruppe gesehen, sodass der Multicast-Datenverkehr für diese Gruppe nirgendwo hingeht.
Wenn einer der PCs auf demselben Switch der Multicast-Gruppe beitreten möchte, sendet er eine IGMP-Join-Nachricht, und der Switch schnüffelt daran und sendet den Multicast-Datenverkehr an den Port, an dem der anfordernde PC angeschlossen ist.
Wenn ein PC auf der anderen Seite des Linux-Routers der Multicast-Gruppe beitreten möchte, hat er Pech, weil der Multicast-Verkehr nicht zu dieser Seite des Linux-Routers fließt. Der Linux-Router ist noch nicht einmal der Multicast-Gruppe beigetreten, daher sendet der Switch niemals den Multicast-Verkehr an ihn.
Wenn Sie Multicast-Routing auf einem Router ausführen, antwortet der Router auf die Host-IGMP-Anforderung, und der Switch erkennt, dass es sich um einen Multicast-Router handelt, und sendet Multicast-Datenverkehr an den Switch-Port, an dem der Multicast-Router angeschlossen ist. Vereinfacht gesagt sendet der Router den Multicast-Verkehr nicht an eine andere Schnittstelle, es sei denn, es gibt einen aktiven Empfänger an einer anderen Schnittstelle (dies hängt von der Multicast-Version ab, PIM-DM beginnt beispielsweise mit dem Senden, wird jedoch zurückgezogen, wenn keine IGMP-Anforderungen angezeigt werden). .
Wenn Multicast-Routing auf dem Router aktiviert ist, sendet ein mit der anderen Schnittstelle verbundener PC eine IGMP-Join-Nachricht, und der Linux-Router beginnt mit dem Senden des Multicast-Datenverkehrs für die angeforderte Gruppe an die Schnittstelle. Der Switch überwacht die Anfrage und sendet Multicast-Datenverkehr an den Switch-Port, an dem der PC angeschlossen ist, der den Beitritt zur Multicast-Gruppe angefordert hat.
Komplizierter wird es, wenn Sie über mehrere Router routen müssen. IGMP wird zwischen den Hosts und dem lokalen Multicast-Router verwendet. PIM (oder ein anderes Multicast-Routing-Protokoll) wird zwischen Multicast-Routern verwendet.
Dies alles verhindert, dass Multicast-Verkehr dorthin gelangt, wo er nicht erwünscht ist.
Es gibt Add-Ons für Linux, die es bei der korrekten Handhabung von IGMP- und Multicast-Routing unterstützen.