LAN 中的多重播送未被所有主機接收

LAN 中的多重播送未被所有主機接收

我正在編寫一個應用程序,以從插入我的 LAN 的電流測量設備獲取多播更新。該設備每隔幾分鐘向多播組 224.192.32.19:22600 發送封包,我可以從其中一台主機(樹莓派)上很好地讀取它們。

奇怪的是,當我嘗試新增第二個偵聽器主機時,我在其介面上找不到來自該群組的任何多播流量。

網路佈局如下: 網路佈局

所有網路都位於同一實體位置,位於同一 192.168.xx 子網路下。在發送器和接收器之間有 2 個運行 DD-WRT 的 TP-Link WDR3600 路由器和一個「啞」TP-Link 8 連接埠千兆交換器(用作連接埠擴展器)。一切都透過乙太網路連接。

更多細節:

  • 「NOK」主機包括一台 Windows 7 筆記型電腦、同一台筆記型電腦上的橋接 Linux 虛擬機器以及另一台 Linux 筆記型電腦
  • 將「NOK」主機直接插入「OK」主機所在的啞交換器沒有任何效果
  • 直接插入輔助路由器(靠近來源的 1 個乙太網路「躍點」)沒有效果
  • 我在任何主機(包括工作主機)上都找不到該群組的任何 IGMP 流量
  • 224.0.0.22監聽 IGMP 的網路流量,我可以看到應用程式啟動時有2 個加入請求發出。

群組成員資格由核心註冊並透過以下方式顯示

~ $ netstat -ng
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      224.0.0.1
eth0            1      224.192.32.19
eth0            1      224.0.0.251
eth0            1      224.0.0.1

從偵聽器應用程式初始化套接字的 Python 程式碼如下:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((self.mcast_group, self.mcast_port))
mreq = struct.pack("4sl", socket.inet_aton(self.mcast_group), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

我在這裡缺少什麼?只需在工作主機上運行偵聽器應用程式就足以接收多播流量,為什麼其他偵聽器卻不能這樣做呢?

答案1

事實證明這是一個路由器問題,在重新啟動輔助路由器後,所有主機都開始如預期接收多播封包。

我認為這要么是 DD-WRT 錯誤,要么是某些狀態損壞損害了多播流量分配。

相關內容