ns (模擬器)
開發者 | ns-3 項目[注 1] |
---|---|
首次發布 | 2008年6月30日[1] |
當前版本 | 3.31(2020年6月28日 | )
預覽版本 | Mercurial 目錄[2] |
原始碼庫 | |
程式語言 | C++(主要)Python(綁定) |
作業系統 | GNU/Linux, FreeBSD, Mac OS X |
平台 | IA-32, x86-64 |
類型 | 網絡模擬 |
許可協議 | GNU通用公共許可證 |
網站 | www |
ns(來源於「network simulator」)是一系列離散事件網絡模擬器,包括ns-1、ns-2和ns-3。他們主要應用於研究[3]和教學。ns-3是自由軟體,以GNU GPLv2協議分發。
ns-3項目的目標是創建一個開放的用於研究的網絡模擬環境,以便於學術團體;這意味著兩件事:
- 它需要滿足現代網絡研究模擬的需要
- 它需要創建一個社區,鼓勵貢獻、評審並且提高軟體質量。
因為創造一個巨大、高質量且被充分測試的網絡模擬器需要大量的工作,ns-3項目將任務分配給了社群的各個開發者和用戶。
歷史
REAL 是 ns 的原型,始於1989年。
ns-1
ns的第一版,被稱作ns-1,由勞倫斯伯克利國家實驗室(LBNL)的Steve McCanne、Sally Floyd、Kevin Fall和其他貢獻者開發於1995-1997年間。這時期它常被稱為LBNL網絡模擬器(LBNL Network Simulator),源於早期的由S. Keshav編寫的REAL模擬器。模擬器的核心由C++寫成,和以Tcl腳本為基礎的模擬場景。[4]長期的貢獻來源於Sun、加州大學伯克利分校的Daedelus項目和卡內基梅隆大學Monarch項目。
ns-2
在1996-1997年間,ns的第二版(ns-2)最初由Steve McCanne重構而來[5]並用MIT的OTcl替代了Tcl語言,OTcl是一個物件導向的Tcl方言。ns-2的核心部分依舊由C++寫成,但是C++模擬對象和變量也可在OTcl中使用。模擬腳本由OTcl寫成。這樣的結構使得模擬方案能由解釋器運行,同時方便的更改而不用重新編譯模擬器。在ns-2推出的時期(1990中葉),這樣的方式非常方便並且避免了浪費時間的編譯操作。而且腳本語言的語法更加清晰。ns-2有一個一起工作的部件,被稱作「Network Animator」(nam-1),由Mark Handley編寫,用來圖形化的展示模擬場景。
1997年,DARPA的Virtual InterNetwork Testbed(VINT)項目啟動,勞倫斯伯克利國家實驗室、Xerox PARC、加州大學伯克利分校和南加州大學信息科學研究所(ISI)參與其中。ns-2的迅速開發正是在這個時期。同時維護軟體的任務漸漸地由ISI接手,最終John Heidemann領導了這個維護任務。在完成了VINT項目後,ns-2在2001-2004年繼續由DAPRA SAMAN和NSF CONSER贊助,最終贈與USC/ISI。
現在,ns-2包含了超過30萬行代碼,並且存在相當多的一部分代碼未被合併到主線中。(因為有許多ns-2分支,包括被維護的和未維護的)它能夠運行在GNU/Linux、FreeBSD、Solaris、OS X和Windows 95/98/NT/2000/XP上。ns-2以GPL v2協議分發。
ns-3
ns-3的開發始於2004-2005年間。Tom Henderson(華盛頓大學)領導的一個團隊、George Riley(喬治亞理工學院)、Sally Floyd(國際計算機研究中心)和Sumit Roy(華盛頓大學),申請並受美國國家科學基金會(NSF)資助,共同開發ns-2的替代品,被稱作ns-3。於此同時,INRIA Sophia Antipolis的Planete研究小組內的Mathieu Lacage和Walid Dabbous開始尋找一個ns-2的替代品,以用於測試IEEE 802.11Wi-Fi模型。Lacage原先使用的模擬器名叫Yet Another Network Simulator(yans)。[6]
兩股力量一起合作,在2005年2月的ns-developers郵件列表上討論ns-3的設計方案。在2005年2月22日,Tom Henderson在ns-developers郵件列表上發了一封郵件,說「我們想要討論一下未來ns-2如何被重構或者被分支(至少在現在並行的開發,並且維護已有的代碼,」We intend to have some discussions on how some of ns-2 might be either refactored or forked as part of a future development effort (in parallel, for now, with maintenance of the existing code tree)「)。[7]一些主要的目標包括了更好的支持網絡模擬、復用生成代碼和更好的集成以testbed為基礎的研究工具。在ns-3的開發過程中,他們決定不再向下兼容ns-2,這主要是因為向後兼容需要太多的額外工作。新的模擬器將從頭編寫,使用C++。
ns-3的開發始於2006年7月1日。[8][9]代碼主要由Mathieu Lacage編寫,並利用了部分yans模擬器、喬治亞理工學院網絡模擬器(GTNetS)及ns-2的代碼。Gustavo Carneiro貢獻了一個框架,包括生成Python綁定(pybindgen)及使用Waf編譯系統。
2008年6月,ns-3發布了ns-3.1,之後項目在每個季度發布,直到最近變成了1年3次發布。ns-3在2012年第三季度發布了它的第15版(ns-3.15)。[10]
目前三個版本的狀態:
- ns-1不再開發和維護
- ns-2在2010年左右停止開發。目前已不再開發和維護。
- ns-3處於活躍的開發中。
設計
ns-3由C++和Python寫成,並且以這兩種作為編寫腳本的語言。
組件
ns-3被分為24個模塊,包括幾個真實網絡設備和協議的模塊。
模擬工作流程
大致上,創建一個模擬可以被分為以下幾個步驟:
- 拓撲定義:創建基本設施和相互關係,ns-3有一個嚮導能夠幫助完成此過程。
- 模型使用:添加模型(例如UDP、IPv4、點對點設備和連結、應用);此時大多數操作可通過嚮導完成。
- 節點和連接配置:設置模型默認值(例如,一個程序發送的包的大小和點對點連接的MTU值);此時大多數操作可過屬性系統完成。
- 執行:模擬事件,用戶請求數據。
- 性能分析:在模擬完成後帶時間戳的事件跟蹤記錄可供使用。這些數據能被工具,例如R語言分析並且得到結論。
- 圖形可視化:原始或處理過的數據能被工具,例如Gnuplot、matplotlib或是Xgraph畫出。
批評
對ns-2的批評主要是因為建模非常複雜並且耗時。主要是因為它沒有GUI並且需要學習腳本語言、隊列理論和建模技術。並且,最近有人抱怨模擬結果不可重現(可能是由於代碼庫的不斷變更)和使用某些協議一直碰到bug。
對ns-3的批評主要有它缺少ns-2支持的協議和不向後兼容ns-2。因為沒有GUI界面,所以和ns-2一樣,ns-3也需要大量的時間來學習。
參見
註解
- ^ Tom Henderson, Mathieu Lacage, George Riley, Mitch Watrous, Gustavo Carneiro, Tommaso Pecorella and others.
參考來源
- ^ Henderson, Tom. upcoming ns-3.1 release (郵件列表). ns-announce. 2012-06-09 [2012-12-26]. (原始內容存檔於2012-03-27).
- ^ ns-3-dev. ns-3 project. [26 December 2012]. (原始內容存檔於2013-02-22).
- ^ 存档副本. [2012-12-29]. (原始內容存檔於2013-02-22).
- ^ 存档副本. [2012-12-29]. (原始內容存檔於2013-01-04).
- ^ Sandeep Bajaj, Lee Breslau, Deborah Estrin, Kevin Fall, Sally Floyd, Padma Haldar, Mark Handley, Ahmed Helmy, John Heidemann, Polly Huang, Satish Kumar, Steven McCanne, Reza Rejaie, Puneet Sharma, Kannan Varadhan, Ya Xu, Haobo Yu, and Daniel Zappala, Improving Simulation for Network Research, Technical Report 99-702, University of Southern California, March, 1999.
- ^ Lacage, M. and Henderson, T.R., "Yet another network simulator", Proceeding from the 2006 workshop on ns-2: the IP network simulator, ACM, 2006.
- ^ 存档副本. [2012-12-29]. (原始內容存檔於2012-03-27).
- ^ 存档副本. [2012-12-29]. (原始內容存檔於2012-03-27).
- ^ ns-3. July 2, 2011 [March 31, 2011]. (原始內容存檔於2013-02-15).
- ^ Henderson, Tom. ns-3.15 released (郵件列表). ns-announce. 2012-08-29 [2012-12-26]. (原始內容存檔於2016-03-05).