Multicast UDP tidak berfungsi

11

Multicast UDP pada raspberry pi

Saya belum mempersempit hal-hal yang cukup untuk mengetahui apakah masalah saya adalah karena debian, raspbian khusus, atau jika saya hanya kehilangan sesuatu sepenuhnya.

Saya memiliki aplikasi python yang menggunakan multicast UDP untuk memberi tahu perangkat lain di jaringan bahwa aplikasi saya sudah aktif dan berjalan dan tersedia di alamat IP tertentu.

Grup multicast UDP adalah 239.255.250.250 dan portnya adalah 9131. Jika saya menjalankan tcpdump, saya dapat melihat bahwa paket yang saya coba kirim sebenarnya mengirimkan data, tetapi saya tidak pernah melihat ada yang datang dari mesin lain di jaringan.

Ada perangkat lain yang menggunakan jenis "suar" yang sama dengan grup dan port multicast yang sama dan saya dapat melihat paket-paket itu melalui mesin lain. Router tidak memiliki firewall, dan saya benar-benar keluar dari pilihan pada saat ini.

Di bawah ini adalah diagnostik dasar yang saya tahu cara menjalankannya. Udp chksum yang buruk sepertinya tidak membantu, tapi saya tidak tahu apa-apa tentang itu.

Output dari 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)

Output dari tcpdump saat aplikasi sedang berjalan

    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

Output dari netstat saat program sedang berjalan

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
sumber
Bisakah Anda memberikan output netstat -gn pada 2 host?
UnX
Mungkin bermanfaat: superuser.com/questions/324824/…
cpugeniusmv

Jawaban:

13

Saya mengerti bahwa host Anda, 192.168.2.7 mengirim paket multicast ke grup 239.255.250.250 pada port 9131

CATATAN: Namun saya berasumsi bahwa server mendengarkan pada port 9131. Anda tidak memberikan info apa pun tentang ini.

Dari keluaran ifconfig, saya dapat melihat bahwa MULTICAST diaktifkan dan tcpdump mengkonfirmasi ini.

Pertama, pastikan bahwa host yang menjalankan server (yang menerima paket multicast) telah bergabung dengan grup multicast.

Pada setiap jenis host server:

netstat -gn

Jika Anda melihat alamat multicast Anda, ia telah bergabung dengan grup. Jika tidak, maka ada sesuatu yang salah dengan program server Anda atau pengaturan kernel.

Jika server telah bergabung dengan grup tetapi Anda tidak melihat paket masuk dari klien, maka periksa router Anda bahwa Anda telah mengaktifkan igmp (router Anda harus mampu igmp)

Misalnya, pada router cisco

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

Jika igmp diaktifkan pada router, cari fitur debug untuk melacak paket.

Di sisi server, mulai pengambilan paket:

tcpdump -i <NIC> host 239.255.250.250

Jika Anda tidak melihat paket masuk, maka paket multicast tidak diteruskan (dengan asumsi itu

Kemudian pada klien mengirim paket multicast (gunakan skrip di tautan di bawah ini untuk memecahkan masalah)

CATATAN: paket UDP tampaknya rusak sehingga tidak yakin apakah server dapat membacanya. Anda dapat menggunakan skrip di tautan di bawah ini untuk mengonfirmasi apakah pesan di tcpdump ditampilkan sebagai cacat atau tidak (tidak dalam kasus saya)

Contoh kode python menggunakan multicast:

/programming/603852/multicast-in-python

CATATAN: Saya menggunakan skrip ini pada debian raspi (bukan paket raspbian dan server yang diterima melalui router - seperti setup di atas - baik)

Panduan Linux: 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
sumber
Jawaban yang sangat panjang dan bagian terkecil adalah apa yang sebenarnya menjadi masalah. Hal pemecahan masalah yang telah Anda sebutkan, sudah saya lakukan, tapi itu setelah saya memposting ini. Semuanya tampak bagus di server dan klien. IGMP pada router adalah masalahnya, tetapi pengaturan itu disembunyikan
Alex
2
deskripsi Anda tidak cukup jelas untuk memberikan jawaban langsung jadi saya pikir saya bisa menulis panduan pemecahan masalah mini.
UnX
1

Saya perhatikan bahwa ini juga bisa menjadi masalah perangkat keras dan / atau driver. Saya menggunakan multicast UDP (mengirim dan menerima) pada raspberryPI saya tanpa masalah - dengan program C, Java dan / atau Python.

Namun, saya baru tahu bahwa multicast UDP menerima JANGAN BEKERJA dengan adaptor wifi nano USB kecil yang bagus dari EDIMAX - mengirim karya UDP (multicast), juga menerima pesan (lokal) sendiri.

detail stik USB dari lsusb:

Terima multicast UDP tidak berfungsi: ID 7392: 7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Adaptor Nirkabel [Realtek RTL8188CUS]

Multicast UDP menerima berfungsi dengan baik: ID 148f: 3070 Ralink Technology, Corp. RT2870 / RT3070 Wireless Adapter

Michael
sumber
juga berfungsi: tongkat ini dari ASUS dengan ID 0b05: 1791 ASUSTek Computer, Inc. WL-167G v3 802.11n Adaptor [Realtek RTL8188SU]
Michael
0

Saya mengalami masalah yang sama ketika paket datang dan saya bisa melihatnya tcpdumptetapi tidak ada program yang bisa menerima data.

Masalah dalam hal ini adalah bahwa saya dulu iptableshanya mengizinkan lalu lintas dari subnet lokal saya 192.168.0.0/24tetapi tentu saja multicast berasal 224.0.0.0/4. Daripada membuka seluruh subnet (mungkin juga tidak memiliki firewall) Saya hanya mengizinkan lalu lintas masuk dari semua host pada port UDP spesifik yang saya gunakan untuk multicast, dan ini memperbaiki masalah.

Malvine
sumber
0

Bagi kami, kami memiliki masalah serupa di mana grup multicast bergabung dengan baik, tetapi pesan tidak diterima.

Kami memeriksa pengaturan igmp pada router, yang tampaknya dalam urutan.

Pada akhirnya kami beralih dari menggunakan alamat multicast IPv6 ke IPv4 dan menyelesaikannya untuk sistem tertentu.

Adam Reis
sumber