Ns (シミュレータ)
ns-3 coreはC++の演算子のオーバーロード,テンプレートメタプログラミング,Standard Template Library (STL)等の言語仕様を活用して稠密に構築されており、機能の数と比較してソースコードはコンパクトにまとめられている。その反面、文法が独特になり、ソースコードもビルドエラーの出力も長大かつ複雑になり、問題の発生原因の特定が難しくなるため、ソフトウェア開発初心者にとっては開発のハードルが高くなるという欠点が生じてしまっている。また、アルゴリズム,プロトコルの大まかな動作のみに焦点を当てているため、現実のネットワーク機材と比較して実装されていない処理が多い。さらに、クラスや関数の命名には、実装されている機能と全く無関係な命名が行われている場合があり、その不明な点を理解するために、膨大な調査が要求される点も問題である。
C++の言語仕様の制約下で、イベントキューの長さが許される限り、シミュレーション上のネットワークを構成するノード数を増加させることが可能である。
実機とシミュレータの組み合わせで実験ネットワークを構成する事も可能である。
Steve McCanneがns-1のリファクタリングを行った結果のソースコードを元にns-2の開発が行われた。シナリオの記述言語がOTcl (Object Tcl),コアの記述言語がC++に変更された。シナリオ言語がオブジェクト指向言語に改められたため、OTclとC++のオブジェクト間で関連性を持たせることが出来るようになった。しかし、ns-1とns-2の間でクラスやモジュールの互換性は保たれている。また、ns-2でGPLv2に準拠するようになった。
インターネット・プロトコル・スイートのシミュレータとしての実装を主体とする。ns-3はシミュレータであるため、実機実装時の動作に関する保証は不可能である。従って、ns-3が適する用途は、実機と無関係な抽象的な理論検証である。
ns-3のシステムは大きく分けて、シミュレーションの実行を行うns-3 coreと、実験の定義を行うsimulation scenarioに分かれている。ns-3ユーザーは自身のシミュレーションの要求に対する空白部分を埋める形でコーディングし、Wafビルドシステム経由で単一のアプリケーションとしてシミュレータをビルドし、シミュレーションを実行する。ビルド時に出力されるバイナリは、実行環境のCPUに合わせて最適化され、スワップアウト,スワップインが発生しない限りは効率的に動作する。主にC++のソフトウェアフレームワークの形式で構築されており、simulation scenarioの記述時のみPythonを選択することが可能である。Pythonのみではns-3 coreの改変が行えないため、独自プロトコルの実装等は不可能となり、十分にns-3の機能を活用できない。