Multicast im LAN wird nicht von allen Hosts empfangen

Multicast im LAN wird nicht von allen Hosts empfangen

Ich schreibe eine Anwendung, um Multicast-Updates von einem Strommessgerät zu erhalten, das an mein LAN angeschlossen ist. Das Gerät sendet alle paar Minuten Pakete an die Multicast-Gruppe 224.192.32.19:22600, und ich kann sie problemlos von einem der Hosts (einem Raspberry Pi) lesen.

Das Seltsame ist, dass ich beim Versuch, einen zweiten Listener-Host hinzuzufügen, keinen Multicast-Verkehr von dieser Gruppe auf ihrer Schnittstelle finden konnte.

Das Netzwerklayout ist wie folgt: Netzwerklayout

Das gesamte Netzwerk befindet sich am selben physischen Standort, im selben Subnetz 192.168.xx. Zwischen Sender und Empfänger(n) befinden sich zwei TP-Link WDR3600-Router mit DD-WRT und ein „blöder“ TP-Link 8-Port-Gigabit-Switch (der als Port-Expander verwendet wird). Alles ist über Ethernet verkabelt.

Weitere Details:

  • Zu den "NOK"-Hosts gehören ein Windows 7-Laptop, eine überbrückte Linux-VM auf demselben Laptop und ein anderer Linux-Laptop
  • Das direkte Anschließen eines „NOK“-Hosts an den Dummschalter, an dem sich der „OK“-Host befindet, hat keine Auswirkungen
  • Der direkte Anschluss an den sekundären Router (1 Ethernet-Hop näher an der Quelle) hat keine Auswirkungen
  • Ich kann keinen IGMP-Verkehr für diese Gruppe auf einem der Hosts finden, auch nicht auf dem Arbeitshost.
  • Beim Ausspionieren des Netzwerkverkehrs für IGMP kann ich sehen, dass zwei Join-Anfragen ausgehen, 224.0.0.22wenn meine Anwendung startet.

Die Gruppenmitgliedschaft wird vom Kernel registriert und angezeigt durch

~ $ netstat -ng
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      224.0.0.1
eth0            1      224.192.32.19
eth0            1      224.0.0.251
eth0            1      224.0.0.1

Der Python-Code, der den Socket von der Listener-Anwendung aus initialisiert, ist dieser:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((self.mcast_group, self.mcast_port))
mreq = struct.pack("4sl", socket.inet_aton(self.mcast_group), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

Was übersehe ich hier? Das einfache Ausführen der Listener-Anwendung auf dem Arbeitshost reichte aus, um den Multicast-Verkehr zu empfangen. Warum ist dies bei den zusätzlichen Listenern nicht der Fall?

Antwort1

Es stellte sich heraus, dass es sich um ein Routerproblem handelte. Nach dem Neustart des sekundären Routers begannen alle Hosts wie erwartet damit, die Multicast-Pakete zu empfangen.

Ich würde sagen, es war entweder ein DD-WRT-Fehler oder eine Statusbeschädigung, die die Verteilung des Multicast-Verkehrs beeinträchtigt hat.

verwandte Informationen