Linux系統中組播 ICMP報文送達失敗

2021-09-19 16:17:05 字數 2317 閱讀 8307

舉例描述:

a**機械人系統之間以組播位址實現相互學習同步資料,例如使用到了224.0.0.251類組播位址。a**系統作為ubuntu系統中應用子系統,其基於ros通訊系統實現。工廠中中控、a**構建區域網,其之間通過2.48ghz頻段無線通訊,a**自動導航定位感知判斷完成各項任務,其之間相互學習,中控對整個工廠機械人系統進行排程管理監控。中控通過vpn技術實現對遠端a**群進行監控排程。

問題1:中控無法獲取a**狀態,a**之間未能相互發現

原因:區域網組播通訊失敗

診斷解決:

1. 組播位址ping失敗

$ ping 224.0.0.251

2. 路由配置

新增224.0.0.0路由資訊

$ sudo route add -net 224.0.0.0 netmask 224.0.0.0 dev wlp4s0

3.檢查/etc/sysctl.conf配置

4.檢視/proc/sys/net/ipv4/conf/all/*配置

5.檢查防火牆配置

$ iptables -l -n

$ iptables -f  #清除預設表filter中的所有規則鏈的規則(將可能導致主機網路異常)

$ sudo iptables -x  #清除預設表filter中使用者自定鏈中的規則(將可能導致主機網路異常)

參考:

6.檢視組播繫結

$ sudo netstat -gn

$ sudo ifconfig wlp4s0 multicast    #開啟wlp4s0組播功能

$ sudo ifconfig wlp4s0 -multicase   #關閉wlp4s0組播功能

7.匯出防火牆配置

$ sudo iptables --list-rules > iptable.rule    #匯出iptable表一一刪除排查

$ sudo apt-get install uif && sudo apt-get remove uif && iptables -l -n

$ sudo iptables -d ufw-before-input -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j accept

$ sudo iptables -p input accept

$ sudo iptables -p forward accept

$ sudo iptables -p output accept

8.直接解除安裝iptables

$ sudo apt-get remove iptables

9.檢查igmp/pim組播路由模組

參考:10.診斷

b主機建立hotspot熱點,a主機接入熱點與b建立通訊,接入網卡wlp4s0。

$ sudo ifconfig wlp4s0 192.168.1.116     #a主機ip

$ sudo ifconfig wlp4s0 192.168.1.113     #b主機ip

$ sudo route add -net 192.168.1.0/24 dev wlp4s0   # 新增192.168.1.0網段路由

$ sudo route add -net 224.0.0.0 netmask 224.0.0.0 dev wlp4s0    #新增組播路由資訊

ab主機關閉反向過濾配置

$ echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter    #ab主機關閉反向過濾配置

或者通過修改/etc/sysctl.conf配置

net.ipv4.conf.default.rp_filter=0

net.ipv4.conf.all.rp_filter=0

net.ipv4.conf.wlp4s0.rp_filter=0

$ sudo sysctl -p /etc/sysctl.conf

$ sudo tcpdump -i wlp4s0 -n multicast -s 65534    #a與b使用tcpdump監聽抓取wlp4s0報文

a主機ip為192.168.1.116,a主機ping組播位址224.0.0.251

$ ping 224.0.0.251

$ sudo tcpdump -i wlp4s0 -n multicast -s 65534

b主機ip為192.168.113,b主機ping組播位址224.0.0.251

$ ping 224.0.0.251

$ sudo tcpdump -i wlp4s0 -n multicast -s 65534

發現a主機與b主機都能收到雙方組播icmp請求,但雙方都無法收到組播icmp相應。

linux程式設計udp組播

linux程式設計udp通訊 linux程式設計udp廣播 使用範圍 結構體struct ip mreqn struct in addr 組播位址 224.0.0.0 224.0.0.255 預留的組播位址 永久組位址 位址224.0.0.0保留 不做分配,其它位址供路由協議使用 224.0.1.0...

組播中的setsockopt

組播主機需要的環境 如果要在一台主機上執行多播程式,這台主機支援igmp協議。此協議用於加入乙個多播組,離開乙個多播組等而向路由器傳送命令。現在的igmp協議最高版本為v3 rfc3376 現在有很少數的 實現了,windowxp己實現。大部分主機,路由器實現的版本為v2 rfc2236 而v1版本...

linux下組播的實現

目前有三種通訊方式 單播 unicast 廣播 broadcast 組播 multicast 單播解決了點對點通訊的需求 廣播是點對多點的通訊,其存在兩個缺點 1 只能在同一網段內實現廣播 2 不能指定目的主機,所有網段內的主機都將收到廣播報文,存在頻寬浪費。組播組可以是永久的也可以是臨時的。組播組...