陳運海
摘要:該文首先介紹了NS3.20在Fedora20環(huán)境下的安裝過程,并重點介紹了無線自組網的拓撲設計及仿真程序設計過程,最后用NS3仿真了無線自組網通信的過程。
關鍵詞:無線自組網;NS3;仿真
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2014)35-8365-03
Implementation of Wireless Ad-hoc Network Simulation Based on NS3
CHEN Yun-hai
(Department of Electronic Information Technology, Shenzhen Senior Technical Institute, Shenzhen 518116, China)
Abstract: First the process of installing the simulator NS3.20 and the system of Fedora20 was presented. Then this paper introduces the topological structure of to a Wireless Ad-hoc Network and the design of simulation process. Finally this paper simulate the communication process of the Wireless Ad-hoc Network by using NS3 Simulator.
Key words: Wireless Ad-hoc Network; NS3; Simulation
近年來,隨著計算機和網絡通信技術的迅速發(fā)展,研究人員不斷開發(fā)新的網絡協(xié)議、算法和應用,以適應日益增長的網絡通信需要。因此,網絡仿真日益成為分析、研究、設計和改善網絡性能的強大工具,它通過在計算機上建立一個虛擬的網絡平臺,來實現(xiàn)真實的網絡環(huán)境的仿真。網絡技術研究人員在仿真環(huán)境中不僅能對網絡通信、網絡設備、協(xié)議以及網絡應用進行設計研究,還能對網絡的性能進行分析和評估。目的是在網絡項目實施的過程前期和實施過程中提供指導。
相對于其它的網絡模擬軟件而言,NS3是比較年輕的網絡工具。NS3避免了一些其它網絡模擬軟件的缺點,盡量吸收其他模擬軟件的優(yōu)點。NS3是應用現(xiàn)代軟件工程技術和網絡仿真技術而設計開發(fā)的新一代網絡模擬工具。
本文介紹了在Fedora20環(huán)境下,安裝NS3.20模擬軟件的具體方法,并在此基礎上開發(fā)了一套無線自組網的仿真程序,對從事這方面的科研人員及教學人員具有一定的指導作用。
1 Fedora20及NS3.20環(huán)境的安裝
1.1 Fedora20的下載與環(huán)境安裝
首先在WINDOWS下安裝虛擬機VMware8.0版本,然后到網站http://fedoraproject.org/get-fedora下面免費下載鏡像Fedora-20-i386-DVD.iso,在虛擬機VMware8.0中安裝此鏡像,將fedora系統(tǒng)安裝好。
NS3內核是是使用C++語言開發(fā)的,并提供Python接口,因此,安裝NS3之前需要安裝許多安裝包,安裝軟件包一定要將自己的系統(tǒng)與外網連接,有些依賴軟件包系統(tǒng)直接從外網下載并安裝。使用下列命令安裝軟件包:
yum install gcc gcc-c++ python python-devel
yum install mercurial
yum install bzr
yum install gsl gsl-devel
yum install gtk2 gtk2-devel
yum install gdb valgrind
yum install doxygen graphviz ImageMagick
yum install python-sphinx dia texlive texlive-latex
yum install flex bison
yum install tcpdump
yum install sqlite sqlite-devel
yum install libxml2 libxml2-devel
yum install uncrustify
yum install openmpi openmpi-devel
yum install boost-devel
yum install graphviz graphviz-devel python-setuptools-devel python-kiwi pygoocanvas
easy_install pygraphviz
yum install cmake glibc-devel.i686 glibc-devel.x86_64
在運行命令yum install graphviz graphviz-devel python-setuptools-devel python-kiwi pygoocanvas 時,系統(tǒng)提示有錯誤信息,與某些軟件發(fā)生沖突;這時候,要先用下列命令刪除沖突的軟件:
rpm —e vim-minimal
rpm -e sudo
然后,再安裝上述命令后,再完成后續(xù)命令的安裝。
1.2 NS3.20網絡模擬器的安裝endprint
在網站http://www.nsnam.org上免費下載軟件包ns-allinone-3.20.tar.bz2,然后拷貝到虛擬機Fedora20的系統(tǒng)/root目錄下,然后用命令:tar —jxvf ns-allinone-3.20.tar.bz2進行解壓縮。解壓縮完成后,用以下命令進入相關目錄:
cd /root/ns-allinone-3.20/ns-3.20/
然后執(zhí)行:
. /waf configure —enable-examples —enable-tests
最后執(zhí)行命令:
./waf
執(zhí)行完后,如果出現(xiàn)如圖1的畫面,即編譯安裝成功。
2 無線自組網IP地址的分配和拓撲結構設計
2.1 無線自組網的IP地址分配
我們將16個無線自組網都當成一個獨立的節(jié)點,既可以充當路由器,又可以充當終端節(jié)點。它們的IP地址都位于同一個網絡10.1.1.0中,如圖1所示。
2.2 無線自組網拓撲結構圖
無線自組網節(jié)點作為一個獨立的無線節(jié)點,可以再空間中自由移動,同時,在一范圍內可進行互相通信。其拓撲結構如圖2所示。
無線自組網絡可以互相之間通信,每個節(jié)點既充當路由器,又充當終端。我們假定節(jié)點n0與節(jié)點n15通信,來模擬數據在無線自組網中的通信過程。
3 用NS3仿真無線自組網
3.1 用NS3創(chuàng)建16個獨立的無線節(jié)點
我們首先創(chuàng)建16個無線節(jié)點,并配置無線節(jié)點通信所需要的參數。最主要的代碼如下:
NodeContainer wifiAdhocNodes;
wifiAdhocNodes.Create (16); //創(chuàng)建16無線自組網節(jié)點
WifiHelper wifi = WifiHelper::Default ();
NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); //配置Mac與Phy
wifiMac.SetType ("ns3::AdhocWifiMac");
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); //創(chuàng)建無線節(jié)點互連通道
wifiPhy.SetChannel (wifiChannel.Create ());
NetDeviceContainer wifiAdhocDevices = wifi.Install (wifiPhy, wifiMac, wifiAdhocNodes); //創(chuàng)建節(jié)點的無線設備(無線網卡)
InternetStackHelper stack; //安裝協(xié)議棧
stack.Install (wifiAdhocNodes);
Ipv4AddressHelper address; //設置無線節(jié)點的IP地址
address.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer AdhocInterfaces;
AdhocInterfaces = address.Assign (wifiAdhocDevices);
3.2 應用層模擬
1) 服務端節(jié)點設置
16個節(jié)點創(chuàng)建并配置完后,我們在最后一個節(jié)點n15放置echo服務端程序,其主要代碼為:
UdpEchoServerHelper echoServer (9); //設置服務器端口號9
ApplicationContainer serverApps = echoServer.Install (wifiAdhocNodes.Get (15)); //服務端程序安裝在節(jié)點n15。
serverApps.Start (Seconds (1.0)); //服務端程序在1秒生效
serverApps.Stop (Seconds (10.0)); //服務端程序在10秒停止。
2) 客戶端節(jié)點設置
我們將回顯客戶端放在節(jié)點n0上,其主要代碼為:
UdpEchoClientHelper echoClient (AdhocInterfaces.GetAddress (15), 9);//讓客戶端與服務端及其端口關聯(lián)
echoClient.SetAttribute ("MaxPackets", UintegerValue (100)); //設置通信時參數
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
ApplicationContainer clientApps =
echoClient.Install (wifiAdhocNodes.Get (0)); //客戶端程序安裝在節(jié)點n0
clientApps.Start (Seconds (2.0));//客戶端在 2秒中生效
clientApps.Stop (Seconds (10.0)); //客戶端在10秒鐘停止
4 用NS3仿真無線自組網運行效果
4.1 節(jié)點之間數據流向顯示
在 Fedora20操作系統(tǒng)中,運行:
./waf —run scratch/adhoctest
則可以看出,移動節(jié)點n0與n15節(jié)點,可正常通信;顯示的數據流向如圖4所示,客戶端與服務端之間的數據傳送和應答順利。
4.2 節(jié)點之間通信效果顯示:
用Pyviz工具,可以查看節(jié)點之間互相通信的效果圖,運行以下命令:
./waf —run scratch/adhoctest —vis
則可以看出,剛開始,在路由選擇階段,數據流向多個節(jié)點,如圖5所示。一旦兩個節(jié)點之間明確了路由,數據流向比較穩(wěn)定,如圖6所示。
5 結束語
本文主要仿真了無線自組網傳送數據的過程。在仿真過程中,設計了無線自組網絡節(jié)點,并仿真了數據傳送的過程??稍诖嘶A上,進一步研究不同算法對不同環(huán)境下的數據傳送效果。希望對從事這方面的研究者有所啟發(fā)。
參考文獻:
[1] ns-3 documentation[EB/OL]. http://www.nsnam.org/docs/doxygen/index.html.
[2] ns-3 developers[EB/OL].http://www.nsnam.org/developers/overview.
[3] 馬春光,姚建盛.ns-3網絡模擬器基礎與應用[M].北京:人民郵電出版社,2014.
[4] 黃化吉,馮穗力,秦麗姣.NS網絡模擬和協(xié)議仿真[M].北京:人民郵電出版社,2010.endprint
在網站http://www.nsnam.org上免費下載軟件包ns-allinone-3.20.tar.bz2,然后拷貝到虛擬機Fedora20的系統(tǒng)/root目錄下,然后用命令:tar —jxvf ns-allinone-3.20.tar.bz2進行解壓縮。解壓縮完成后,用以下命令進入相關目錄:
cd /root/ns-allinone-3.20/ns-3.20/
然后執(zhí)行:
. /waf configure —enable-examples —enable-tests
最后執(zhí)行命令:
./waf
執(zhí)行完后,如果出現(xiàn)如圖1的畫面,即編譯安裝成功。
2 無線自組網IP地址的分配和拓撲結構設計
2.1 無線自組網的IP地址分配
我們將16個無線自組網都當成一個獨立的節(jié)點,既可以充當路由器,又可以充當終端節(jié)點。它們的IP地址都位于同一個網絡10.1.1.0中,如圖1所示。
2.2 無線自組網拓撲結構圖
無線自組網節(jié)點作為一個獨立的無線節(jié)點,可以再空間中自由移動,同時,在一范圍內可進行互相通信。其拓撲結構如圖2所示。
無線自組網絡可以互相之間通信,每個節(jié)點既充當路由器,又充當終端。我們假定節(jié)點n0與節(jié)點n15通信,來模擬數據在無線自組網中的通信過程。
3 用NS3仿真無線自組網
3.1 用NS3創(chuàng)建16個獨立的無線節(jié)點
我們首先創(chuàng)建16個無線節(jié)點,并配置無線節(jié)點通信所需要的參數。最主要的代碼如下:
NodeContainer wifiAdhocNodes;
wifiAdhocNodes.Create (16); //創(chuàng)建16無線自組網節(jié)點
WifiHelper wifi = WifiHelper::Default ();
NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); //配置Mac與Phy
wifiMac.SetType ("ns3::AdhocWifiMac");
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); //創(chuàng)建無線節(jié)點互連通道
wifiPhy.SetChannel (wifiChannel.Create ());
NetDeviceContainer wifiAdhocDevices = wifi.Install (wifiPhy, wifiMac, wifiAdhocNodes); //創(chuàng)建節(jié)點的無線設備(無線網卡)
InternetStackHelper stack; //安裝協(xié)議棧
stack.Install (wifiAdhocNodes);
Ipv4AddressHelper address; //設置無線節(jié)點的IP地址
address.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer AdhocInterfaces;
AdhocInterfaces = address.Assign (wifiAdhocDevices);
3.2 應用層模擬
1) 服務端節(jié)點設置
16個節(jié)點創(chuàng)建并配置完后,我們在最后一個節(jié)點n15放置echo服務端程序,其主要代碼為:
UdpEchoServerHelper echoServer (9); //設置服務器端口號9
ApplicationContainer serverApps = echoServer.Install (wifiAdhocNodes.Get (15)); //服務端程序安裝在節(jié)點n15。
serverApps.Start (Seconds (1.0)); //服務端程序在1秒生效
serverApps.Stop (Seconds (10.0)); //服務端程序在10秒停止。
2) 客戶端節(jié)點設置
我們將回顯客戶端放在節(jié)點n0上,其主要代碼為:
UdpEchoClientHelper echoClient (AdhocInterfaces.GetAddress (15), 9);//讓客戶端與服務端及其端口關聯(lián)
echoClient.SetAttribute ("MaxPackets", UintegerValue (100)); //設置通信時參數
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
ApplicationContainer clientApps =
echoClient.Install (wifiAdhocNodes.Get (0)); //客戶端程序安裝在節(jié)點n0
clientApps.Start (Seconds (2.0));//客戶端在 2秒中生效
clientApps.Stop (Seconds (10.0)); //客戶端在10秒鐘停止
4 用NS3仿真無線自組網運行效果
4.1 節(jié)點之間數據流向顯示
在 Fedora20操作系統(tǒng)中,運行:
./waf —run scratch/adhoctest
則可以看出,移動節(jié)點n0與n15節(jié)點,可正常通信;顯示的數據流向如圖4所示,客戶端與服務端之間的數據傳送和應答順利。
4.2 節(jié)點之間通信效果顯示:
用Pyviz工具,可以查看節(jié)點之間互相通信的效果圖,運行以下命令:
./waf —run scratch/adhoctest —vis
則可以看出,剛開始,在路由選擇階段,數據流向多個節(jié)點,如圖5所示。一旦兩個節(jié)點之間明確了路由,數據流向比較穩(wěn)定,如圖6所示。
5 結束語
本文主要仿真了無線自組網傳送數據的過程。在仿真過程中,設計了無線自組網絡節(jié)點,并仿真了數據傳送的過程??稍诖嘶A上,進一步研究不同算法對不同環(huán)境下的數據傳送效果。希望對從事這方面的研究者有所啟發(fā)。
參考文獻:
[1] ns-3 documentation[EB/OL]. http://www.nsnam.org/docs/doxygen/index.html.
[2] ns-3 developers[EB/OL].http://www.nsnam.org/developers/overview.
[3] 馬春光,姚建盛.ns-3網絡模擬器基礎與應用[M].北京:人民郵電出版社,2014.
[4] 黃化吉,馮穗力,秦麗姣.NS網絡模擬和協(xié)議仿真[M].北京:人民郵電出版社,2010.endprint
在網站http://www.nsnam.org上免費下載軟件包ns-allinone-3.20.tar.bz2,然后拷貝到虛擬機Fedora20的系統(tǒng)/root目錄下,然后用命令:tar —jxvf ns-allinone-3.20.tar.bz2進行解壓縮。解壓縮完成后,用以下命令進入相關目錄:
cd /root/ns-allinone-3.20/ns-3.20/
然后執(zhí)行:
. /waf configure —enable-examples —enable-tests
最后執(zhí)行命令:
./waf
執(zhí)行完后,如果出現(xiàn)如圖1的畫面,即編譯安裝成功。
2 無線自組網IP地址的分配和拓撲結構設計
2.1 無線自組網的IP地址分配
我們將16個無線自組網都當成一個獨立的節(jié)點,既可以充當路由器,又可以充當終端節(jié)點。它們的IP地址都位于同一個網絡10.1.1.0中,如圖1所示。
2.2 無線自組網拓撲結構圖
無線自組網節(jié)點作為一個獨立的無線節(jié)點,可以再空間中自由移動,同時,在一范圍內可進行互相通信。其拓撲結構如圖2所示。
無線自組網絡可以互相之間通信,每個節(jié)點既充當路由器,又充當終端。我們假定節(jié)點n0與節(jié)點n15通信,來模擬數據在無線自組網中的通信過程。
3 用NS3仿真無線自組網
3.1 用NS3創(chuàng)建16個獨立的無線節(jié)點
我們首先創(chuàng)建16個無線節(jié)點,并配置無線節(jié)點通信所需要的參數。最主要的代碼如下:
NodeContainer wifiAdhocNodes;
wifiAdhocNodes.Create (16); //創(chuàng)建16無線自組網節(jié)點
WifiHelper wifi = WifiHelper::Default ();
NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default (); //配置Mac與Phy
wifiMac.SetType ("ns3::AdhocWifiMac");
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default (); //創(chuàng)建無線節(jié)點互連通道
wifiPhy.SetChannel (wifiChannel.Create ());
NetDeviceContainer wifiAdhocDevices = wifi.Install (wifiPhy, wifiMac, wifiAdhocNodes); //創(chuàng)建節(jié)點的無線設備(無線網卡)
InternetStackHelper stack; //安裝協(xié)議棧
stack.Install (wifiAdhocNodes);
Ipv4AddressHelper address; //設置無線節(jié)點的IP地址
address.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer AdhocInterfaces;
AdhocInterfaces = address.Assign (wifiAdhocDevices);
3.2 應用層模擬
1) 服務端節(jié)點設置
16個節(jié)點創(chuàng)建并配置完后,我們在最后一個節(jié)點n15放置echo服務端程序,其主要代碼為:
UdpEchoServerHelper echoServer (9); //設置服務器端口號9
ApplicationContainer serverApps = echoServer.Install (wifiAdhocNodes.Get (15)); //服務端程序安裝在節(jié)點n15。
serverApps.Start (Seconds (1.0)); //服務端程序在1秒生效
serverApps.Stop (Seconds (10.0)); //服務端程序在10秒停止。
2) 客戶端節(jié)點設置
我們將回顯客戶端放在節(jié)點n0上,其主要代碼為:
UdpEchoClientHelper echoClient (AdhocInterfaces.GetAddress (15), 9);//讓客戶端與服務端及其端口關聯(lián)
echoClient.SetAttribute ("MaxPackets", UintegerValue (100)); //設置通信時參數
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
ApplicationContainer clientApps =
echoClient.Install (wifiAdhocNodes.Get (0)); //客戶端程序安裝在節(jié)點n0
clientApps.Start (Seconds (2.0));//客戶端在 2秒中生效
clientApps.Stop (Seconds (10.0)); //客戶端在10秒鐘停止
4 用NS3仿真無線自組網運行效果
4.1 節(jié)點之間數據流向顯示
在 Fedora20操作系統(tǒng)中,運行:
./waf —run scratch/adhoctest
則可以看出,移動節(jié)點n0與n15節(jié)點,可正常通信;顯示的數據流向如圖4所示,客戶端與服務端之間的數據傳送和應答順利。
4.2 節(jié)點之間通信效果顯示:
用Pyviz工具,可以查看節(jié)點之間互相通信的效果圖,運行以下命令:
./waf —run scratch/adhoctest —vis
則可以看出,剛開始,在路由選擇階段,數據流向多個節(jié)點,如圖5所示。一旦兩個節(jié)點之間明確了路由,數據流向比較穩(wěn)定,如圖6所示。
5 結束語
本文主要仿真了無線自組網傳送數據的過程。在仿真過程中,設計了無線自組網絡節(jié)點,并仿真了數據傳送的過程??稍诖嘶A上,進一步研究不同算法對不同環(huán)境下的數據傳送效果。希望對從事這方面的研究者有所啟發(fā)。
參考文獻:
[1] ns-3 documentation[EB/OL]. http://www.nsnam.org/docs/doxygen/index.html.
[2] ns-3 developers[EB/OL].http://www.nsnam.org/developers/overview.
[3] 馬春光,姚建盛.ns-3網絡模擬器基礎與應用[M].北京:人民郵電出版社,2014.
[4] 黃化吉,馮穗力,秦麗姣.NS網絡模擬和協(xié)議仿真[M].北京:人民郵電出版社,2010.endprint