Çok noktaya yayın UDP çalışmıyor


11

Raspberry pi'de çok noktaya yayın UDP

Sorunumun debian, raspbian özelliğinden mi yoksa tamamen bir şey eksik mi olduğumu bilmek için işleri yeterince daraltmadım.

Ağımdaki diğer aygıtların, uygulamamın çalışır durumda olduğunu ve belirli bir IP adresinde kullanılabileceğini bildirmek için çok noktaya yayın UDP kullanan bir python uygulamam var.

UDP çok noktaya yayın grubu 239.255.250.250 ve bağlantı noktası 9131'dir. Eğer tcpdump çalıştırırsam, göndermeye çalıştığım paketin gerçekten veri gönderdiğini görebiliyorum, ancak ağdaki diğer makinelerde hiçbir şey gelmediğini göremiyorum.

Aynı çok noktaya yayın grubu ve bağlantı noktası ile aynı tür "işaret" kullanan başka aygıtlar var ve bu paketlerin diğer makinelerde geldiğini görebiliyorum. Yönlendiricinin güvenlik duvarı yok ve bu noktada gerçekten seçenekler dışındayım.

Aşağıda nasıl çalıştırılacağını bildiğim temel teşhisler var. Kötü udp chksum muhtemelen yararlı değil gibi görünüyor, ama gerçekten bu konuda hiçbir şey bilmiyorum.

İfconfig çıktısı

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)

Uygulama çalışırken tcpdump çıktısı

    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

Program çalışırken netstat çıktısı

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  

2 ana makinede netstat -gn çıktısını sağlayabilir misiniz?
UnX

Yanıtlar:


13

Ev sahibi 192.168.2.7, 9131 numaralı bağlantı noktasında 239.255.250.250 grubuna çok noktaya yayın paketi gönderdiğini anlıyorum

NOT: Ancak sunucuların 9131 numaralı bağlantı noktasını dinlediğini varsayıyorum. Bu konuda herhangi bir bilgi vermediniz.

İfconfig çıktısından MULTICAST'ın etkin olduğunu ve tcpdump'ın bunu onayladığını görebiliyorum.

Önce sunucuları çalıştıran ana bilgisayarın (çok noktaya yayın paketini alan) çok noktaya yayın grubuna katıldığından emin olun.

Her sunucu ana bilgisayar türünde:

netstat -gn

Çok noktaya yayın adresinizi görürseniz, gruba katıldı. Değilse, sunucu programınızla ilgili bir şeyler yanlış olabilir veya muhtemelen çekirdek ayarları.

Sunucu gruba katıldı ancak istemciden gelen bir paket görmüyorsanız, yönlendiricinizde igmp'yi etkinleştirdiğinizi kontrol edin (yönlendiricinizin igmp özellikli olması gerekir)

Örneğin, cisco yönlendiricide

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

İgmp yönlendiricide etkinleştirilmişse, paketleri izlemek için hata ayıklama özelliklerine bakın.

Sunucu tarafında, bir paket yakalama başlatın:

tcpdump -i <NIC> host 239.255.250.250

Gelen bir paket görmüyorsanız, çok noktaya yayın paketi iletilmez (varsayalım)

Ardından istemcide çok noktaya yayın paketi gönderin (sorun gidermek için aşağıdaki bağlantıdaki komut dosyasını kullanın)

NOT: UDP paketi hatalı biçimlendirilmiş görünüyor, bu nedenle sunucuların okuyabileceğinden emin değilsiniz. Tcpdump içindeki iletinin hatalı biçimlendirilmiş olarak görüntülenip görüntülenmediğini onaylamak için aşağıdaki bağlantıdaki komut dosyasını kullanabilirsiniz (benim durumumda değil)

Çok noktaya yayın kullanan python kodu örneği:

/programming/603852/multicast-in-python

NOT: Bu komut dosyasını bir debian raspi üzerinde kullandım (raspbian ve sunucu paketleri yönlendirici üzerinden almadı - yukarıdaki kurulum olarak - iyi)

Linux kılavuzu: 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


Çok uzun bir cevap ve en küçük kısmı, aslında sorun gibi görünen şeydir. Bahsettiğiniz sorun giderme şeyleri zaten yaptım, ancak bunu gönderdikten sonraydım. Sunucu ve istemci her şey iyi görünüyordu. Yönlendiricideki IGMP sorundu, ancak bu ayar gizlendi
Alex

2
açıklamanız düz bir cevap verecek kadar açık değildi, bu yüzden mini bir sorun giderme kılavuzu yazabileceğimi düşündüm.
UnX

1

Bunun bir donanım ve / veya sürücü problemi olabileceğini fark ettim. RaspberryPI'lerimde C, Java ve / veya Python programlarıyla çok noktaya yayın UDP (gönderme ve alma) kullandım.

Ancak, UDP çok noktaya yayın alma işleminin EDIMAX'in güzel küçük USB nano wifi adaptörüyle ÇALIŞMADIĞINI öğrendim - UDP (çok noktaya yayın) işleri gönderme, ayrıca kendi (yerel) mesajlarını alma.

lsusb USB çubuklarının detayları:

UDP çok noktaya yayın alma çalışmıyor: ID 7392: 7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Kablosuz Adaptör [Realtek RTL8188CUS]

UDP çok noktaya yayın alma iyi çalışıyor: ID 148f: 3070 Ralink Technology, Corp. RT2870 / RT3070 Kablosuz Adaptör


ayrıca çalışıyor: 0B05: 1791 ASUSTek Computer, Inc. ID ile bu çubuk ASUS WL-167G v3 802.11n Adaptör [Realtek RTL8188SU]
Michael

0

Paketlerin geldiği benzer bir sorunla karşılaştım ve bunları görebiliyordum tcpdumpama hiçbir program veri alamadı.

Bu durumda sorun, iptablesyalnızca yerel alt 192.168.0.0/24ağımdan gelen trafiğe izin vermek için kullanmış olmamdı, ancak elbette 224.0.0.0/4bunun yerine çok noktaya yayın geliyor . Tüm alt ağı açmak yerine (o zaman bir güvenlik duvarına sahip olmayabilir) çok noktaya yayın için kullandığım belirli UDP bağlantı noktasındaki tüm ana bilgisayarlardan gelen trafiğe izin verdim ve bu sorunu düzeltti.


0

Bizim için, çok noktaya yayın grubunun iyi bir şekilde katıldığı benzer bir sorun yaşadık, ancak mesajlar alınmadı.

Yönlendirilmiş gibi görünen igmp ayarlarını kontrol ettik.

Sonunda IPv6 çok noktaya yayın adresini kullanmaktan IPv4'e geçtik ve bu, söz konusu sistem için çözüldü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.