我有一个包含多个设备的家庭本地网络。其中一台设备正在发送带有有关某些事件(智能家居)信息的多播数据包。它运行良好 - 我尝试在我的 Android 手机上启动多播测试器应用程序,并且我看到了智能家居设备发送的所有数据包。
我还有一个带有 Gnu/Linux 的服务器。它基于旧款三星 NC10。组播有一个小问题:当智能家居设备快速发送两个组播数据包时,Gnu/Linux 服务器只接收第一个数据包,而忽略第二个数据包。为了检查它,我正在使用tcpdump dst port 9898 -X
,我在 Android 上看到两个数据包,在 Gnu/Linux 上只看到第一个数据包。
我还检查了路由器,但没有针对该服务器或多播的具体设置。看起来问题出在 Gnu/Linux 设置中。
我也尝试用以下方法检查watch -d "cat /proc/net/snmp | grep -w Udp"
:
# watch -d "cat /proc/net/snmp | grep -w Udp"
Every 2,0s: cat /proc/net/snmp | grep -w Udp BArtWell-Server: Tue Jan 7 15:36:38 2020
Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors InCsumErrors IgnoredMulti
Udp: 252376 567 385 163222 0 0 385 9288
我对数字感到困惑IgnoredMulti
,它看起来很棒。
数据包示例:
IP 192.168.0.9.4321 > 224.0.0.50.9898: UDP: {"cmd":"report","model":"sensor_motion.aq2","sid":"158d0002b5d0ba","short_id":9406,"data":"{\"lux\":\"168\"}"}
IP 192.168.0.9.4321 > 224.0.0.50.9898: UDP: {"cmd":"report","model":"sensor_motion.aq2","sid":"158d0002b5d0ba","short_id":9406,"data":"{\"status\":\"motion\"}"}
如果配置:
# ifconfig wlp2s0
wlp2s0: flags=4675<UP,BROADCAST,RUNNING,ALLMULTI,MULTICAST> mtu 1500
inet 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::225:56ff:fe26:2379 prefixlen 64 scopeid 0x20<link>
ether 00:25:56:26:23:79 txqueuelen 1000 (Ethernet)
RX packets 634427 bytes 210441311 (200.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 394252 bytes 113622848 (108.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我该如何解决这个问题?如何强制 Gnu/Linux 在快速发送第二个多播数据包时不忽略它?