NS3對于初學者的教程,高手忽略這個吧_第1頁
NS3對于初學者的教程,高手忽略這個吧_第2頁
NS3對于初學者的教程,高手忽略這個吧_第3頁
NS3對于初學者的教程,高手忽略這個吧_第4頁
NS3對于初學者的教程,高手忽略這個吧_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1. Ns3 的安裝: 開發環境配置:sudo apt-get install gcc g+ python python-dev /C+和python安裝,必裝sudo apt-get install mercurial /NS3代碼維護使用的源碼版本控制管理系統sudo apt-get install bzr /運行python綁定ns-3-dev需要bazaar這個組件sudo apt-get install libgtk2.0-0 libgtk2.0-dev /基于GTK的配置系統sudo apt-get install gdb valgrind /調試工具sudo apt-get in

2、stall doxygen graphviz imagemagick /文檔生成器sudo apt-get install texlive texlive-latex-extra /文檔生成器,從源代碼中生成說明文檔 sudo apt-get install texinfo dia texlive-extra-utils texi2html /ns-3手冊和tutorial編寫查看工具sudo apt-get install flex bison /仿真必需的詞法分析器和語法分析生成器,必裝sudo apt-get install libgoocanvas-dev /部分移動場景仿真的可視化測

3、試需要這個組件sudo apt-get install tcpdump /讀取pcap的packet traces,即包嗅探器sudo apt-get install sqlite sqlite3 libsqlite3-dev /支持統計特性的數據庫軟件sudo apt-get install libxml2 /xml的配置存儲軟件sudo apt-get install python-pygraphviz python-kiwi python-pygoocanvas /Gustavo's ns-3-pyviz的可視化軟件sudo apt-get install qt4-qmakesu

4、do apt-get install qt4-dev-tools安裝完成后:進入ns-allinone-3.16目錄sudo ./build.py 之后 進入ns-allinone-3.16/ns-3.16sudo ./waf -check返回目錄ns-allinone-3.16進入目錄netanim-3.103sudo make cleansudo qmake NetAsudo make之后sudo ls可以看見綠色的NetAnim這個東西就成功了sudo ./NetAnim 打開仿真界面安裝全部完成2. ns3仿真的運行 ctrl+alt+t調出終端,進入ns-allinon

5、e-3.16目錄, 輸入 cd ns-3.16/ 進入ns-3.16文件夾 輸入 cd examples/tutorial/ 進入examples里面的tutorial文件夾(里面有剛剛上手專用的實例,我們就用這個來調試) 在tutorial目錄下,輸入 cp first.cc /ns-allinone/ns-3.16/scratch/ ,將first.cc這個文件復制到ns-3.16的scratch文件夾里面. 具體位置由實際的自己的計算機的文件目錄所定。 輸入 cd . 輸入 cd . 此時進入的是ns-3.16文件夾 輸入cd scratch/ 進入scratch文件夾 輸入 ls 查看

6、有沒有那個復制進去的文件 有的話進行下面,沒有的話 要先復制進去 確定有的話,輸入 cd . 返回ns-3.16/ 輸入 sudo ./waf -run scratch/first 注意:在輸入運行的文件名時,不要加后綴名。 現在就可以運行了。以下是這個的顯示結果:此結果表示的意思是:第一行:客戶機在第2s的時候向IP為的節點的第九號端口(port)發送了1024字節大小的數據包第二行:的這個服務器接在2.00369s收到了來自的端口為49153的1024字節大小的數據包第三行:服務器在2.00369s向的4915

7、3號端口發送了1024字節的一個數據包第四行:2.00737s客戶機()接收到了來自ip為(服務器)的9號端口的一個1024字節的數據包3. 圖形仿真器(Netanim)的使用 進入ns-allinone-3.16文件夾 輸入cd netanim-3.103 進入netanim-3.103文件夾 看見那個綠色的了吧,就是運行那個綠色的來調出仿真界面輸入 ./NetAnim 可以看見下圖點擊左上角的文件夾符號,可以打開導入文件(PS:必須是.xml文件)選擇一個.xml文件即可導入。(如果沒有,請繼續下節的生成.xml文件)點擊綠色的開始符號即可運行。4. 生成.

8、xml文件比如:進入ns-3.16文件夾,可以看到有個scratch目錄。將你需要生成.xml的文件復制到scratch文件夾。進入scratchcd scratch/sudo apt-get install vim輸入sudo vim first.cc 即打開vim編輯器。可以看到這是first.cc的源代碼 按下I 可以進入編輯模式 按下ESC可以退出編輯模式 在頭文件包含處添加一句#include “ns3/netanim-module.h”然后去找到有一句 Simulator:Run();在這句的前面添加一行代碼AnimationInterface anim(“first.xml”);

