Материал: 1308

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

РАБОТА № 2

ИССЛЕДОВАНИЕ ОСНОВНЫХ КОМПОНЕНТОВ СЕТЕВОГО ИМТАТОРА NS2

Целью работы «Исследования основных компонентов сетевого имитатора NS2» является знакомство с программным продуктом для имитационного моделирования процессов, происходящих в сетях связи, а также получения первичных навыков работы с сетевым имитатором NS2.

КРАТКИЕ СВЕДЕНИЯ О СЕТЕВОМ ИМИТАТОРЕ NS2

NS2 является программным продуктом, позволяющим осуществить имитационное моделирование сетей связи, разработанный под руководством ряда научных организаций и центров в рамках проекта VINT (Virtual InterNetwork Testbed), организо-

ванным DARPA (Defense Research Project Agency) [http://www.isi.edu/nsnam/vint/]. За основу программной реализа-

ции выбран пакет network simulator, разработанный в Калифорнийском университете.

NS2 является объектно-ориентированным программным обеспечением, ядро которого реализовано на языке С++. В качестве интерпретатора используется язык скриптов (сценариев) OTcl (Object oriented Tool Command Language). С++ является системным языком и NS2 полностью поддерживает иерархию классов С++.

Использование двух языков программирования объясняется следующими причинами. С одной стороны, для детального моделирования протоколов необходимо использовать системный язык программирования, обеспечивающий высокую скорость выполнения и способный манипулировать достаточно большими объемами данных. С другой стороны для удобства пользователя и быстроты реализации и модификации различных сценариев моделирования привлекательнее использовать язык программирования более высокого уровня абстракции. Такой подход является компромиссом между удобством использования и скоростью.

Системный язык С++ позволяет обеспечит высокую производительность, работу с пакетами потока на низком уровне абст-

11

ракции модели, модификацию ядра NS2 с целью поддержки новых функций и протоколов.

Вкачестве языка программирования высокого уровня абстракции используется язык скриптов OTcl, позволяющий обеспечить ряд положительных свойств, присущих языку OTcl: простоту синтаксиса, простоту построения сценария моделирования, возможность соединения воедино блоков, выполненных на системных языках программирования и простую манипуляцию ими.

ВNS2 на уровне ядра реализованы большинство известных протоколов сетей связи, например MPLS, IPv6, OSPF, RSVP, протоколы беспроводной связи, web caching и многие другие. Также реализовано целое семейство дисциплин обслуживания очередей: RED, WFQ, CBQ, SFQ и т.д. В рамках NS2 возможна реализация собственного протокола.

NS2 содержит средства анимации результатов моделирования NAM (Network Animator), которое предоставляет графическое воспроизведение результатов проведенного эксперимента: отображение топологии сети, анимация пакетов, узлов, очередей

иразличные возможности анализа данных. В качестве входных данных для NAM используются файлы, записанные в процессе функционирования NS2, т.е. моделирования сети связи.

Более подробные сведения о сетевом симуляторе NS2 изложены в документе about_ns2_rus.pdf, представленом на сервере S ЛВС кафедры ТОР [S:\БогомоловСИ\NS\Lab1\Metod\], а также на сайтах: http://www.isi.edu/, http://wwwns2.chat.ru/, в частности, в

документах http://www.isi.edu/nsnam/ns/ns-documentation.html, http://www.isi.edu/nsnam/ns/tutorial/nsindex.html.

ОСНОВЫ РАБОТЫ С СЕТЕВЫМ ИМИТАТОРОМ NS2

Основное содержание данного раздела использовано из учебных материалов VINT group: NS Tutorial, доступных по ад-

ресу http://www.isi.edu/nsnam/ns/tutorial/nsindex.html.

Подготовка шаблона сценария

В данном разделе рассматриваются вопросы разработки Tcl сценария для имитатора NS, моделирующего простую топологию сети: как создавать узлы и линии связи между ними, как посылать данные от одного узла к другому, как контролировать очередь и как запускать аниматор NAM по сценарию моделиро-

12

вания для визуализации его результатов.

Во-первых, создается шаблон, который можно использовать для всех Tcl скриптов. Tcl сценарий можно писать в любом текстовом редакторе, и предлагается назвать этот первый пример

'example.tcl'.

Прежде всего, создается объект имитатор командой set ns [new Simulator].

Затем открывается файл для записи, который будет использовать аниматор NAM для распечатки данных

set nf [open out.nam w]

$ns namtrace-all $nf.

Первая строка открывает файл 'out.nam' для записи и дает обращается с этим файлом как с переменной 'nf'.На второй строке сообщается, что созданный выше объект имитатор запишет все данные моделирования, предназначенные для аниматора NAM, в этот файл.

Следующий шаг добавляет процедуру 'finish'которая закрывает файл трассировки и запускает NAM:

proc finish {} {

global ns nf $ns flush-trace close $nf

exec nam out.nam & exit 0

}.

Записанные выше коды будут более понятными после того, как станет видно, что они делают.

Следующая строка передает имитатору: выполнить процедуру 'finish'после 5 секунд времени моделирования

$ns at 5.0 "finish".

Командой 'at' имитатор NS обеспечивает простой способ планирования событий.

Наконец, последняя строка запускает моделирование

$ns run.

Этот файл теперь можно сохранить и попробовать запустить его, набрав в терминале:

13

'ns example.tcl'.

Так как до сих пор не были определены никакие объекты (узлы, связи, и т.д.) или события, может быть получено сообще-

ние об ошибке типа 'nam: empty trace file out.nam' (либо не будет заметно никакой реакции).

Пересылка данных между узлами

Далее рассматривается создание очень простой топологии из двух узлов, соединенных линией связи.

Следующие две строки определяют два узла: set n0 [$ns node]

set n1 [$ns node].

Новый объект узел создается командой '$ns node'.Приведенный выше код создает два узла и присваиваем им для управления имена 'n0'и 'n1'. (Примечание: Код данной секции должен быть вставлен перед строкой '$ns run',или даже лучше, перед строкой

'$ns at 5.0 "finish"').

Следующая строка соединяет эти два узла.

$ns duplex-link $n0 $n1 1Mb 10ms DropTail.

Эта строка сообщает объекту имитатору: соединить узлы n0 и n1 двухсторонней связью с полосой пропускания 1Megabit, задержкой 10ms и очередью типа DropTail.

Затем можно сохранить файл (example1.tcl) и запустить на выполнение сценарий

'ns example1.tcl'.

Аниматор NAM стартует автоматически, и должен появиться выходной продукт в виде схемы простейшей сети.

Этот пример позволяет видеть только топологию сети, в которой ничего в ней не происходит, поэтому очередным этапом будет пересылка данных от узла n0 к узлу n1. В имитаторе NS данные всегда пересылаются от одного агента другому. Поэтому следующий шаг должен создать объект агент, который посылает данные от узла n0, и второй объект агент, который получает данные на узле n1.

#Create a UDP agent and attach it to node n0 set udp0 [new Agent/UDP]

$ns attach-agent $n0 $udp0

# Create a CBR traffic source and attach it to udp0

14

set cbr0 [new Application/Traffic/CBR] $cbr0 set packetSize_ 500

$cbr0 set interval_ 0.005

$cbr0 attach-agent $udp0

Эти строки создают UDP (User Datagram Protocol) агента и присоединяют его к узлу n0, затем подключают генератор CBR (Constant Bit Rate) трафика к UDP агенту. Модуль CBR устанавливает постоянную битовую скорость генерирования информации. Строки 7 и 8 не требуют пояснений: Размер пакета устанавливают по 500 байтов, и пакеты будут посылаться каждые 0.005 секунды (то есть 200 пакетов в секунду). Соответствующие параметры для каждого агента определены в руководстве к симу-

лятору NS < http: // www.isi.edu/nsnam/ns/doc/index.html >.

Следующие строки создают нулевого агента, который действует, как приемник трафика, и подключают его к узлу n1.

set null0 [new Agent/Null]

$ns attach-agent $n1 $null0

Затем эти два агента быть связаны друг с другом.

$ns connect $udp0 $null0

И теперь следует сообщить CBR агенту, когда начать посылать данные и когда прекратить посылать. (Примечание: Вероятно лучше поместить следующие строки как раз перед строкой

'$ns at 5.0 "finish"').

$ns at 0.5 "$cbr0 start"

$ns at 4.5 "$cbr0 stop"

Этот код также не требует пояснений.

Теперь можно сохранить файл (example1a.tcl) и снова начать моделирование. После щелчка на кнопке 'play'в окне аниматора NAM можно будет видеть, что после 0.5 секунд моделирования, узел n0 начнет посылать пакеты данных к узлу n1. С помощью ползунка 'Step'можно изменить темп показа NAM.

Далее можно начать выполнять некоторые эксперименты с NAM и Tcl сценариями. Можно щелкать на любом пакете в окне NAM, чтобы контролировать его. Также можно щелкать непосредственно на линии связи, чтобы получить некоторые графики со статистикой. Рекомендуется также изменить параметры размера пакета 'packetsize'и интервала посылок 'interval'в Tcl сценарии. Полную версию рассмотренного примера можно посмот-

15