Материал: 521_Kokoreva,_e._V._Modelirovanie_v_srede_network_

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

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

Источник: https://studfile.net/preview/16709022/