舉例描述:
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 不能指定目的主機,所有網段內的主機都將收到廣播報文,存在頻寬浪費。組播組可以是永久的也可以是臨時的。組播組...