ns(來源於「network simulator」)是一系列離散事件網絡模擬器,包括ns-1ns-2ns-3。他們主要應用於研究[3]和教學。ns-3是自由軟件,以GNU GPLv2協議分發。

Quick Facts 開發者, 首次發佈 ...
ns-3網絡模擬器
Thumb
開發者ns-3 項目[注 1]
首次發佈2008年6月30日 (2008-06-30)[1]
當前版本3.31(2020年6月28日,​4年前​(2020-06-28
預覽版本Mercurial 目錄[2]
原始碼庫 編輯維基數據鏈接
程式語言C++(主要)Python(綁定)
作業系統GNU/Linux, FreeBSD, Mac OS X
平台IA-32, x86-64
類型網絡模擬
許可協議GNU通用公共許可證
網站www.nsnam.org
Close

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/LinuxFreeBSDSolarisOS 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個模塊,包括幾個真實網絡設備和協議的模塊。

模擬工作流程

大致上,創建一個模擬可以被分為以下幾個步驟:

  1. 拓撲定義:創建基本設施和相互關係,ns-3有一個嚮導能夠幫助完成此過程。
  2. 模型使用:添加模型(例如UDP、IPv4、點對點設備和連結、應用);此時大多數操作可通過嚮導完成。
  3. 節點和連接配置:設置模型默認值(例如,一個程序發送的包的大小和點對點連接的MTU值);此時大多數操作可過屬性系統完成。
  4. 執行:模擬事件,用戶請求數據。
  5. 性能分析:在模擬完成後帶時間戳的事件跟蹤記錄可供使用。這些數據能被工具,例如R語言分析並且得到結論。
  6. 圖形可視化:原始或處理過的數據能被工具,例如Gnuplotmatplotlib或是Xgraph畫出。

批評

對ns-2的批評主要是因為建模非常複雜並且耗時。主要是因為它沒有GUI並且需要學習腳本語言、隊列理論和建模技術。並且,最近有人抱怨模擬結果不可重現(可能是由於代碼庫的不斷變更)和使用某些協議一直碰到bug。

對ns-3的批評主要有它缺少ns-2支持的協議和不向後兼容ns-2。因為沒有GUI界面,所以和ns-2一樣,ns-3也需要大量的時間來學習。

參見

  • GloMoSim
  • NetSim
  • OMNeT++

註解

參考來源

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.