ns2 является объектно-ориентированным ПО, ядро котрого реализовано на языке
С++. Язык скриптов (сценариев) OTcl (Object oriented Tool Command Language)
используется в качестве интерпретатора. ns2 полностью поддерживает иерархию
классов С++ (называемую в терминах ns2 компилируемой иерархией) и подобную иерархию
классов интерпретатора OTcl (называемую интерпретируемой иерархией).Обе иерархии
обладают идентичной структурой, т.е. существует однозначное соответствие между
классом одной иерархии и таким же классом другой. Использование двух языков
программирования в ns2 объясняется следующими причинами. С одной стороны, для
детального моделирования протоколов необходимо использовать системный язык программирования,
обеспечивающий высокую скорость выполнения и способный манипулировать достаточно
большими объемами данных. С другой стороны, для удобства пользователя и быстроты
реализации и модификации различных сценариев моделирования привлекательнее использовать
язык программирования более высокого уровня абстракции. Такой подход является
компромиссом между удобством использования и скоростью. В ns2 в качестве системного
языка используется С++, позволяющий обеспечить:
- высокую производительность;
- работу с пакетами потока на низком уровне абстракции модели;
- модификацию ядра ns2 с целью поддержки новых функций и протоколов.
В качестве языка программирования высокого уровня абстракции используется язык
скриптов OTcl, позволяющий обеспечить ряд положительных свойств, присущих языку
Tcl/Tk (т.к. OTcl является объектно-ориентированным расширением языка Tcl):
- простота синтаксиса;
- простота построения сценария моделирования;
- возможность соединения воедино блоков, выполненных на системных языках программирования
и простую манипуляцию ими.
Объединение для совместного функционирования С++ и OTcl производится при помощи
TclCl (Classes Tcl). TclCl является интерфейсом между объектами C++ и OTcl,
которым пользуются ns2 и nam. Общая архитектура ns2 соответствующая представленным
выше подходам приведена на рис.1.

Рисунок 1. Базовая архитектура ns2.
В рассматриваемой архитектуре возможно использование переменных из библиотек С++ объектами OTcl при помощи функции bind, в связи с чем переменные С++ могут быть модифицированы через OTcl напрямую. Остальные команды OTcl выполняются путем передачи данных в объект С++ при помощи функции TclObject::command(int argc, const char*const* argv). Процедура проиллю-стрирована на рис.2 Для запроса процедуры OTcl из С++ используется класс Tcl. Это может быть полезно, например, при передаче результатов в OTcl из С++. Сценарий моделирования сети связи может быть полностью записан на OTcl, включая параметры линий и узлов, например, задержки, очереди и т.п. В случае, если необходимо реализовать какую-либо специфическую функцию, например, дисциплину обслуживания не реализованную в ns2 на уровне ядра, то для этого используется код на С++. Однако, при подобном подходе могут возникнуть неоднозначности. Например, известно, что в ns2 в основном маршрутизация реализована на OTcl (причем базовый алгоритм Дийкстра – на С++). Если задача состоит в моделировании потоков HTTP, то для работы с каждым потоком достаточно воспользоваться OTcl, при этом обработка на уровне пакетов будет происходить на С++. Реализация однозначно проста. Однако, если количество HTTP потоков в секунду превысит несколько сотен, процедуру работы с потоком лучше перенести в код С++ по причине быстродействия.

Рисунок 2. Процедура интерпретации Otcl-команды с использованием С++.
Исходная полная версия ns2 также содержит несколько весьма полезных утилит и средств, например отладчик Tcl, генератор сценариев моделирования и генератор топологии сети. Базовая структура каталогов полной версии ns2 представлена на рис.3.Существует целое множество генераторов топологий, например, NTG, RTG, TIRES. В состав же ns2 входит генератор топологии GT-ITM, при помощи которого можно автоматически содать топологию очень крупной сети без необходимости вручную определять все компоненты сети. Генератор сценариев моделирования, как правило, используется для создания трафика между узлами сети. При моделировании беспроводных сетей этот тип генератора также может быть использован для определения передвижения узлов.

Рисунок 3. Структура каталогов полной версии ns2.