本篇問題:
1. (1) .cc是linux下c++ 原始檔的預設字尾,.cpp是c++語言檔案的字尾名,採用.cc字尾;
執行"g++ poisson.cc -o poisson.o -std=c++11"後生成檔案「poisson.o」,其中.o是編譯的中間目標檔案,可以將多個中間目標檔案鏈結成可執行檔案。
2. ns**的唯一記錄——trace檔案:
(1) 開啟trace:
set nd [open out.tr w]
$ns trace-all $nd
set namtracefd [open poisson.nam w]
$ns namtrace-all $namtracefd
(2)
檔案格式舉例:第一列event +:enqueue -
:dequeue r:receive d:drop,具體實現方式可在[1]中查到,
乙個生成的例項:
+ 0.293601 0 1 poisson 210 ------- 0 0.0 1.0 -1 0 //最後一列pkt id,倒數第二列seq num
- 0.293601 0 1 poisson 210 ------- 0 0.0 1.0 -1 0
r 0.305281 0 1 poisson 210 ------- 0 0.0 1.0 -1 0
+ 0.405701 0 1 poisson 210 ------- 0 0.0 1.0 -1 1
- 0.405701 0 1 poisson 210 ------- 0 0.0 1.0 -1 1
r 0.417381 0 1 poisson 210 ------- 0 0.0 1.0 -1 1
+ 0.50708 0 1 poisson 210 ------- 0 0.0 1.0 -1 2
- 0.50708 0 1 poisson 210 ------- 0 0.0 1.0 -1 2
r 0.51876 0 1 poisson 210 ------- 0 0.0 1.0 -1 2
+ 0.73111 0 1 poisson 210 ------- 0 0.0 1.0 -1 3
- 0.73111 0 1 poisson 210 ------- 0 0.0 1.0 -1 3
r 0.74279 0 1 poisson 210 ------- 0 0.0 1.0 -1 3
+ 0.82048 0 1 poisson 210 ------- 0 0.0 1.0 -1 4
- 0.82048 0 1 poisson 210 ------- 0 0.0 1.0 -1 4
r 0.83216 0 1 poisson 210 ------- 0 0.0 1.0 -1 4
+ 1.231313 2 1 exp 210 ------- 0 2.0 1.0 0 5
- 1.231313 2 1 exp 210 ------- 0 2.0 1.0 0 5
r 1.242993 2 1 exp 210 ------- 0 2.0 1.0 0 5
+ 1.248113 2 1 exp 210 ------- 0 2.0 1.0 1 6
- 1.248113 2 1 exp 210 ------- 0 2.0 1.0 1 6
r 1.259793 2 1 exp 210 ------- 0 2.0 1.0 1 6
3. 搭建poisson流量發生器:(1) 利用c++11的random庫:
(2) 利用ns2中自帶流量發生器expoo,設定其burst_time為零(即指數開關流等效泊松流);
(3)新建立乙個ns2的全新的流寫入packet.h庫
[2],下圖右側顯示的是泊松流在某
agent上
4.處理trace檔案——gawk元件:
通過「gawk -f progawk out.tr>pc」命令按照progawk檔案中編寫的gawk規範命令
(提取時間為第一列,分組id為第二列
)處理生成的trace檔案「out.tr」,將生成的兩列資料存在叫pc的檔案中(如下圖)稍後處理。
更多gawk命令的介紹:
#列印第一欄含有foo的所有記錄
gawk '$1~/foo/' bbs-list
#fs為欄分隔符,賦值,分欄,列印第二欄
gawk 'begin;'
#ofs為輸出分隔符,ors為輸出記錄分隔符
gawk 'begin '
//命令原型 gawk 'program' input-file1 input-file2 ...
5. 繪製圖形的工具——gnuplot:輸入gnuplot啟動,通過「plot 『pc』 with lines」命令以pc檔案上的第一列資料為x軸,第二列資料為y軸繪圖,與matlab得到的**結果進行對比:(gnuplot圖中y軸為分組的序號,x軸為時間,上面的為事件入隊「+」的
曲線,下方為出隊/接收事件的曲線,發生重合
/*使用「show functions/variables」命令檢視相應資訊,**表示乘方*/
plot [0:10] sin(x)+0.1*x
plot 'out.tr' using 0:($1+$2) w linesp lt 2 pt 3 // 0表示xtics為0,1,2...,若為其他列則x座標為其他列,y座標為兩列和,lt表示線型
如果通過gawk處理好的檔案也可以直接用ns2自帶的xgraph畫圖。還是推薦awk與xgraph組合使用,gnuplot暫時雞肋了。
未解決的問題:本文只是將ns2重要元件全部搭建出來,學習了
ns2中node、agent等
具體實現方法。
下篇文章將繼續深入學習上面各元件,最終實現一項具體的**實驗。
c++程式的除錯過程也是項艱鉅的任務。
ns2具體案例:**研究某排隊系統的實際操作方法(排隊的到達為泊松流,服務為一常數)
matlab**出的排隊系統中時延與佇列溢位概率的關係
[1]ns2與網路**,于斌
[2]參考中方法將poisson流量發生器整合到ns2中
ns2中變數的繫結
asrmagnet asrmagent bind pdistance pdistance 實變數 bind requerstor requestor 整形變數 bind time lastsent lastsesssent 時間變數 bind bw ctrlimit ctrlbwlimit 帶框變數...
NS2中,編譯檔案
ns2是用c 和tcl編寫的,可以按照自己的方式修改並執行。所以就需要修改一下裡面的原始碼,編譯之後執行。這裡簡單介紹一下,如何編譯。一如果只是簡單改動,比如新增了乙個.cc檔案,或者修改了乙個.cc檔案。在makefile檔案修改之後,直接在nsx.xx目錄下,執行 make就可以了。修改make...
NS2中trace檔案分析
ns中模擬出來的時間最終會以trace檔案的形式告訴我們,雖然說一般都是用awk等工具分析trace檔案,但是了解trace檔案的格式也是必不可少的。下面就介紹一下無線網路模擬中trace檔案的格式。trace檔案的最開始時一段形如 m 0.0 nn 4 x 500 y 500 rp dsdv m ...