無線多跳網(wǎng)組播網(wǎng)絡(luò)搭建

搭建的目標(biāo)網(wǎng)絡(luò)描述

單個(gè)源節(jié)點(diǎn)S,一個(gè)中間路由轉(zhuǎn)發(fā)節(jié)點(diǎn)M,兩個(gè)組播目的節(jié)點(diǎn)D1和D2。


S通過非組播組成員M的路由轉(zhuǎn)發(fā)向D1和D2發(fā)送組播消息,網(wǎng)絡(luò)中存在兩個(gè)虛擬局域網(wǎng)vlan,其中vlan1包含源節(jié)點(diǎn)S和中間路由器節(jié)點(diǎn)M,vlan2包含中間路由器節(jié)點(diǎn)M以及兩個(gè)組播目的節(jié)點(diǎn)D1和D2。

他們的IP地址配置如下所示:

節(jié)點(diǎn)編號(hào) Vlan1 Vlan2
S wlan0:10.10.10.1
M wlan2:10.10.10.2 wlan6:192.168.3.1
D1 wlan1:192.168.3.2
D2 wlan1:192.168.3.3

這里的關(guān)鍵點(diǎn)是中間路由轉(zhuǎn)發(fā)節(jié)點(diǎn)M配備有兩張網(wǎng)卡,這兩張網(wǎng)卡分別工作在vlan1和vlan2中,使得M節(jié)點(diǎn)能夠同時(shí)與vlan1中的源節(jié)點(diǎn)S以及vlan2中的接收節(jié)點(diǎn)D1、D2同時(shí)進(jìn)行通信,進(jìn)而實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)的任務(wù)。

所有節(jié)點(diǎn)都需要運(yùn)行單播路由協(xié)議,使得每個(gè)節(jié)點(diǎn)在本地生成單播路由表,這是組播路由表生成的前提,也可以通過手動(dòng)配置靜態(tài)路由的方式加以設(shè)定,這里我們采用的是自組網(wǎng)路由協(xié)議olsrd輔助生成靜態(tài)路由,在每一個(gè)節(jié)點(diǎn)上運(yùn)行,包括S、M、D1和D2。

關(guān)于組播,可以為S、D1和D2上配置組播轉(zhuǎn)發(fā)路由,在中間路由器節(jié)點(diǎn)運(yùn)行pimd,組播網(wǎng)絡(luò)就能開始運(yùn)行。

在D1、D2節(jié)點(diǎn)上開啟組播數(shù)據(jù)接收程序./receiver加入組播組224.5.5.5,并且等待接收組播數(shù)據(jù),然后在源節(jié)點(diǎn)S無需加入組播組,只需要啟動(dòng)發(fā)送數(shù)據(jù)程序./sender即可。

網(wǎng)絡(luò)搭建

查看本機(jī)是否支持組播操作

廣播需要在局域網(wǎng)內(nèi)才能實(shí)現(xiàn),另外得查看linux系統(tǒng)是否支持組播和廣播。
查看本機(jī)是否支持組播操作,有兩種可選方法:
方法A:輸入命令:ifconfig
如果出現(xiàn)

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

則說明本機(jī)支持組播。
方法B:查看/boot/config-x.x.xx 文件中是否有如下內(nèi)容

CONFIG_IP_MULTICAST=y
CONFIG_NET_IPIP=m
CONFIG_IP_MROUTE=y

由于從linux 2.4內(nèi)核開始,linux操作系統(tǒng)默認(rèn)添加了對(duì)組播操作的支持,如果使用老版本的linux操作系統(tǒng)的話,可能會(huì)存在不支持的情況,此時(shí)可以選擇更新操作系統(tǒng),如果不想更新操作系統(tǒng),就需要重新編譯內(nèi)核了,具體編譯步驟如下:
運(yùn)行

make menuconfig

進(jìn) Networking support -> Networking options里面就有選項(xiàng):

IP: multicasting 
IP: tunneling
IP: multicast routing 
IP: PIM-SM version 1 support 
IP: PIM-SM version 2 support 