9、按下ESC,退出編輯模式按下:wq 可以將剛才的改動保存輸入 cd .返回ns-3.16文件夾輸入 sudo ./waf run scratch/first 注意不要有后綴名運行成功輸入 ls 可以看到有個名字叫做 first.xml的文件 這個就是可以當作動畫的文件。再用上一節的仿真界面的使用來運行這個就行如圖:成功的仿真了。5. .tr和.pcap文件的生成和解析tr文件的生成:需要在Simulator:Run (); 這個的前面加上 AsciiTraceHelper ascii; csmaHelper.EnableAll (ascii.CreateFileStream (“csma-1.

10、tr”);pcap文件的生成: 需要在Simulator:Run (); 這個的前面加上 csmaHelper.EnablePcapAll (“csma-1”, false);如圖:之后按照上面的運行方法運行。(csmaHelper是由CsmaHelper這個類(協議)實例化的對象).如圖運行完成:之后ls 看有沒有自己命名的那些文件:我的tr文件為test-csma-1.tr 我的pcap文件為 test-csma-1.pcap輸入vim 自己的文件名 即: vim test-csma-1.tr如圖:分析Ascii Traces 在一個極其密集的文檔中有很多信息,但是需要注意的第一件事是在這

11、個文件中有很多分立的行。除非你大大加寬你的窗口,否則是很難看清楚的。每一行對應了一個trace事件。本例中我們在查看每個點到點設備的傳輸隊列的trace事件。傳輸隊列是任一個目的地為點到點信道的數據包的必經隊列。注意trace文件的每行以一個單獨的字符開始(后面帶有空格)。這個字符具有如下含義:· +: An enqueue operation occurred on the device queue;· -: A dequeue operation occurred on the device queue;· d: A packet was dropped, t

12、ypically because the queue was full;· r: A packet was received by the net device. · +:設備隊列中的入隊操作;· -:設備隊列中的出隊操作;· d:數據包被丟棄,通常因為隊列已滿;· r:網絡設備接收到數據包。我們來更詳細的看一下trace文件的第一行。為了看得更清晰,我把這一行分成了不同的部分,并在左邊標出序號: 00 + 01 2 02 /NodeList/0/DeviceList/0/$ns3:PointToPointNetDevice/TxQueue/E

13、nqueue 03 ns3:PppHeader ( 04 Point-to-Point Protocol: IP (0x0021) 05 ns3:Ipv4Header ( 06 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags none 07 length: 1052 > ) 08 ns3:UdpHeader ( 09 length: 1032 49153 > 9) 10 Payload (size=1024) 展開后的trace事件的第一行(序號00)代表操作。+字符表示是一個傳輸隊列的入隊操作。第二行

14、(序號01)是單位為秒的仿真時間。Trace的下一行(序號02)告訴我們trace發送端發起這個事件(以tracing命名空間表示)。你可以認為tracing命名空間有點像一個文件系統命名空間。命名空間的根為NodeList。這個NodeList是NS-3核心代碼管理的一個容器,此容器包含有一個腳本中創建的所有的節點。正如一個文件系統在根下有目錄,在NodeList下有節點數。字符串/NodeList/0是指NodeList中第0個節點,我們通常認為是"node 0".每個節點中有一個已經安裝好的設備列表。這個列表是在命名空間的下一個出現的。可以看到trace事件來自節點中

15、安裝的第0個設備DeviceList/0。下一個字符串,$ns3:PointToPointNetDevice告訴我們第0個節點的設備列表的第0個位置的設備類型。回憶序號00處的+操作表示設備的傳輸隊列發生了入隊操作,這個在"trace path"TxQueue/Enqueue的最后部分反映出來了。Trace中剩下的幾行是很直觀的。序號03-04處表明數據包封裝成點到點協議。序號05-07處顯示數據包IP版本,發送端IP地址,接收端IP地址為。序號08-09出顯示數據包的UDP頭,最后序號10處表明數據包數據量為1024bytes。在trace

16、文件中的下一行顯示了這個數據包在這個節點中從傳輸隊列中被移除。Trace文件的第三行顯示了數據包正在被回顯服務器所在的節點的網絡設備接收。trace如下。 00 r 01 2.25732 02 /NodeList/1/DeviceList/0/$ns3:PointToPointNetDevice/MacRx 03 ns3:Ipv4Header ( 04 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags none 05 length: 1052 > ) 06 ns3:UdpHeader ( 07 length:

17、1032 49153 > 9) 08 Payload (size=1024) 注意,trace操作現在是r并且仿真時間已經增加到2.25732秒。如果你一直按照本教程來操作,你已經把網絡設備的DataRate,和信道Delay設置成默認值。在第2行中,Trace發送端命名空間條目已經改變,來顯示這個事件是來自節點1(/NodeList/1),即數據包的接收trace端(/MacRx)。通過查看文件中其他的traces,你可以很容易的跟蹤數據包。5.3.2 PCAP 格式Tracing ns-3設備控制器也可以被用來創建.pcap格式的trace文件。縮寫pcap(通常為小寫)表示pack

18、et capture,事實上是包含有定義一個.pcap文件格式的API。可以讀取并且顯示這種格式的最流行的程序是Wireshark(以前被稱為Ethereal)。然而,有很多其他的分析器也使用這個包格式。我們鼓勵讀者了解其他的分析pcap追蹤文件的工具。在本教程中,我們用tcpdump來查看pcap trace。在scratch/myfirst.cc中我們剛增加的ASCII追蹤代碼后面插入這行代碼。注意我們剛使用的是字符串''myfirst"而不是"myfirst.pcap"。這是因為這里傳遞的參數是個前綴,而不是完整的文件名。在仿真過程中,hel

19、per將為任何一個點到點設備創建一個追蹤文件。文件名將包含預設前綴,節點名,設備名,和".pcap"后綴。在我們的例子腳本中,我們最終將看到名為"myfirst-0-0.pcap"和"myfirst-1-0.pcap"。這分別是為節點0設備0,和節點1設備0創建的pcap trace文件。用tcpdump讀取結果 此處最簡單的做法就是使用tcpdump來查看pcap文件, tcpdump -nn -tt -r myfirst-0-0.pcap reading from file myfirst-0-0.pcap, link-type

20、PPP (PPP) 2.000000 IP .49153 > .9: UDP, length 1024 2.514648 IP .9 > .49153: UDP, length 1024 tcpdump -nn -tt -r myfirst-1-0.pcap reading from file myfirst-1-0.pcap, link-type PPP (PPP) 2.257324 IP .49153 > .9: UDP, length 1024 2.257324 IP 10.

21、 > .49153: UDP, length 1024在myfirst-0-0.pcap(客戶端設備)文件中可以看到回顯數據包在第二秒被發送。如果查看第二個文件(myfirst-1-0.pcap)可以看到此包在2.257324秒被收到。在第二個文件中可以看到在2.257324秒這個包被回應,最終,在客戶端2.514648秒回應的包被收到。 用Wireshark讀取結果如果你對Wireshark不熟悉,從/可以下載到程序和文檔。Wireshark是一個可以用來顯示trace文件的用戶圖形接口。如果你安

22、裝了Wireshark,可以打開和查看每一個trace文件,就像這些trace是使用包嗅探工具在真正的網絡上抓下來一樣。對于trace文件和pcap文件 均可以自己編寫gawk腳本來查看,編寫方法自己百度。以下為實例講解:打開first.cc文件 (前面的標號是我自己的vim配置,只是方便閱讀,并不是代碼。)頂部的注釋欄為GNU聲明 1 /* -*- Mode:C+; c-file-style:"gnu" indent-tabs-mode:nil; -*- */ 2 /* 3 * This program is free software; you can redistri

23、bute it and/or modify 4 * it under the terms of the GNU General Public License version 2 as 5 * published by the Free Software Foundation; 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or

24、 FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software 14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 0211

25、1-1307 USA 15 */然后是頭文件包含 16 17 #include "ns3/core-module.h" 核心模型庫 18 #include "ns3/network-module.h" 網絡模型庫 19 #include "ns3/internet-module.h" 因特網模型庫 20 #include "ns3/point-to-point-module.h" 點到點網絡模型 21 #include "ns3/applications-module.h" 應用模型庫正式代碼:

26、 22 23 using namespace ns3; 使用ns3的命名空間 24 25 NS_LOG_COMPONENT_DEFINE ("FirstScriptExample"); 啟用日志,日志是方便在運行和運行成功后查看輸出的信息的。 26 27 int 28 main (int argc, char *argv) 29 30 LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO); 開啟客戶機應用日志,記錄客戶機的使用情況 31 LogComponentEnable (&q

27、uot;UdpEchoServerApplication", LOG_LEVEL_INFO); 開啟服務器應用日志,記錄服務器的使用情況 32 33 NodeContainer nodes; 實例化一個節點容器對象,里面還是空的。 34 nodes.Create (2); 為容器創建兩個新的節點。 35 36 PointToPointHelper pointToPoint; 實例化一個點到點協議的對象。 37 pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps");

28、設置點到點協議的數據傳輸速率。 38 pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"); 設置點到點協議的網絡延遲。 39 40 NetDeviceContainer devices; 實例化一個網卡容器。 41 devices = pointToPoint.Install (nodes); 為節點安裝帶有點到點協議的網卡。 42 43 InternetStackHelper stack; 實例化一個協議棧。 44 stack.Install (nodes); 為每個節點安裝一個協議棧用于網卡存儲網絡協議。 45 46 Ipv4AddressHelper address; 實例化一個IP地址的對象。 47 address.SetBase ("", ""); 設置IP地址和子網掩碼。 48 49 Ipv4InterfaceContainer interfaces = address.Assign (devices); 為網卡注冊IP地址。 50 以下為應用層配置 51

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論