ns (network simulator) について
nsは、
インターネットを主な対象とした離散事象ネットワークシミュレータの系列 (ns-1, ns-2, ns-3) の名称です。これらは全てオープンソースで開発が進められており、研究と教育のために広く用いられています。
概要
ns-3プロジェクトの最終的な目標は、コンピュータネットワークの研究コミュニティで好んで利用されるオープンなシミュレーション環境を構築することです。この目標は概ね達成されており、実際にACM SIGCOMMなどのトップカンファレンスでの論文投稿で頻繁に使用されています。ns-2はアメリカの学術研究機関が中心に開発していましたが、ns-3はフランスの学術研究機関が中心となって開発が進められています。ns-3では、年次
会議(Annual Meeting)が開催され、利用者や開発者が集まり
ワークショップ等が行われています。ns-3はGNU GPLv2
ライセンスの下で、無償での研究・開発・使用が許可されています。
コンピュータネットワークシミュレータとしての世界シェアは高いものの、ネットワーク関係者全体で見るとユーザー数は少なく、ソースコードのコミットも活発とは言えない状況です。
ns-3の仕様概要
ns-3は、
インターネット・プロトコル・スイートのシミュレータとしての実装を主体としています。シミュレータであるため、実機実装時の動作保証はできません。そのため、実機と無関係な抽象的な理論検証に適しています。
システムは、シミュレーション実行を行うns-3 coreと、実験定義を行うsimulation scenarioに分かれています。ユーザーは自身のシミュレーション要求に合わせてコーディングし、Wafビルドシステムでビルドして実行します。ビルド時に出力されるバイナリはCPUに合わせて最適化され効率的に動作します。
ns-3 coreは主に
C++で構築されており、simulation scenarioの記述にのみ
Pythonを使用できます。
Pythonのみではcoreの改変は行えないため、独自プロトコルの実装など十分に機能を活用できません。
C++の演算子オーバーロードや
テンプレートメタプログラミングなどの高度な言語仕様を活用しており、ソースコードはコンパクトですが、文法が独特でビルドエラーも複雑になりがちで、開発初心者にはハードルが高くなっています。
アルゴリズムやプロトコルの大まかな動作に焦点を当てているため、現実のネットワーク機材と比較して実装されていない処理が多いです。また、クラスや関数の命名が機能と無関係な場合もあり、理解のために膨大な調査が必要になる場合があります。
イベントキューの長さが許す限り、シミュレーション上のノード数を増やすことが可能です。また、実機とシミュレータを組み合わせて実験ネットワークを構成することもできます。ns-3 coreはユーザー空間とカーネル空間に分かれており、サーバーやクライアントなどのクラスはユーザー空間で、ルーティングやNICなどのクラスはカーネル空間で利用します。
Linuxで動作するプロトコル・スタックのコードをns-3上で利用する機能(Direct Code Execution, DCE)も提供されています。また、MPIによるマルチプロセス並列化も可能です。シミュレーション結果を可視化する補助ソフトウェアとして、オンラインビジュアライザPyVizとオフラインビジュアライザNetAnimがあります。
Annual Meeting
ns-3
コンソーシアム主催で、利用者と開発者向けの年次
会議(Annual Meeting)が毎年開催されています。
会議では、
コンソーシアムの運営方針に関する議論や、初心者向けの
ワークショップなどが行われます。
歴史
1988年 (前史:REALの基礎開発)
nsの派生元であるREALの最初の
バージョンが開発されました。
カリフォルニア大学バークレー校で、Srinivasan Keshav氏によって、各種ゲートウェイアルゴリズムの性能比較研究の一環として、離散事象ネットワークシミュレーションに関する枠組みが構築されました。このシミュレータの詳細は「REAL: A Network Simulator」という論文で発表されました。REALは
コロンビア大学が開発していたNEST simulation toolkitを用いて構築され、初期の実用的なネットワークシミュレータとなりました。REALの開発は1997年のVer.5.0まで継続されました。
1995年 - 1997年 (ns-1の基礎開発)
ローレンス・バークレー国立研究所で、Steve McCanne, Sally Floyd, Kevin Fall氏らが参加するNetwork Research Groupによって、REALの
ソフトウェアアーキテクチャを元にnsの最初の
バージョンであるns version 1(後にns-1と呼ばれる)が開発されました。拡張可能で、容易に設定可能なイベントドリブン型シミュレーションエンジンとして設計されました。TCPの輻輳制御アルゴリズムやルータスケージュールアルゴリズムも搭載されました。シナリオ記述言語にはTcl、コア記述言語には
C++が採用されました。
1996年 - 1997年 (ns-2の基礎開発)
Steve McCanne氏がns-1のリファクタリングを行った結果を元にns-2が開発されました。シナリオ記述言語はOTcl、コア記述言語は
C++に変更されました。OTclの導入によりオブジェクト指向的なシナリオ記述が可能になり、
C++オブジェクトとの関連付けが容易になりました。ns-2でGPLv2に準拠するようになりました。
2006年 (ns-3の基礎開発)
ns-2の開発開始から10年が経過し、CPUのマルチコア化や無線ネットワークの普及が進む中、ns-2のアーキテクチャでは並列化や無線ネットワークへの対応が難しくなってきました。そこで、
アメリカ国立科学財団の支援の下、Tom Henderson, George Riley, Sally Floyd, Sumit Roy氏らが率いるチームによって、アーキテクチャを全面的に刷新したns-3が開発されました。シナリオとコアの記述言語は
C++に統一され、ns-2との互換性は失われました。
PythonバインディングとWafビルドシステムが導入され、無線ネットワークのシミュレーションコードの充実、MPIによる並列化対応が行われました。ビジュアライザはNamが廃止され、代わりにNetAnimとPyVizが導入されました。ドキュメントも拡充され、DoxygenによるAPIリファレンスも提供されました。
ns-3は無線ネットワークへの対応を強化しましたが、有線ネットワークのプロトコルに関するネイティブなシミュレーションコードが不足しているため、ns-2からの移行が難航しており、有線ネットワーク分野ではns-2、無線ネットワーク分野ではns-3という住み分けが続いています。
脚注
参考文献
REAL: A Network Simulator
REAL 5.0 Overview
NS(1) manual page
ns version 1 - LBNL Network Simulator
Marc Greis' Tutorial for the UCB/LBNL/VINT Network Simulator "ns"
The Network Simulator - ns-2 - ISI
ns-3
関連項目
シミュレーション - 現象を抽象化して近似的に再現すること。
en:Discrete event simulation
en:Network simulation