UDP Multicast không hoạt động


11

UDP đa tuyến trên pi mâm xôi

Tôi đã không thu hẹp mọi thứ đủ để biết liệu vấn đề của tôi là do debian, cụ thể là raspbian hay nếu tôi chỉ thiếu một thứ gì đó hoàn toàn.

Tôi có một ứng dụng python sử dụng UDP đa hướng để cho các thiết bị khác trên mạng biết rằng ứng dụng của tôi đang hoạt động và có sẵn tại một địa chỉ IP cụ thể.

Nhóm phát đa hướng UDP là 239.255.250.250 và cổng là 9131. Nếu tôi chạy tcpdump, tôi có thể thấy gói tin tôi đang cố gửi là dữ liệu thực tế, nhưng tôi không bao giờ thấy bất cứ điều gì xảy ra trên các máy khác trên mạng.

Có những thiết bị khác sử dụng cùng loại "đèn hiệu" này với cùng một nhóm và cổng đa hướng và tôi có thể thấy các gói đó xuất hiện trên các máy khác. Các bộ định tuyến không có tường lửa, và tôi thực sự loại ra khỏi các tùy chọn tại thời điểm này.

Dưới đây là các chẩn đoán cơ bản tôi biết làm thế nào để chạy. Udp chksum xấu có vẻ như không hữu ích, nhưng tôi thực sự không biết gì về điều đó.

Đầu ra của 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)

Đầu ra của tcpdump trong khi ứng dụng đang chạy

    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

Đầu ra của netstat trong khi chương trình đang chạy

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  

Bạn có thể cung cấp đầu ra của netstat -gn trên 2 máy chủ không?
UnX

Có thể hữu ích: superuser.com/questions/324824/
Mạnh

Câu trả lời:


13

Tôi hiểu rằng máy chủ của bạn, 192.168.2.7 đang gửi gói phát đa hướng đến nhóm 239.255.250.250 trên cổng 9131

LƯU Ý: Tuy nhiên, tôi cho rằng các máy chủ đang lắng nghe trên cổng 9131. bạn không cung cấp bất kỳ thông tin nào về việc này.

Từ đầu ra ifconfig, tôi có thể thấy MULTICAST được bật và tcpdump xác nhận điều này.

Trước tiên, hãy đảm bảo rằng máy chủ đang chạy các máy chủ (máy chủ nhận gói phát đa hướng) đã tham gia nhóm phát đa hướng.

Trên mỗi loại máy chủ lưu trữ:

netstat -gn

Nếu bạn thấy địa chỉ multicast của mình, nó đã tham gia nhóm. Nếu không, thì có gì đó không ổn với chương trình máy chủ của bạn hoặc có thể là cài đặt kernel.

Nếu máy chủ đã tham gia nhóm nhưng bạn không thấy bất kỳ gói tin nào đến từ máy khách, thì hãy kiểm tra bộ định tuyến của bạn xem bạn đã bật igmp chưa (bộ định tuyến của bạn phải có khả năng igmp)

Ví dụ: trên bộ định tuyến cisco

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

Nếu igmp được bật trên bộ định tuyến, hãy tìm các tính năng gỡ lỗi để theo dõi các gói.

Về phía máy chủ, bắt đầu chụp gói:

tcpdump -i <NIC> host 239.255.250.250

Nếu bạn không thấy bất kỳ gói nào đến, thì gói đa hướng sẽ không được chuyển tiếp (giả sử rằng

Sau đó, trên máy khách gửi một gói phát đa hướng (sử dụng tập lệnh trong liên kết bên dưới để khắc phục sự cố)

LƯU Ý: gói UDP có vẻ không đúng định dạng nên không chắc máy chủ có đọc được không. Bạn có thể sử dụng tập lệnh trong liên kết bên dưới để xác nhận xem tin nhắn trong tcpdump có hiển thị không đúng định dạng hay không (chúng không nằm trong trường hợp của tôi)

Ví dụ về mã python sử dụng multicast:

/programming/603852/multicast-in-python

LƯU Ý: Tôi đã sử dụng tập lệnh này trên rianpi debian (không phải raspbian và máy chủ nhận gói thông qua bộ định tuyến - như thiết lập ở trên - tốt)

Hướng dẫn về 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


Câu trả lời rất dài và phần nhỏ nhất là những gì thực sự xuất hiện là vấn đề. Các công cụ khắc phục sự cố bạn đã đề cập, tôi đã làm, nhưng đó là sau khi tôi đăng bài này. Mọi thứ đều tốt trên máy chủ và máy khách. IGMP trên bộ định tuyến là vấn đề, nhưng cài đặt đó đã bị ẩn
Alex

2
mô tả của bạn không đủ rõ ràng để đưa ra một câu trả lời thẳng vì vậy tôi nghĩ rằng tôi có thể viết một hướng dẫn xử lý sự cố nhỏ.
UnX

1

Tôi nhận thấy rằng đây cũng có thể là một vấn đề phần cứng và / hoặc trình điều khiển. Tôi đã sử dụng UDP đa hướng (truyền và nhận) trên raspberryPI của tôi mà không gặp rắc rối nào - với các chương trình C, Java và / hoặc Python.

Tuy nhiên, tôi mới biết rằng UDP multicast nhận KHÔNG LÀM VIỆC với bộ điều hợp wifi USB nano nhỏ xinh từ EDIMAX - gửi UDP (multicast) hoạt động, cũng nhận được tin nhắn (cục bộ).

các chi tiết của thanh USB từ lsusb:

Nhận đa hướng UDP không hoạt động: ID 7392: 7811 Công ty TNHH Công nghệ Edimax EW-7811Un Bộ điều hợp không dây 802.11n [Realtek RTL8188CUS]

Nhận đa tuyến UDP hoạt động tốt: ID 148f: 3070 Ralink Technology, Corp RT2870 / RT3070 Bộ điều hợp không dây


cũng hoạt động: thanh này từ ASUS với ID 0b05: 1791 ASUSTek Computer, Inc. Bộ điều hợp WL-167G v3 802.11n [Realtek RTL8188SU]
Michael

0

Tôi đã gặp một vấn đề tương tự khi các gói tin đến và tôi có thể thấy chúng tcpdumpnhưng không có chương trình nào có thể nhận được dữ liệu.

Vấn đề trong trường hợp này là tôi đã từng iptableschỉ cho phép lưu lượng truy cập từ mạng con cục bộ của mình 192.168.0.0/24nhưng tất nhiên 224.0.0.0/4thay vào đó là phát đa hướng . Thay vì mở toàn bộ mạng con (cũng có thể không có tường lửa) Tôi chỉ cho phép lưu lượng truy cập từ tất cả các máy chủ trên cổng UDP cụ thể mà tôi đang sử dụng cho phát đa hướng và điều này đã khắc phục sự cố.


0

Đối với chúng tôi, chúng tôi đã có một vấn đề tương tự khi nhóm phát đa hướng được tham gia tốt, nhưng tin nhắn không được nhận.

Chúng tôi đã kiểm tra cài đặt igmp trên bộ định tuyến, dường như theo thứ tự.

Cuối cùng, chúng tôi đã chuyển từ sử dụng địa chỉ multicast IPv6 sang IPv4 và điều đó đã giải quyết nó cho hệ thống cụ thể đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.