멀티 캐스트 UDP가 작동하지 않습니다


11

라즈베리 파이의 멀티 캐스트 UDP

내 문제가 데비안, 라즈 비안으로 인한 것인지, 아니면 완전히 빠진 것이 있는지 알 수있을 정도로 좁히지 않았습니다.

멀티 캐스트 UDP를 사용하여 네트워크의 다른 장치에 내 응용 프로그램이 시작되어 특정 IP 주소에서 사용 가능하다는 것을 알리는 python 응용 프로그램이 있습니다.

UDP 멀티 캐스트 그룹은 239.255.250.250이고 포트는 9131입니다. tcpdump를 실행하면 보내려는 패킷이 실제로 데이터를 전송하는 것을 알 수 있지만 네트워크의 다른 시스템에서 어떤 것도 들어오는 것을 볼 수 없습니다.

동일한 멀티 캐스트 그룹 및 포트와 동일한 종류의 "비콘"을 사용하는 다른 장치가 있으며 해당 패킷이 다른 컴퓨터에서 전달되는 것을 볼 수 있습니다. 라우터에는 방화벽이 없으며 현재로서는 옵션이 없습니다.

다음은 실행 방법을 알고있는 기본 진단입니다. 나쁜 udp chksum은 아마 도움이되지 않는 것처럼 보이지만 실제로는 그것에 대해 아무것도 모릅니다.

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)

앱이 실행되는 동안 tcpdump의 출력

    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

프로그램 실행 중 netstat 출력

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 개의 호스트에서 netstat -gn의 출력을 제공 할 수 있습니까?
UnX

아마도 유용 할 것입니다 : superuser.com/questions/324824/…
cpugeniusmv

답변:


13

호스트 192.168.2.7이 포트 9131의 그룹 239.255.250.250으로 멀티 캐스트 패킷을 전송하고 있음을 이해합니다

참고 : 그러나 서버가 포트 9131에서 수신 대기한다고 가정합니다. 이에 대한 정보는 제공하지 않았습니다.

ifconfig 출력에서 ​​MULTICAST가 활성화되어 있고 tcpdump가이를 확인했음을 알 수 있습니다.

먼저 서버를 실행하는 호스트 (멀티 캐스트 패킷을 수신하는 호스트)가 멀티 캐스트 그룹에 가입했는지 확인하십시오.

각 서버 호스트 유형에서 :

netstat -gn

멀티 캐스트 주소가 보이면 그룹에 가입 한 것입니다. 그렇지 않은 경우 서버 프로그램에 문제가 있거나 커널 설정이있을 수 있습니다.

서버가 그룹에 가입했지만 클라이언트에서 들어오는 패킷이 표시되지 않으면 라우터에서 igmp를 활성화 했는지 확인 하십시오 (라우터는 igmp 가능해야 함).

예를 들어 시스코 라우터에서

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

라우터에서 igmp가 활성화 된 경우 패킷을 추적하는 디버그 기능을 찾으십시오.

서버 측에서 패킷 캡처를 시작하십시오.

tcpdump -i <NIC> host 239.255.250.250

들어오는 패킷이 없으면 멀티 캐스트 패킷이 전달되지 않습니다 (

그런 다음 클라이언트에서 멀티 캐스트 패킷을 보냅니다 (아래 링크의 스크립트를 사용하여 문제 해결).

참고 : UDP 패킷의 형식이 잘못되어 서버가 읽을 수 있는지 확실하지 않습니다. 아래 링크의 스크립트를 사용하여 tcpdump의 메시지가 잘못된 것으로 표시되는지 여부를 확인할 수 있습니다 (제 경우에는 아닙니다)

멀티 캐스트를 사용하는 파이썬 코드의 예 :

/programming/603852/multicast-in-python

참고 : 나는이 스크립트를 데비안 raspi에서 사용했습니다 (위의 설정과 같이-라우터를 통해 라즈 비안 및 서버 수신 패킷이 아님)

리눅스 가이드 : http://stlinux.com/howto/network/short-guide

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


매우 긴 대답과 가장 작은 부분은 실제로 문제인 것처럼 보입니다. 언급 한 문제 해결 내용은 이미 수행했지만 게시 한 후에였습니다. 서버와 클라이언트에서 모든 것이 좋아 보였다. 라우터의 IGMP에 문제가 있었지만 해당 설정이 숨겨져 있음
Alex

2
귀하의 설명이 간단한 답변을 제공 할만큼 명확하지 않아서 미니 문제 해결 가이드를 작성할 수 있다고 생각했습니다.
UnX

1

하드웨어 및 / 또는 드라이버 문제 일 수도 있습니다. C, Java 및 / 또는 Python 프로그램에서 문제없이 raspberryPI에서 멀티 캐스트 UDP (전송 및 수신)를 사용했습니다.

그러나 방금 UDP 멀티 캐스트 수신이 EDIMAX의 멋진 작은 USB 나노 와이파이 어댑터와 작동하지 않는다는 것을 알게되었습니다 .UDP (멀티 캐스트) 작업을 보내고 자체 (로컬) 메시지를 수신합니다.

lsusb의 USB 스틱 세부 정보 :

UDP 멀티 캐스트 수신이 작동하지 않음 : ID 7392 : 7811 Edimax Technology Co., Ltd EW-7811Un 802.11n 무선 어댑터 [Realtek RTL8188CUS]

UDP 멀티 캐스트 수신이 제대로 작동합니다. ID 148f : 3070 Ralink Technology, Corp. RT2870 / RT3070 무선 어댑터


또한 작동 : ID가 0b05 : 1791 인 ASUS의이 스틱 ASUSTek Computer, Inc. WL-167G v3 802.11n 어댑터 [Realtek RTL8188SU]
Michael

0

패킷이 들어 오는 비슷한 문제가 발생하여 패킷을 볼 수는 tcpdump있지만 데이터를 수신 할 수있는 프로그램은 없습니다.

이 경우의 문제는 iptables로컬 서브넷의 트래픽 만 허용 192.168.0.0/24했지만 멀티 캐스트는 224.0.0.0/4대신 사용한다는 것입니다. 전체 서브넷을 열지 않고 (방화벽이 없을 수도 있음) 멀티 캐스트에 사용중인 특정 UDP 포트의 모든 호스트에서 트래픽을 허용하기 만하면 문제가 해결되었습니다.


0

우리에게는 멀티 캐스트 그룹이 잘 참가했지만 메시지가 수신되지 않는 비슷한 문제가있었습니다.

우리는 라우터의 igmp 설정을 확인했는데 순서대로 나타납니다.

결국 우리는 IPv6 멀티 캐스트 주소 사용에서 IPv4로 전환하여 특정 시스템에서이를 해결했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.