選中這幾項(xiàng),保存退出

make && make modules_install && make install

重啟,用新內(nèi)核啟動(dòng)。

啟動(dòng)主機(jī)轉(zhuǎn)發(fā)功能

使得普通的linux主機(jī)也具有路由器的數(shù)據(jù)包轉(zhuǎn)發(fā)功能

echo 1 >/proc/sys/net/ipv4/ip_forward

解釋:出于安全考慮,Linux系統(tǒng)默認(rèn)是禁止數(shù)據(jù)包轉(zhuǎn)發(fā)的。所謂轉(zhuǎn)發(fā)即當(dāng)主機(jī)擁有多于一塊的網(wǎng)卡時(shí),其中一塊收到數(shù)據(jù)包,根據(jù)數(shù)據(jù)包的目的ip地址將包發(fā)往本機(jī)另一網(wǎng)卡,該網(wǎng)卡根據(jù)路由表繼續(xù)發(fā)送數(shù)據(jù)包。這通常就是路由器所要實(shí)現(xiàn)的功能。
配置Linux系統(tǒng)的ip轉(zhuǎn)發(fā)功能,首先保證硬件連通,然后打開系統(tǒng)的轉(zhuǎn)發(fā)功能

less /proc/sys/net/ipv4/ip_forward

該文件內(nèi)容為0,表示禁止數(shù)據(jù)包轉(zhuǎn)發(fā),1表示允許,將其修改為1。可使用命令

echo "1" > /proc/sys/net/ipv4/ip_forward

修改文件內(nèi)容,重啟網(wǎng)絡(luò)服務(wù)或主機(jī)后效果不再。若要其自動(dòng)執(zhí)行,可將命令

echo "1" > /proc/sys/net/ipv4/ip_forward 

寫入腳本/etc/rc.d/rc.local 或者 在/etc/sysconfig/network腳本中添加

FORWARD_IPV4="YES"

設(shè)置網(wǎng)關(guān)

發(fā)送多播包的主機(jī)需要設(shè)置網(wǎng)關(guān),否則運(yùn)行sendto()會(huì)出現(xiàn)"network is unreachable",網(wǎng)卡可以隨便設(shè)置,但是一定要設(shè)。
接收多播包的主機(jī)也需要設(shè)置網(wǎng)關(guān),否則運(yùn)行時(shí)會(huì)出現(xiàn)IP_ADD_MEMBERSHIP錯(cuò)誤。
下面以為無線網(wǎng)卡wlan0添加靜態(tài)組播路由為例進(jìn)行說明:

sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev wlan0 
sudo route add default gw "192.168.2.20" dev wlan0

實(shí)際上只需要配置如下路由即可,默認(rèn)網(wǎng)關(guān)的配置可有可無.
下面進(jìn)行S節(jié)點(diǎn)的組播靜態(tài)路由配置:

sudo route add -net 224.0.0.0 gw "10.10.10.2" netmask 240.0.0.0 dev wlan0

下面進(jìn)行接收節(jié)點(diǎn)D1的組播靜態(tài)路由配置:

sudo route add -net 224.0.0.0 gw "192.168.3.1" netmask 240.0.0.0 dev wlan1

D2配置與D1完全相同,故而不再贅述。
另外:

sudo route del -net 224.0.0.0 netmask 240.0.0.0 wlan0 #刪除添加的組播路由

配置pimd,運(yùn)行PIM協(xié)議

將下載的pimd-2.1.8.tar.bz2解壓,進(jìn)入解壓目錄,并進(jìn)行編譯和安裝

# tar -jxvf pimd-2.1.8.tar.bz2
# cd pimd-2.1.8
# make
# make install

組播轉(zhuǎn)發(fā)前提條件

IP組播模塊提供了創(chuàng)建和刪除轉(zhuǎn)發(fā)緩存的基本功能,但只有通過組播路由協(xié)議守護(hù)進(jìn)程(通常是mrouted),依靠路由協(xié)議(如靜態(tài)路由、OSPF、RIP、PIM)來生成轉(zhuǎn)發(fā)緩存,才能真正實(shí)現(xiàn)組播功能。

