2.2.5.Параметры трафика
В качестве приложений (не считая приложения FTP или Telnet) в ns2 можно использовать генераторы трафика:
Парето (Pareto);
Экспоненциальный (Exponential);
Постоянный (CBR) и др.
Пример:
set expo [new Application/Traffic/Exponential]
Общие параметры для объектов выше описанных приложений:
packetSize_ размер пакета в байтах;
rate_ скорость потока в бит/сек.;
При создании приложения Exponential/Pareto можно задавать дополнительно следующие параметры:
burst_time_ время периода On (пачки) в секундах;
idle_time_ время периода Off (ожидания) в секундах;
Приложение Pareto кроме того обладает свойством:
shape_ коэффициент формы параметр распределения;
Для приложения CBR характерно следующее:
interval_ интервал между передачей пакетов в секундах;
random_ флаг, показывающий наличие случайного шума во время передачи (по умолчанию 0);
maxpkts_ максимальное число передаваемых пакетов (по умолчанию 228).
Пример:
$expo set packetSize_ 210 $expo set burst_time_ 500ms $expo set idle_time_ 200ms $expo set rate_ 200k
Если параметры не заданы, ns2 использует значения по умолчанию.
2.2.6.Типы очередей
В основном ns2 использует следующие механизмы обслуживания очере-
дей:
DropTail (обрубание хвоста) аналог механизма FIFO (First In First Out – первый пришёл, первый обслужился) с отбрасыванием вновь поступающих пакетов при переполнении очереди;
RED (Random Early Detection – случайное предвидение) – случайное отбрасывание пакетов в предвидении переполнения очереди;
21
FQ (Fair Queueing – справедливая очередь) – равное распределение пропускной способности между всеми потоками;
SFQ (Stochastic Fair Queueing – стохастическая справедливая очередь) – равное распределение пропускной способности между ограниченным количеством очередей, на которые делится трафик, с использованием хеш-алгоритма;
DRR (Deficit Round Robin – дефицитная круговая порука) – обслуживание потоков в циклическом порядке с равномерным распределением пропускной способности между всеми классами;
CBQ (Class-Based Queuing – очередь, основанная на приоритетах) распределение пропускной способности в соответствии с классом приоритета.
Тип очереди задаётся при создании звена передачи данных (см. раздел
2.2.2).
2.3.Пакеты
Вns2 пакет состоит из набора заголовков и иногда поля данных. Формат заголовка пакета задаётся, когда создаётся объект Simulator.
Из соображений простоты все пакеты в системе имеют одинаковый формат (являются объектами одного класса), и поэтому каждый пакет, независимо от того, к какому протоколу он относится, имеет в своем составе заголовки всех протоколов, используемых в модели. Типичная структура пакета в ns2 изображена на рисунке 17. Поле данных используется лишь в случаях, когда ns2модель входит в состав реальной сети; если модель чисто компьютерная, то достаточно иметь в заголовке поле, содержащее размер пакета.
Рисунок 17 – Структура пакета
Для ускорения процесса моделирования необходимо указывать явным образом, какие протоколы будут использоваться в модели, чтобы исключить заголовки неиспользуемых протоколов из заголовка пакета.
2.4.Пример моделирования TCP сети в симуляторе ns2
Рассмотрим пример сети.
22
Система включает четыре узла n0, n1, n2, n3. Узел n2 соединен с узлами n0 и n1 линиями связи с пропускной способностью 2 Мбит/с и временем задержки 10 мс. Тот же узел n2 соединен с узлом n3 линией с пропускной способностью 1,7 Мбит/с и задержкой 20 мс. На узле n0 располагается агент TCP с генератором трафика FTP, на узле n1 – агент UDP с генератором трафика CBR (constant bitrate), создающий постоянный трафик 1 Мбит/с с размером пакетов 1 Кб. К узлу n3 подключен агент-приемник TCPSink и агент Null для приема UDP пакетов (рисунок 18).
Далее рассмотрим структуру Otcl-скрипта, описывающего модель и запускающего симулятор.
Рисунок 18 – Пример структуры сети
Создадим объект-симулятор ns и зададим цвета для отображения потоков данных в визуализаторе NAM (знак # обозначает комментарии):
#Создать объект Simulator set ns [new Simulator]
#Определить разные цвета для отображения потоков
#(голубой, зелёный и красный (не используется)) $ns color 1 Blue
$ns color 2 Green $ns color 3 Red
Откроем файл записи трассировки моделирования:
#Открыть файл «out.nam» для записи трассировки
23
set nf [open out.nam w]
Зададим симулятору опцию трассировки для последующей визуализации в NAM и укажем файл для записи:
$ns namtrace-all $nf
Аналогично открываем файл для записи трассировки и задаём опцию трассировки для последующей статистической обработки:
set f [open out.tr w]
$ns trace-all $f
Определим процедуру завершения, в которой очищается буфер трассировки, закрывается выходной файл и запускается визуализатор NAM:
#Определить процедуру "finish" proc finish {} {
global ns nf
#Метод flush-trace выгружает
#результаты трассировки в соответствующие файлы $ns flush-trace
#Закрыть файл трассировки для визуализатора NAM close $nf
#Запустить визуализатор NAM exec nam out.nam &
exit 0
}
Создадим четыре узла:
#Создать 4 узла set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node]
Создадим линии связи с заданными параметрами и дисциплиной обслуживания DropTail (отброс приходящих пакетов, если очередь переполнена). Зададим максимальный размер очереди (объем буфера) для линии связи между n2 и n3.
#Создать звенья между узлами
$ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail
#Установить размер очереди звена n2-n3 равным 10
24
$ns queue-limit $n2 $n3 10
Зададим служебные параметры для визуализатора NAM: положение связей на отображаемой схеме и отображение состояния линии связи n2-n3:
#Задать расположение соединений узлов для
#отображения
$ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right
#Мониторинг очереди звена n2-n3 для NAM $ns duplex-link-op $n2 $n3 queuePos 0.5
Создадим агент TCP и подключим его к узлу n0:
#Установить TCP соединение set tcp [new Agent/TCP] $tcp set class_ 2
$ns attach-agent $n0 $tcp
Создадим агент TCPSink и подключим его к узлу n3:
set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink
Укажем, что агент TCP должен передавать данные агенту TCPSink:
$ns connect $tcp $sink
$tcp set fid_ 1 #голубой (на рисунке 20 - тёмный)
Создадим агент UDP и подключим его к узлу n1:
#Установить UDP соединение
set udp [new Agent/UDP]
$ns attach-agent $n1 $udp
Создадим агент Null и подключим его к узлу n3:
set null [new Agent/Null] $ns attach-agent $n3 $null
Укажем, что агент UDP должен передавать данные агенту Null: $ns connect $udp $null
$udp set fid_ 2 #зелёный (на рисунке 20 - светлый)
Создадим генератор трафика FTP и подключим его к агенту TCP:
#Задать передачу ftp-трафика через tcp-соединение set ftp [new Application/FTP]
$ftp attach-agent $tcp $ftp set type_ FTP
25