天天看點

ns-3學習手記11, ns-3概述2, 程式設計小技巧3, 腳本4,環境配置過程中的小問題5, 環境配置好可以安裝ns-3.286,運作流程圖

( 安裝軟體一定看官方文檔,别自己瞎鼓搗,浪費時間;官方文檔在實際安裝中出現問題了,再尋求部落格等第三方找線索,但也不是盲目的操作。)

ns-3 官方連結:https://www.nsnam.org/wiki/Installation

切記:不要改ubuntu下的下載下傳連結鏡像sources.list,可以一步一步執行完成依賴環境的安裝

備注:pip無法定位,通過sudo apt install python3-pip安裝解決

學習書目參考:《開源網絡模拟器ns-3 : 架構與實踐》 / 周迪之編著

如有侵權,請聯系删除。

1, ns-3概述

1,ns-3(network simulator)是一款C++寫開源項目,主要運作平台GUN/Linux,在Windows下也可使用Cygwin或VS運作,但不能使用部分功能如與實體網絡互動等

2,ns-3沒有圖形界面,模拟網絡時需要做以下步驟:

(1)下載下傳源代碼

(2)編譯源代碼

(3)編寫模拟腳本

(4)運作模拟腳本

3,ns-3支援C++,python

4,計算機網絡分為兩部分:

(1)結點和連接配接結點的信道所組成的網絡拓撲

(2)運作在結點和信道中的網絡協定

5,ns-3模拟的虛拟網絡中:結點和信道被抽象成C++類;結點和信道的連接配接被抽象成不同C++對象之間的關聯。

6,在ns-3中可以模拟出:有線網絡的點對點協定(PPP)和總線網絡,無線網絡中的無線區域網路(基于802.11系列标準),長期演進技術(LTE)

7,采用了離散事件(Discrete Event)的模拟技術,可逼真的模拟實體世界中的各種協定:應用層中的各種分組産生器、傳輸層的TCP和UDP、網絡的IPv4和IPv6協定、鍊路層和實體層的PPP,IEEE 802.11a/b/g/n 和LTE協定等

8,輔助功能:trace生成功能,則可利用第三方軟體(wireshark、tcpdump)對ns-3産生的資料進行分析。

9,其主要用于模拟網絡拓撲和運作其中的網絡協定,關注的是協定行為。ns-3不考慮:結點内部的硬體延遲、CPU使用率等

10,waf指令:負責C++源代碼編譯和腳本運作。

11,ns-3是由不同子產品(model)所組成的項目。如:LTE子產品負責實作LTE網絡協定棧。Internet子產品負責實作TCP/IP協定棧;Wi-Fi子產品負責實作IEEE802.11系列協定。

12,文檔系統

文檔類型 具體内容 閱讀方式
ns-3 tutorial 基本概念和使用方法 詳細閱讀
ns-3 manual 深入講解ns-3的架構、設計原理和ns-3核心子產品中的主要技術細節 了解ns-3原理
Model library 分别講解每個子產品的背景知識、設計架構以及使用方法 編寫某一子產品的腳本或二次開發
Doxygen 一個工具網站:浏覽源代碼,查詢ns-3中的C++類、函數和變量的定義 編寫模拟腳本和進行擴充開發時使用
ns-3 wiki 安裝指南、代碼送出流程、版本釋出等輔助資訊,其中還包含一些沒有整合入主程式的子產品和更新檔 可查找所需代碼避免重複工作

13,

2, 程式設計小技巧

1,在ns-3.28的其他目錄中運作waf,備注:waf存在缺陷,隻能在ns-3.28目錄下執行。

目前使用者在“ns-3.28/src/internet/model”目錄下檢視TCP源代碼,想運作“ns-3.28/examples/tcp/tcp-bulk-send.cc”腳本,則需要執行以下代碼:

../../.././waf --run tcp-bulk-send
           

ns-3tutorial使用shell函數來簡化這個過程,其中“hg root”表示ns-3.28的絕對路徑,可将其添加到linux的“.bashrc”中儲存。

$function waff{cd $(hg root)&&./waf$*;}
$waff --run tcp-bulk-send

           

2,儲存waf輸出結果

儲存資訊到指定的檔案夾,可以使用如下指令,

//儲存std::cout輸出至output檔案
./waf --run script_name 1> output

//儲存NS_LOG輸出(即std::clog)至output檔案
./waf --run script_name 2> output

           

3, 腳本

1,頭檔案

(1)Core子產品和network子產品頭檔案是所有腳本必須包括的。其分别定義了ns-3的核心功能(如模拟事件,事件排程等)和基本網絡元件(如網絡節點、分組和位址等)。

(2)Internet和application子產品盡管不是必需的,但會經常用到,其中Internet子產品定義了TCP/IP協定棧。Application子產品定義了應用層的分組轉發模型(如貪婪模型,ON/OFF模型等)

2,名字空間