因此,IP組播模塊提供用于創(chuàng)建和刪除轉(zhuǎn)發(fā)緩存和虛擬接口套接口選項(xiàng),供組播路由協(xié)議守護(hù)進(jìn)程來操作。創(chuàng)建轉(zhuǎn)發(fā)緩存過程通常如下:當(dāng)接收到組播報(bào)文后,便根據(jù)組播報(bào)文的源和目的地址為其創(chuàng)建一個(gè)臨時(shí)的轉(zhuǎn)發(fā)緩存,然后給組播路由協(xié)議守護(hù)進(jìn)程發(fā)送IGMPMSG_NOCACHE報(bào)告。當(dāng)組播路由協(xié)議守護(hù)進(jìn)程收到IGMPMSG_NOCACHE報(bào)告后,便在協(xié)議維護(hù)的組播路由表里選路,然后通過套接口選項(xiàng)創(chuàng)建新的轉(zhuǎn)發(fā)緩存,完成后組播報(bào)文便可以轉(zhuǎn)發(fā)了。

因此,如果要實(shí)現(xiàn)組播路由,必須具備的前提條件為:路由轉(zhuǎn)發(fā)緩存和組播路由協(xié)議守護(hù)進(jìn)程。由于我們?cè)诒敬螠y(cè)試中使用的是PIM-SM協(xié)議,因此其對(duì)應(yīng)的守護(hù)進(jìn)程為pimd。

實(shí)驗(yàn)過程及現(xiàn)象

  1. 源節(jié)點(diǎn)s啟動(dòng)組播發(fā)送程序
# ./sender
  1. 當(dāng)中間路由轉(zhuǎn)發(fā)節(jié)點(diǎn)M未運(yùn)行pimd守護(hù)進(jìn)程時(shí),
    此時(shí)目的節(jié)點(diǎn)D1和D2啟動(dòng)組播接收程序后無法接收到組播數(shù)據(jù)包(原因很簡(jiǎn)單,此時(shí)還無路由信息,所以中間節(jié)點(diǎn)M不會(huì)轉(zhuǎn)發(fā)源節(jié)點(diǎn)s發(fā)送的組播數(shù)據(jù)包)
    查看中間路由轉(zhuǎn)發(fā)節(jié)點(diǎn)M的組播虛擬轉(zhuǎn)發(fā)接口信息如下:
    查看命令:
# more /proc/net/ip_mr_vif

節(jié)點(diǎn)M的虛擬轉(zhuǎn)發(fā)接口上也無任何數(shù)據(jù)。

  1. 在中間路由轉(zhuǎn)發(fā)節(jié)點(diǎn)M上運(yùn)行pimd守護(hù)進(jìn)程
    查看組播路由協(xié)議pimd運(yùn)行狀態(tài)
    通過如下指令顯示的調(diào)試信息:
# pimd -d

從調(diào)試信息可以看出,pimd以密集模式啟動(dòng),并且選舉IP地址為192.168.3.1的節(jié)點(diǎn)為匯聚點(diǎn)。

通過如下指令顯示的路由信息:

# pimd -r

查看中間路由轉(zhuǎn)發(fā)節(jié)點(diǎn)M的單播路由表



查看中間路由轉(zhuǎn)發(fā)節(jié)點(diǎn)M的組播路由表



查看中間路由轉(zhuǎn)發(fā)節(jié)點(diǎn)M的組播虛擬轉(zhuǎn)發(fā)接口信息

從上圖可知,中間路由轉(zhuǎn)發(fā)節(jié)點(diǎn)wlan2接口有組播數(shù)據(jù)包的接收,然后組播數(shù)據(jù)包從M節(jié)點(diǎn)的wlan6節(jié)點(diǎn)轉(zhuǎn)發(fā),即建立了組播虛擬轉(zhuǎn)發(fā)接口。

查看組播轉(zhuǎn)發(fā)緩存表:



