前言

在現代網路通訊技術的教學和科研中,迫切希望有一種先進的網路模擬技術。在網路模擬工具的研究和開發方面國內所做的工作較少,但是國外早已出現了很多研究成果和模擬工具,如ns-2、OMNet++、OPNET、GloMoSim、GTNetS、QualNet、Yans、NCTUNS、SSFNet、JiST和SimPy等。ns-3是在廣泛汲取現有優秀開源工具ns-2、GTNetS、Yans等技術經驗,摒棄現有工具的缺點開發出來的。最重要的是,ns-3基於GNU GPLv2許可,相信在開源力量的推動下,ns-3一定會會更加強大。

本文重點內容是ns-3的下載、編譯和安裝。所謂“條條大路通羅馬”,ns-3環境的搭建也是有多種可行之法,作為開發新手,快速掌握其中的一種方法,並且過濾掉所謂的“高大上”之法,未必不是件好事。

準備工作

ns-3的開發文件在nsnam官網有詳細的介紹,通過官網可以連結到nsnam的wiki頁面,https://www.nsnam.org/wiki/Installation,該頁面詳細介紹了ns-3的安裝。本人根據該文件,成功搭建了Ubuntu14.04 + ns-3.26的開發環境。

下面將準備工作總結為一個小指令碼。

#!/bin/sh
# Copyright(C) 2016 NiceTony Network. All rightsreserved.
# ns-3setup
#
# setup ns-3 env on `Ubuntu14.04+ns-3.26`
# History
# v1.0.0           2016-11-2
# Create.
#
# Have any questions about these content, plscontact me [email protected]

sudo apt-get install gcc g++ python -y
sudo apt-get install gcc g++ python python-dev -y
sudo apt-get install qt4-dev-tools libqt4-dev -y
sudo apt-get install mercurial -y
sudo apt-get install bzr -y
sudo apt-get install cmake libc6-dev libc6-dev-x32 g++-multilib -y
sudo apt-get install gdb valgrind -y
sudo apt-get install gsl-bin libgsl0-devlibgsl0ldbl -y
sudo apt-get install flex bison libfl-dev -y
sudo apt-get install tcpdump -y
sudo apt-get install sqlite sqlite3 libsqlite3-dev-y
sudo apt-get install libxml2 libxml2-dev -y
sudo apt-get install libgtk2.0-0 libgtk2.0-dev -y
sudo apt-get install vtun lxc -y
sudo apt-get install uncrustify -y
sudo apt-get install doxygen grphviz imagemagick -y
sudo apt-get install texlive texlive-extra-utilstexlive-latex-extra texlive-font-utils dvipng -y
sudo apt-get install python-sphinx dia -y
sudo apt-get install python-pygraphviz python-kiwipython-pygoocanvas libgoocanvas-dev -y
sudo apt-get install libboost-signals-dev libboost-filesystem-dev -y
sudo apt-get install openmpi-bin openmpi-commonopenmpi-doc libopenmpi-dev -y

注意:支援python繫結生成修改,需要安裝如下的軟體包:apt-get install cmake libc6-dev libc6-dev-i386g++-multilib,但是ubuntu14.04系統源中未能發現軟體包libc6-dev-i386,於是使用libc6-dev-x32代替。如果系統缺少模組所需的軟體包,會造成模組安裝失敗。但是一般不會影響系統影響ns-3的主體和其他模組的執行。

NS-3編譯好的元件如下圖,

圖1 ns-3.26編譯後的元件

下載NS-3

直接下載tar壓縮包(推薦使用,最簡單直接)

mkdir ns-3
cd ns-3
wget https://www.nsnam.org/release/ns-allinone-3.26.tar.bz2
tar -jxvf ns-allinone-3.24.1.tar.bz2

圖2 ns-3.26解壓後的檔案

我們下載的是ns-3一體化安裝包,只需要執行build.py就可以滿足大部分需求,下一節將詳細介紹編譯的問題,

編譯安裝

使用build.py編譯

執行命令即可,

sudo ./build.py --enable-examples --enable-tests

使用waf編譯

一旦工程已經編譯過,就不能再使用build.py指令碼
使用waf重新配置和編譯ns-3系統

//清除先前配置編譯
./waf clean   

//重新配置ns-3,優化編譯例子和測試
./waf -d optimized --enable-examples--enable-tests configure   

//optimized引數,優化模式下預設是禁止ns-3特殊的日誌系統(logging),這樣導致執行的的結果不能再控制檯上顯示。因此,建議更改為

//./waf -d debug --enable-examples --enable-tests configure
./waf    正式編譯

圖3 ns-3.26編譯過程及結果
圖4 ns-3.26編譯過程及結果

測試

使用test.py測試

cd ns-3.26/
./test.py -c core    測試ns-3發行版是否編譯正確

圖5 測試ns-3編譯結果

執行指令碼測試

sudo ./waf --run scratch-simulator

圖6 執行scratch-simulator

.