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

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

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


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

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

節(jié)點編號 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)鍵點是中間路由轉(zhuǎn)發(fā)節(jié)點M配備有兩張網(wǎng)卡,這兩張網(wǎng)卡分別工作在vlan1和vlan2中谋梭,使得M節(jié)點能夠同時與vlan1中的源節(jié)點S以及vlan2中的接收節(jié)點D1信峻、D2同時進(jìn)行通信,進(jìn)而實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)的任務(wù)瓮床。

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

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

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

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

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

廣播需要在局域網(wǎng)內(nèi)才能實現(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)添加了對組播操作的支持暖释,如果使用老版本的linux操作系統(tǒng)的話碱璃,可能會存在不支持的情況,此時可以選擇更新操作系統(tǒng)饭入,如果不想更新操作系統(tǒng),就需要重新編譯內(nèi)核了肛真,具體編譯步驟如下:
運行

make menuconfig

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

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

選中這幾項谐丢,保存退出

make && make modules_install && make install

重啟,用新內(nèi)核啟動蚓让。

啟動主機(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ù)據(jù)包窄瘟,根據(jù)數(shù)據(jù)包的目的ip地址將包發(fā)往本機(jī)另一網(wǎng)卡,該網(wǎng)卡根據(jù)路由表繼續(xù)發(fā)送數(shù)據(jù)包趟卸。這通常就是路由器所要實現(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ī)后效果不再丹泉。若要其自動執(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),否則運行sendto()會出現(xiàn)"network is unreachable"摹恨,網(wǎng)卡可以隨便設(shè)置筋岛,但是一定要設(shè)。
接收多播包的主機(jī)也需要設(shè)置網(wǎng)關(guān)睬塌,否則運行時會出現(xiàn)IP_ADD_MEMBERSHIP錯誤泉蝌。
下面以為無線網(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

實際上只需要配置如下路由即可,默認(rèn)網(wǎng)關(guān)的配置可有可無.
下面進(jìn)行S節(jié)點的組播靜態(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é)點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,運行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ā)緩存雌桑,才能真正實現(xiàn)組播功能。

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

因此毅访,如果要實現(xiàn)組播路由,必須具備的前提條件為:路由轉(zhuǎn)發(fā)緩存和組播路由協(xié)議守護(hù)進(jìn)程盘榨。由于我們在本次測試中使用的是PIM-SM協(xié)議俺抽,因此其對應(yīng)的守護(hù)進(jìn)程為pimd。

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

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

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

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

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

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

# pimd -r

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



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



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

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

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



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


總結(jié)

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



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


參考資料

  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ī)在接口啟動后都會自動加入該組. 因此該地址不需要設(shè)置的,只要開啟組播功能就會自動加入該組. 
224.0.0.2 - 網(wǎ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)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茎芭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌誓沸,老刑警劉巖梅桩,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拜隧,居然都是意外死亡宿百,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門洪添,熙熙樓的掌柜王于貴愁眉苦臉地迎上來垦页,“玉大人,你說我怎么就攤上這事干奢∪福” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長薄啥。 經(jīng)常有香客問我辕羽,道長,這世上最難降的妖魔是什么垄惧? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任刁愿,我火速辦了婚禮,結(jié)果婚禮上到逊,老公的妹妹穿的比我還像新娘铣口。我一直安慰自己,他們只是感情好觉壶,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布脑题。 她就那樣靜靜地躺著,像睡著了一般掰曾。 火紅的嫁衣襯著肌膚如雪旭蠕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天旷坦,我揣著相機(jī)與錄音嬉愧,去河邊找鬼。 笑死晤揣,一個胖子當(dāng)著我的面吹牛瘤睹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捆蜀,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疮丛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辆它?” 一聲冷哼從身側(cè)響起誊薄,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锰茉,沒想到半個月后呢蔫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡飒筑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年片吊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片协屡。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡俏脊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肤晓,到底是詐尸還是另有隱情爷贫,我是刑警寧澤认然,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站沸久,受9級特大地震影響季眷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卷胯,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一子刮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窑睁,春花似錦挺峡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至箫津,卻和暖如春狭姨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苏遥。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工饼拍, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人田炭。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓师抄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親教硫。 傳聞我的和親對象是個殘疾皇子叨吮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容