整個ns-3源代碼受“ns3”名字空間保護,必須申明:

using namespace ns3;

3,NS_LOG_COMPONET_DEFINE

使用log系統中的宏定義列印輔助資訊,

4,main()函數中的準備工作

設定最小模拟時間單元,開啟Log元件

5,建立網絡拓撲

(1)在實體網絡中,一個網絡拓撲由若幹結點和連接配接這些結點的信道組成。——>Node,Channel以及結點連接配接信道的網絡裝置NetDevice類,3個C++類。不同類型的信道對應不同的NetDevice和Channel子類,其中,NetDevice主要負責實作鍊路層協定,Channel主要負責實體層協定。如下圖關系:

ns-3學習手記11, ns-3概述2, 程式設計小技巧3, 腳本4,環境配置過程中的小問題5, 環境配置好可以安裝ns-3.286,運作流程圖

4,環境配置過程中的小問題

1,sphinx安裝問題,請移步官方文檔,即可快速解決

http://sphinxsearch.com/docs/current.html#installing-debian

2,GSL的安裝過程,出現問題,請按照下面的說明進行,直接安裝gsl-1.7不會出問題,(本機系統ubuntu16.04)

參考連結:https://coral.ise.lehigh.edu/jild13/2016/07/11/hello/

其中,運作出錯,找不到連結庫:

./a.out: error while loading shared libraries: libgsl.so.0: cannot open shared object file: No such file or directory

解決方法:

參考:https://blog.csdn.net/deeplan_1994/article/details/83927832

3,安裝pip的過程中遇到的問題;

問題結果:

sudo apt-get install cmake libc6-dev libc6-dev-i386 libclang-6.0-dev llvm-6.0-dev automake pip 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package pip

           

解決辦法:

參考連結:https://askubuntu.com/questions/672808/sudo-apt-get-install-python-pip-is-failing?newreg=e1eb9d0ee2504a6490ab81a40676498f

具體代碼:

$ sudo apt-get update && sudo apt-get install python3-pip

$ sudo apt-get update && sudo apt-get install python-pip

           

備注:其他換源在我的幾次嘗試中是沒有解決問題的。

4, netanim後又多了一個(nopython)

解決問題的參考連結:https://blog.csdn.net/megaarthur/article/details/21464681

官方參考:https://www.nsnam.org/wiki/NetAnim_3.104#Debian.2FUbuntu_Linux_distribution:

5, 環境配置好可以安裝ns-3.28

環境配置參看官方文檔:https://www.nsnam.org/wiki/Installation

具體指令代碼如下:

//第一步:下載下傳Python輔助腳本
[email protected]:~$ hg clone http://code.nsnam.org/ns-3-allinone/
//檢視其目錄結構:
[email protected]:~$ ls ns-3-allinone/
build.py  constants.py  dist.py  download.py  README  util.py

//第二步:下載下傳allinone源代碼包
[email protected]:~/ns-3-allinone$ python download.py -n ns-3.28

//備注,不指定版本,是下載下傳ns-3-dev,有一些正在開發的功能


//檢視包内結構;
[email protected]:~/ns-3-allinone$ ls
bake      constants.py   dist.py      netanim  pybindgen  util.py
build.py  constants.pyc  download.py  ns-3.28  README     util.pyc

第三步:編譯
[email protected]:~/ns-3-allinone$ python build.py --enable-examples

//結果顯示:
Waf: Leaving directory `/home/larry/ns-3-allinone/ns-3.28/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (18m55.485s)

Modules built:
antenna                   aodv                      applications              
bridge                    buildings                 config-store              
core                      csma                      csma-layout               
dsdv                      dsr                       energy                    
fd-net-device             flow-monitor              internet                  
internet-apps             lr-wpan                   lte                       
mesh                      mobility                  mpi                       
netanim (no Python)       network                   nix-vector-routing        
olsr                      point-to-point            point-to-point-layout     
propagation               sixlowpan                 spectrum                  
stats                     tap-bridge                test (no Python)          
topology-read             traffic-control           uan                       
virtual-net-device        visualizer                wave                      
wifi                      wimax                     

Modules not built (see ns-3 tutorial for explanation):
brite                     click                     openflow 

//第四步:運作
//備注:需要進入ns-3.28目錄下進行
[email protected]:~/ns-3-allinone/ns-3.28$ ./waf --run hello-simulator

//運作的結果:
Waf: Entering directory `/home/larry/ns-3-allinone/ns-3.28/build'
Waf: Leaving directory `/home/larry/ns-3-allinone/ns-3.28/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (2.715s)
Hello Simulator

           

備注:當改動了現有腳本或者編寫了一個新腳本時,則需要對ns-3項目重新編譯,直接在ns-3.28目錄下,運作“./waf"指令編譯即可。

build.by一般隻在第一次下載下傳ns-3代碼庫時使用。

6,運作流程圖

繼續閱讀