521_Kokoreva,_e._V._Modelirovanie_v_srede_network_
.pdf2.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
Создадим генератор трафика CBR, подключим его к агенту UDP и зададим параметры:
#Задать передачу cbr-трафика через udp-соединение set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp $cbr set type_ CBR
$cbr set packet_size_ 1000 $cbr set rate_ 1mb
$cbr set random_ false
Зададим at-события, управляющие ходом моделирования:пуск и остановка генераторов трафика:
#Записать в планировщик события для CBR и FTP
#агентов
$ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop"
отключение агентов TCP TCPSink от соответствующих узлов (приводим для примера; в данном случае в этом нет необходимости, т.к. моделирование на этом заканчивается):
$ns at 4.5 "$ns detach-agent $n0 $tcp; $ns detach-agent $n3 $sink"
вызов определенной ранее процедуры "finish" после 5 секунд модельного времени:
#Вызов процедуры finish через 5 секунд симуляции
$ns at 5.0 "finish"
Запустим моделирование:
$ns run
Сохраняем созданный скрипт в выбранную папку под именем tcpnet.tcl и далее запускаем его на выполнение командой:
ns tcpnet.tcl
в режиме x-сервера (рисунок 19).
Результат выполнения приведённого выше tcl-скрипта в виде визуализации network animator приведён на рисунке 20.
26
Рисунок 19 – Запуск tcl-скрипта на выполнение
На рисунке видна очередь пакетов из двух разных потоков (fid_ 1 и fid_ 2) и потери в результате переполнения очереди коммутатора в узле n2.
Рисунок 20 Пример визуализации моделирования TCP сети
3. Обработка результатов моделирования
Обработка результатов моделирования является целью самого моделирования. Результаты моделирования заключены в трейс-файлах различного типа.
27
Трейс-файл представляет собой текст в формате ASCII, в котором зарегистрированы необходимые события моделирования.
Для того чтобы трейс-файл был создан, в скрипт необходимо добавить следующие строки:
set f [open out.tr w]
$ns trace-all $f
Они добавляют объекты трассировки во все звенья сети. Имя трейс-файла может быть произвольным, расширение рекомендуется использовать .tr, т.к. некоторые программы обработки результатов, написанные для платформы Windows, могут считывать файлы только с таким расширением.
3.1.Формат файла трассировки
Одна строка файла трассировки содержит следующие поля (рисунок 21):
Рисунок 21 – Формат строки трейс-файла Поле «Событие» может содержать:
r – принятие пакета узлом;
+ – постановка пакета в очередь; -– снятие с очереди;
d – отбрасывание пакета из очереди.
Поле «Время» показывает модельное время события в секундах.
Поле «От узла» означает последний узел, который обрабатывал данный пакет.
Поле «К узлу» показывает, к какому узлу этот пакет направлен.
Поле «Тип пакета» указывает на то, к какому приложению или агенту относится данный пакет. Если транспортным агентом является UDP, то указывается приложение, если TCP, то указывается "tcp" – пакет или "ack" – подтверждение.
Поле «Размер пакета» содержит размер пакета сетевого уровня с учётом IP заголовка.
Поле «Флаги» содержит шесть флагов. Четыре из них используются для явного извещения о перегрузке. Первые два заполняют биты 6 и 7 в поле ToS заголовка IP, а следующие два в заголовке TCP.
Остальные два флага обозначают приоритет и быстрый старт TCP соответственно.
Поле «Идентификатор потока» совпадает с полем fid (flow ID) в заголовке
IPv6.
Поля «Адрес источника» и «Адрес приёмника» имеют формат узел.порт (например, 1.0).
28
Поле «Порядковый номер» показывает номер пакета на транспортном уровне.
Поле «Идентификатор пакета» говорит само за себя. Ниже приведён отрывок из трейс-файла:
+0.007102 2 1 rtProtoDV 4 ------- 0 2.4 1.1 -1 2 - 0.007102 2 1 rtProtoDV 4 ------- 0 2.4 1.1 -1 2
+0.007102 2 3 rtProtoDV 4 ------- 0 2.4 3.2 -1 3 - 0.007102 2 3 rtProtoDV 4 ------- 0 2.4 3.2 -1 3 r 0.020171 0 1 rtProtoDV 4 ------- 0 0.3 1.1 -1 0
+0.020171 1 0 rtProtoDV 4 ------- 0 1.1 0.3 -1 4 - 0.020171 1 0 rtProtoDV 4 ------- 0 1.1 0.3 -1 4
+0.020171 1 2 rtProtoDV 4 ------- 0 1.1 2.4 -1 5 - 0.020171 1 2 rtProtoDV 4 ------- 0 1.1 2.4 -1 5 r 0.020186 0 3 rtProtoDV 4 ------- 0 0.3 3.2 -1 1
Файл трассировки с расширением .nam предназначен для визуализатора Nam и имеет другой формат, нежели описанный выше. Этот трейс-файл не предназначен для последующей обработки.
Отрывок из трейс-файла для визуального отображения:
V -t * -v 1.0a5 -a 0 |
|
|
|
||
A -t * -n 1 -p 0 -o |
0xffffffff -c 31 -a 1 |
|
|||
A -t * -h 1 -m 2147483647 |
-s 0 |
|
|||
c -t * -i 0 -n blue |
|
|
|
||
c -t * -i 1 -n red |
|
|
|
||
c -t * -i 2 -n brown |
|
|
|
||
c -t * -i 3 -n green |
|
|
|
||
n -t * -a 0 -s 0 -S |
UP -v |
circle -c black -i black |
|||
n -t * -a 1 -s 1 -S |
UP -v |
circle -c black -i black |
|||
n -t * -a 2 -s 2 -S |
UP -v |
circle -c black -i black |
|||
n -t * -a 3 |
-s 3 |
-S |
UP -v |
circle -c black -i black |
|
l -t * -s 0 |
-d 1 |
-S |
UP -r |
20000000 -D 0.02 -c black -o right |
|
l -t * -s 1 |
-d 2 |
-S |
UP -r |
2000000 -D 0.02 |
-c black -o down |
l -t * -s 3 |
-d 0 |
-S |
UP -r |
2000000 -D 0.02 |
-c black -o up |
l-t * -s 2 -d 3 -S UP -r 2000000 -D 0.02 -c black -o left
Существуют и другие форматы трейс-файлов [3, 4].
29
3.2.Средства обработки файлов трассировки
Файлы трассировки содержат результаты моделирования, для их анализа необходимо извлечь нужные данные и произвести над ними некоторые действия.
Для этого разработаны пакеты, описанные ниже.
3.2.1.Утилиты для вычислительных операций над данными
AWK – утилита для простых вычислительных манипуляций над данными. AWK входит в состав многих программ Unix-like для Windows, в том числе и Cygwin. Название утилиты составлено из первых букв фамилий её разработчиков (Aho-Weinberger-Kernighan).
Grep – утилита, работающая в режиме командной строки Unix. С помощью grep можно создать новый файл, который состоит только из тех строк исходного файла, которые включают в себя заданные последовательности знаков. Например, пользователю нужна только информация о TCP-пакетах, которые передаются от 1-го узла ко 2-му.
grep " 1 2 tcp " out1.tr > out2.tr
3.2.2.Программы для построения графических зависимостей
Существует большое количество программ для построения графиков, некоторые из них являются специализированными для ns2. Рассмотрим наиболее популярные из них.
Gnuplot – бесплатное программное обеспечение как для Unix, так и для Windows. Для построения графика с помощью Gnuplot в наиболее простом варианте необходимо использовать команду plot ‘datafile’, где файл datafile имеет две колонки, первая содержит координаты точек по оси абсцисс, вторая – по оси ординат.
XGraph является частью пакета ns2 «все-в-одном», но может быть установлен и отдельно. XGraph может быть вызван внутри скрипта tcl, результатом чего будет являться вывод графика на экран сразу же после завершения моделирования. В качестве входных данных программа использует один или более ASCII-файлов, каждый из которых содержит набор строк, состоящих из пары координат x-y.
Например, xgraph file1 file2 выведет на одной координатной плоскости графики файлов file1 и file2. Более подробное описание см. в теории к лабораторной работе №3.
Программа TraceGraph была специально разработана для ns2. В качестве входных данных она использует трейс-файлы ns2. TraceGraph работает как на платформе Unix/Linux, так и Windows при условии, что установлена программа Matlab или её библиотеки. Возможности TraceGraph:
построения 238 различных двумерных зависимостей;
построения 12 различных трёхмерных зависимостей;
30