Multicast-UDP funktioniert nicht

11

Multicast UDP auf Himbeer-Pi

Ich habe die Dinge nicht genug eingegrenzt, um zu wissen, ob mein Problem auf Debian oder Raspbian zurückzuführen ist oder ob mir nur etwas komplett fehlt.

Ich habe eine Python-Anwendung, die Multicast-UDP verwendet, um anderen Geräten im Netzwerk mitzuteilen, dass meine Anwendung aktiv ist und unter einer bestimmten IP-Adresse verfügbar ist.

Die UDP-Multicast-Gruppe ist 239.255.250.250 und der Port ist 9131. Wenn ich tcpdump ausführe, kann ich sehen, dass das Paket, das ich senden möchte, tatsächlich Daten sendet, aber auf anderen Computern im Netzwerk kommt nie etwas durch.

Es gibt andere Geräte, die dieselbe Art von "Beacon" mit derselben Multicast-Gruppe und demselben Port verwenden, und ich kann sehen, dass diese Pakete auf anderen Computern eingehen. Der Router hat keine Firewall, und ich habe zu diesem Zeitpunkt wirklich keine Optionen mehr.

Unten finden Sie die grundlegende Diagnose, die ich ausführen kann. Das schlechte udp chksum sieht wahrscheinlich nicht hilfreich aus, aber ich weiß wirklich nichts darüber.

Ausgabe von ifconfig

eth0      Link encap:Ethernet  HWaddr b8:27:eb:b2:79:12  
          inet addr:192.168.2.7  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1682 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1686 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:119105 (116.3 KiB)  TX bytes:169570 (165.5 KiB)

Ausgabe von tcpdump während die App ausgeführt wird

    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
03:29:15.722653 IP (tos 0x0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 221)
    192.168.2.7.33335 > 239.255.250.250.9131: [bad udp cksum 0xae84 -> 0xaabe!] UDP, length 193
    0x0000:  4500 00dd 0000 4000 0111 cb66 c0a8 0207  E.....@....f....
    0x0010:  efff fafa 8237 23ab 00c9 ae84 414d 5842  .....7#.....AMXB
    0x0020:  3c4d 4143 2d41 4444 523d 6238 3a32 373a  <MAC-ADDR=b8:27:
    0x0030:  6562 3a62 323a 3739 3a31 323e 3c2d 5555  eb:b2:79:12><-UU
    0x0040:  4944 3d32 3032 3438 3135 3937 3537 3734  ID=2024815975774
    0x0050:  3930 3e3c 2d53 444b 436c 6173 733d 5574  90><-SDKClass=Ut
    0x0060:  696c 6974 793e 3c2d 4d61 6b65 3d69 5275  ility><-Make=iRu
    0x0070:  6c65 426f 783e 3c2d 4d6f 6465 6c3d 5265  leBox><-Model=Re
    0x0080:  6d6f 7465 426f 783e 3c2d 5265 7669 7369  moteBox><-Revisi
    0x0090:  6f6e 3d30 2e31 3e3c 2d50 6b67 5f4c 6576  on=0.1><-Pkg_Lev
    0x00a0:  656c 3d47 4350 4b30 3032 3e3c 2d43 6f6e  el=GCPK002><-Con
    0x00b0:  6669 672d 5552 4c3d 6874 7470 3a2f 2f31  fig-URL=http://1
    0x00c0:  3932 2e31 3638 2e32 2e37 3a38 303e 3c2d  92.168.2.7:80><-
    0x00d0:  5374 6174 7573 3d52 6561 6479 3e         Status=Ready>
^C
1 packet captured
1 packet received by filter
0 packets dropped by kernel

Ausgabe von netstat während das Programm läuft

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 0.0.0.0:31144           0.0.0.0:*                           1510/dhclient   
udp        0      0 0.0.0.0:33335           0.0.0.0:*                           2089/python     
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1510/dhclient   
udp        0      0 192.168.2.7:123         0.0.0.0:*                           1911/ntpd       
udp        0      0 0.0.0.0:123             0.0.0.0:*                           1911/ntpd  
Alex
quelle
Können Sie die Ausgabe von netstat -gn auf 2 Hosts bereitstellen?
UnX
Vielleicht nützlich: superuser.com/questions/324824/...
cpugeniusmv

Antworten:

13

Ich verstehe, dass Ihr Host, 192.168.2.7, ein Multicast-Paket an die Gruppe 239.255.250.250 an Port 9131 sendet

HINWEIS: Ich gehe jedoch davon aus, dass Server Port 9131 überwachen. Sie haben hierzu keine Informationen angegeben.

An der Ausgabe von ifconfig kann ich erkennen, dass MULTICAST aktiviert ist, und der tcpdump bestätigt dies.

Stellen Sie zunächst sicher, dass der Host, auf dem die Server ausgeführt werden (derjenige, der das Multicast-Paket empfängt), der Multicast-Gruppe beigetreten ist.

Auf jedem Server-Hosttyp:

netstat -gn

