我想關於ns2有非常多的人介紹了,台灣最著名的應該是金門科技大學的柯志亨教授的網頁及兩本著作-計算機網路實驗(學貫出版)紅皮基礎實作及藍皮多媒體通訊與無線網路,我這裡想分享的是我一年多來自己的一點點經驗。

 把在ns-2.XX資料夾下make出來的ns.exe檔放到tcl檔所在的資料夾下執行./ns.exe 檔名.tcl 就可以進行模擬,這是所有初學ns2的使用者都必學的第一堂課。如果不喜歡每次重新make完都要移動ns.exe檔到tcl檔所在目錄下,可以執行ln -s /home/username/ns-allinone-2.XX/ns-2.XX/ns.exe /home/username/ns-allinone-2.XX/bin/ 來建立指令鏈結就可以直接在tcl檔所在目錄下直接執行ns 檔名.tcl 指令進行模擬,username是你windows作業系統下安裝cygwin所使用的帳號,而版本不同ns-allinone-及ns-後的版本號也不相同,例如我是在windows XP作業系統下的帳號ByMa安裝的2.26版,我要執行的是ln -s /home/ByMa/ns-allinone-2.26/ns-2.26/ns.exe /home/username/ns-allinone-2.26/bin/。

 必須注意兩點;第一,如果你是使用別人已經安裝過的ns- allinone重新make才會有上述ns指令無效必須移動ns.exe檔的問題,安裝原始.tar.gz檔可能不會有這樣的問題,只要自己嘗試ns指令不能work但卻可以靠移動ns.exe到tcl檔目錄下執行./ns.exe 檔名.tcl那就是/ns-allinone-2.XX/bin下的鏈結有問題,可以到/home/username/ns-allinone-2.XX/bin/下檢查ns.exe(右鍵->內容-目標是否是自己的安裝目錄還是拷貝來的目錄)。第二,如果/ns-allinone-2.XX /bin資料夾下已經存在錯誤的ns.exe鏈結,那ln -s /home/username/ns-allinone-2.XX/ns-2.XX/ns.exe /home/username/ns-allinone-2.XX/bin/指令將會無效,必須刪除/ns-allinone-2.XX/bin/資料夾下舊的ns.exe重新執行或是改變linux參數,-s(軟鏈結)可以改成-i(詢問是否覆蓋)或是-f(強制覆蓋)。

 回歸正題,其實上面的問題可以反向思考一個,如果你有很多版本的ns.exe要測試就可以make出好幾個ns.exe進行模擬,可是這樣似乎不是一個正確的選擇,按照我的經驗,因為cygwin版本不同有某些版本開發環境是有問題的,每次make不同的ns.exe未必都會成功,甚至需要重新開機。

 曾經有人問我,把我的功能寫在make ns-2.XX的相關.cc檔或是寫在tcl腳本檔裡有什麼差別,不都一樣可以執行出我想要的結果嗎?我自己的經驗覺得可以用戲劇角度去闡述,ns.exe就像是道具箱,tcl腳本檔就像劇本,劇本可能隨時都會有所更動,但道具不管是否用到都要隨時準備齊全。ns.exe定義了所有node主動、被動或相對應別的node應有的對應動作的所有class及function,不是每個class及function都要用到,但tcl腳本檔要用到時一定要找得到而不需重新make,tcl是靠compiler make出來的直譯器ns.exe執行,因此好的Programer應該要把ns.exe寫的富彈性,讓tcl腳本檔可以輕易被修改成自己所希望的情境。例如我是用博士班學長KEN哥基於ns2 gnutella file sharing simulator嘔心瀝血所coding出來的video streaming simulator,我做研究的是制裁只下載不上傳的freerider,每次我所需要freerider數量都不同,之前我舊版程式是每次都要在.cc檔裡修改數量,這是非常weak的,現在我在新版的程式裡可以不用每次修改程式重新make,只要在tcl檔裡設定數量就可以做新的實驗,這個部分其實非常簡單,但這就是個人coding style的差異,我儘量學習讓自己的程式寫的有效率一點。

創作者介紹

[射手白馬] 科奴苦勞記

射手白馬 發表在 痞客邦 PIXNET 留言(0) 人氣()