上圖顯示的是,組播源節(jié)點(diǎn)IP為10.10.10.1即s節(jié)點(diǎn)。組播組IP地址為224.5.5.5,組播轉(zhuǎn)發(fā)緩存已建立。
  1. 最后目的節(jié)點(diǎn)D1和D2都能正確接收到組播數(shù)據(jù)包


總結(jié)

從上面的測(cè)試結(jié)果和分析可以知道,為了實(shí)現(xiàn)組播源和組播成員之間通信,必須建立起來正確的輸入輸出通道(即組播轉(zhuǎn)發(fā)表)。即



同時(shí)在linux 內(nèi)核中必須要有正確的路由表支持,linux 內(nèi)核中的路由表是不會(huì)自動(dòng)建立的,需要借助組播路由守護(hù)進(jìn)程。如pimd。
再者,需要加入組播組的組播成員本身要支持IGMP 協(xié)議,來實(shí)現(xiàn)對(duì)自身狀態(tài)的管理和報(bào)告。


參考資料

  1. 使用如下命令來查看當(dāng)前網(wǎng)卡上加入的組播組
#netstat -gn
IPv4/IPv6 Group Memberships
Interface   RefCnt  Group
  1. 查看本機(jī)內(nèi)核IP路由表
route -ne
內(nèi)核IP路由表
Destination Gateway     Genmask     Flags   MSS Window  irtt    Iface
0.0.0.0     192.168.2.20    0.0.0.0     UG  0   0   0   wlan0
192.168.2.0 0.0.0.0     255.255.255.0   U   0   0   0   wlan0
192.168.2.60    192.168.2.60    255.255.255.255 UGH 0   0   0   wlan0
224.0.0.0       192.168.2.20    255.255.255.0       UG      0   0   0   wlan0
  1. 查看多播轉(zhuǎn)發(fā)緩存表
[root@linux ~]# more /proc/net/ip_mr_cache 
Group    Origin     Iif     Pkts    Bytes    Wrong Oifs
010101E0 010A0A0A   0      17637 18695220     0  1:1  
FAFFFFEF 010A0A0A   0      30    12393        0
  1. 查看多播虛擬轉(zhuǎn)發(fā)接口
[root@linux ~]# more /proc/net/ip_mr_vif
Interface      BytesIn  PktsIn  BytesOut PktsOut Flags Local    Remote
0 eth0       18348036   17362   9784860    9231 00000 020A0A0A 00000000
1 eth 1       113304460  106891  18009400   16990 00000 016FA8C0 00000000
2 pimreg            0       0         0       0 00004 020A0A0A 00000000
  1. 列出多播路由表
[root@linux ~]# ip mroute
(10.10.10.1, 224.1.1.1)          Iif: eth0       Oifs: eth1 
  1. 重要的組播IP地址
224.0.0.0 - Base address
224.0.0.1 - 網(wǎng)段中所有支持多播的主機(jī),即任何具有多播功能的主機(jī)在接口啟動(dòng)后都會(huì)自動(dòng)加入該組. 因此該地址不需要設(shè)置的,只要開啟組播功能就會(huì)自動(dòng)加入該組. 
224.0.0.2 - 網(wǎng)段中所有支持多播的路由器,任何具有組播功能的路由器在接口啟動(dòng)后都會(huì)自動(dòng)加入該組.
224.0.0.4 - 網(wǎng)段中所有的DVMRP路由器
224.0.0.5 - 所有的OSPF路由器
224.0.0.6 - 所有的OSPF指派路由器
224.0.0.7 - 所有的ST路由器
224.0.0.8 - 所有的ST主機(jī)
224.0.0.9 - 所有RIPv2路由器
224.0.0.10 - 網(wǎng)段中所有支的路由器
224.0.0.11 - Mobile-Agents
224.0.0.12 - DHCP server / relay agent.
224.0.0.13 - 所有的PIM路由器 
224.0.0.22 - 所有的IGMP路由器
224.0.0.251 - 所有的支持組播的DNS服務(wù)器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容