Wenn Sie Ihre Multicast-Adresse sehen, ist sie der Gruppe beigetreten. Wenn nicht, stimmt entweder etwas mit Ihrem Serverprogramm oder möglicherweise mit den Kerneleinstellungen nicht.

Wenn der Server der Gruppe beigetreten ist, Sie jedoch kein vom Client eingehendes Paket sehen, überprüfen Sie auf Ihrem Router, ob Sie igmp aktiviert haben (Ihr Router muss igmp-fähig sein).

Zum Beispiel auf einem Cisco-Router

enable
conf t
ip multicast-routing
For each interface involved.
int <NIC>
ip pim sparse-dense-mode

Wenn igmp auf dem Router aktiviert ist, suchen Sie nach Debug-Funktionen, um die Pakete zu verfolgen.

Starten Sie auf der Serverseite eine Paketerfassung:

tcpdump -i <NIC> host 239.255.250.250

Wenn Sie kein eingehendes Paket sehen, wird das Multicast-Paket nicht weitergeleitet (vorausgesetzt, dass

Senden Sie dann auf dem Client ein Multicast-Paket (verwenden Sie das Skript im Link unten, um Fehler zu beheben).

HINWEIS: Das UDP-Paket scheint fehlerhaft zu sein, daher sind Sie sich nicht sicher, ob Server es lesen können. Sie können das Skript im folgenden Link verwenden, um zu bestätigen, ob die Nachricht in tcpdump als fehlerhaft angezeigt wird oder nicht (in meinem Fall nicht).

Beispiel für Python-Code mit Multicast:

/programming/603852/multicast-in-python

HINWEIS: Ich habe dieses Skript auf einem Debian-Raspi verwendet (nicht Raspbian und der Server hat Pakete über den Router empfangen - wie oben beschrieben - in Ordnung).

Linux-Handbuch: http://stlinux.com/howto/network/short-guide

Cisco: http://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst3750/software/release/12-2_52_se/configuration/guide/3750scg/swmcast.html#wp1024278

UnX
quelle
Sehr lange Antwort und der kleinste Teil ist das, was tatsächlich das Problem zu sein schien. Die Dinge zur Fehlerbehebung, die Sie erwähnt haben, habe ich bereits getan, aber das war, nachdem ich dies gepostet habe. Auf dem Server und dem Client sah alles gut aus. IGMP auf dem Router war das Problem, aber diese Einstellung wurde ausgeblendet
Alex
2
Ihre Beschreibung war nicht klar genug, um eine klare Antwort zu geben, sodass ich dachte, ich könnte eine kleine Anleitung zur Fehlerbehebung schreiben.
UnX
1

Mir ist aufgefallen, dass dies auch ein Hardware- und / oder Treiberproblem sein kann. Ich habe problemlos Multicast-UDP (Senden und Empfangen) auf meinen Himbeer-PIs verwendet - mit C-, Java- und / oder Python-Programmen.

Ich habe jedoch gerade erfahren, dass UDP-Multicast-Empfang mit dem netten kleinen USB-Nano-WLAN-Adapter von EDIMAX NICHT funktioniert - das Senden von UDP (Multicast) funktioniert und das Empfangen der eigenen (lokalen) Nachrichten.

die details der USB-Sticks von lsusb:

UDP-Multicast-Empfang funktioniert nicht: ID 7392: 7811 Edimax Technology Co., Ltd. EW-7811Un 802.11n-Funkadapter [Realtek RTL8188CUS]

UDP-Multicast-Empfang funktioniert einwandfrei: ID 148f: 3070 Ralink Technology, Corp. RT2870 / RT3070 Wireless-Adapter

Michael
quelle
funktioniert auch: dieser Stick von ASUS mit der ID 0b05: 1791 ASUSTek Computer, Inc. WL-167G v3 802.11n Adapter [Realtek RTL8188SU]
Michael
0

Ich bin auf ein ähnliches Problem gestoßen, bei dem die Pakete eingingen und ich sie sehen konnte, tcpdumpaber kein Programm konnte die Daten empfangen.

Das Problem in diesem Fall war, dass ich früher iptablesnur Datenverkehr von meinem lokalen Subnetz zugelassen hatte, 192.168.0.0/24aber natürlich kommt 224.0.0.0/4stattdessen Multicast von . Anstatt das gesamte Subnetz zu öffnen (möglicherweise gibt es dann auch keine Firewall), habe ich nur Datenverkehr von allen Hosts auf dem spezifischen UDP-Port zugelassen, den ich für Multicast verwendet habe, und dies hat das Problem behoben.

Malvineous
quelle
0

Für uns hatten wir ein ähnliches Problem, bei dem die Multicast-Gruppe ordnungsgemäß verbunden war, aber keine Nachrichten empfangen wurden.

Wir haben die igmp-Einstellungen auf dem Router überprüft, die in Ordnung zu sein schienen.

Am Ende haben wir von der IPv6-Multicast-Adresse auf IPv4 umgestellt und das Problem für dieses bestimmte System behoben.

Adam Reis
quelle