Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

521_Kokoreva,_e._V._Modelirovanie_v_srede_network_

.pdf
Скачиваний:
2
Добавлен:
12.11.2022
Размер:
2.27 Mб
Скачать

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

Создадим генератор трафика 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