無線多跳網組播網絡搭建

搭建的目標網絡描述

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


S通過非組播組成員M的路由轉發(fā)向D1和D2發(fā)送組播消息,網絡中存在兩個虛擬局域網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

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

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

關于組播,可以為S、D1和D2上配置組播轉發(fā)路由,在中間路由器節(jié)點運行pimd,組播網絡就能開始運行。

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

網絡搭建

查看本機是否支持組播操作

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

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

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

CONFIG_IP_MULTICAST=y
CONFIG_NET_IPIP=m
CONFIG_IP_MROUTE=y

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

make menuconfig

進 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

重啟,用新內核啟動。

啟動主機轉發(fā)功能

使得普通的linux主機也具有路由器的數據包轉發(fā)功能

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

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

less /proc/sys/net/ipv4/ip_forward

該文件內容為0,表示禁止數據包轉發(fā),1表示允許,將其修改為1??墒褂妹?/p>

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

修改文件內容,重啟網絡服務或主機后效果不再。若要其自動執(zhí)行,可將命令

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

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

FORWARD_IPV4="YES"

設置網關

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

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

實際上只需要配置如下路由即可,默認網關的配置可有可無.
下面進行S節(jié)點的組播靜態(tài)路由配置:

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

下面進行接收節(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解壓,進入解壓目錄,并進行編譯和安裝

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

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

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

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

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

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

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

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

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

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

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

# pimd -r

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



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



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

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

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



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


總結

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



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


參考資料

  1. 使用如下命令來查看當前網卡上加入的組播組
#netstat -gn
IPv4/IPv6 Group Memberships
Interface   RefCnt  Group
  1. 查看本機內核IP路由表
route -ne
內核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. 查看多播轉發(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. 查看多播虛擬轉發(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 - 網段中所有支持多播的主機,即任何具有多播功能的主機在接口啟動后都會自動加入該組. 因此該地址不需要設置的,只要開啟組播功能就會自動加入該組. 
224.0.0.2 - 網段中所有支持多播的路由器,任何具有組播功能的路由器在接口啟動后都會自動加入該組.
224.0.0.4 - 網段中所有的DVMRP路由器
224.0.0.5 - 所有的OSPF路由器
224.0.0.6 - 所有的OSPF指派路由器
224.0.0.7 - 所有的ST路由器
224.0.0.8 - 所有的ST主機
224.0.0.9 - 所有RIPv2路由器
224.0.0.10 - 網段中所有支的路由器
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服務器
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容