Мультисервисные сети2
.pdf
16.2. Компоненты моделей NS2 |
441 |
|
|
16.2.5. Мониторинг очередей
Несмотря на то что большую часть данных о моделируемой системе пользователь получает из файла трассировки, может понадобиться информация о том, что происходит внутри некоторых видов очередей (например, измерения динамики изменения среднего размера очереди или текущего размера очереди). Таким образом,
осуществляется мониторинг очередей [3].
Мониторинг очереди может быть осуществлен при использовании объектов мониторинга очереди и объектов слежения за очередью
(рис. 16.13).
SnoopQ/In |
Очередь |
SnoopQ/Out |
Задержка |
TTL |
RecvT |
Вход |
|
|
|
|
|
|
|
SnoopQ/Drop |
NULLагент |
|
|
|
Диспетчер |
|
|
|
|
|
очереди |
|
|
|
|
Рис. 16.13. Звено с объектами мониторинга очереди
На рис. 16.13:
SnoopQ/In – входной объект слежки за очередью;
SnoopQ/Out – выходной объект слежки за очередью;
SnoopQ/Drop – объект слежки за отбрасываемыми пакетами в очереди.
Когда прибывает пакет, объект слежки за очередью извещает диспетчера очереди об этом событии. Диспетчер осуществляет мониторинг очереди на основе полученных данных.
Для добавления объектов мониторинга очереди в тиклет модели необходимо добавить строку
set qmon [$ns monitor-queue $n2 $n3 [open qm.out w] 0.1]
Объект monitor-queue имеет четыре параметра: первые два определяют звено, за которым производится слежение (узел-узел), третий параметр указывает файл, куда будет производиться запись, последний показывает, как часто снимаются показания. В приведенном примере снимаются показания на линии между узлами n2 и n3 и записываются в файл qm.out через каждые 0,1 с.
Выходной файл содержит 11 столбцов:
1.Время.
2.Входной и выходной узлы, задающие очередь (2-3-й столбцы).
4.Размер очереди в байтах (атрибут size_ объекта monitorqueue).
442 |
Глава 16. Моделирование мультисервисных сетей в NS2 |
|
|
5.Размер очереди в пакетах (атрибут pkt_).
6.Количество пришедших пакетов (атрибут parrivals_).
7.Количество ушедших из звена пакетов (атрибут pdepartures_).
8.Количество пакетов, выброшенных из очереди (атрибут pdrops_).
9.Количество пришедших байтов (атрибут barrivals_).
10.Количество ушедших из звена байтов (атрибут bdepartures_).
11.Количество байтов, выброшенных из очереди (атрибут bdrops_).
Объекты мониторинга могут использоваться одновременно с объектами трассировки.
16.2.6. Абстракции транспортного уровня – агенты
Чтобы определить соединение в NS2, необходимо создать два агента: агент-передатчик и агент-приемник [3, 5, 6].
Передатчик может вести себя различным образом в зависимости от используемого в симуляции протокола транспортного уровня. Соответственно, в системе NS2 имеется множество вариантов агента-передатчика. Например, существует несколько версий TCPагентов, моделирующих различные реализации протокола TCP:
TCP, TCP/ Tahoe, TCP/Reno, TCP/Newreno, TCP/Vegas и др.
использующие разные комбинации алгоритмов TCP (Slow Start,
Congestion Avoidance, Fast Recovery, Fast Retransmit). Кроме того,
имеются агенты для реализации UDP, RTP и RTCP протоколов и многие другие. Подробнее можно прочитать в [3].
Пример создания TCP-агента и подключения его к узлу n0: set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp
NS2 содержит также несколько вариантов агента-приемника. Функции приемников проще, чем передатчиков, поэтому и агентовприемников в NS2 гораздо меньше. Например, TCP-приемник лишь принимает пакеты и посылает назад уведомления о получении (ACK). Поэтому такой агент в системе один: TCPSink. Кроме него существуют агенты LossMonitor и Null.
Пример создания агента-приемника TCP-сегментов и подключения его к узлу n1:
set sink [new Agent/TCPSink] $ns attach-agent $n1 $sink
Агенты передатчик и приемник необходимо соединить в модели, например:
$ns connect $tcp $sink
16.2. Компоненты моделей NS2 |
443 |
|
|
С протоколом UDP все обстоит несколько по-другому, потому что уведомления о получении там не предусмотрены. Для передачи используется UDP-агент, а для приема – Null-агент, просто принимающий и уничтожающий все приходящие пакеты.
Пример создания передатчика и приемника UDP-датаграмм: set udp [new Agent/UDP]
$ns attach-agent $n1 $udp
…
set null [new Agent/Null] $ns attach-agent $n3 $null
Пример соединения звеном двух узлов с агентами источником и приемником приведен на рис. 16.14.
|
|
TCP |
FTP |
|
Sink |
|
|
|
|
||
|
|
1 |
|
|
1 |
|
1 |
Классификатор |
Звено Узел1 – Узел2 |
2 |
Классификатор |
Вход |
2 |
порта |
Вход |
порта |
|
|
|
|
|
||
|
|
|
|
1 |
|
|
Классификатор |
|
Классификатор |
||
|
адреса |
|
|||
|
|
адреса |
|||
|
|
|
|
||
|
|
Узел1 |
|
|
Узел2 |
Звено Узел2 – Узел1
Рис. 16.14. Пример соединения двух узлов
16.2.7. Абстракции прикладного уровня – приложения
За прикладной уровень в NS2 отвечают приложения (Applications). Приложение прикрепляется к агенту и служит для создания трафика. В NS2 имеются приложения, моделирующие трафик, характерный для реальных протоколов прикладного уровня (FTP и Telnet), а также абстрактные генераторы трафика различного типа (например, CBR – простейший генератор трафика с постоянным темпом выдачи пакетов). Приложения запускаются и останавливаются пользовательскими at-событиями [2, 3].
Пример создания FTP-приложения, подключения его к агенту TCP и at-событий запуска и останова FTP-трафика:
set ftp [new Application/FTP]
444 |
Глава 16. Моделирование мультисервисных сетей в NS2 |
|
|
$ftp attach-agent $tcp
…
$ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop"
Параметры трафика. В качестве приложений (не считая приложения 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 использует значения по умолчанию.
16.3. Пример создания модели мультисервисной сети |
445 |
|
|
16.3. Пример создания модели мультисервисной сети
Первым шагом моделирования является написание тиклета (OTclскрипта) имитационного моделирования с помощью любого текстового редактора (при моделировании в ОС Windows удобно использовать для этой цели Notepad++).
Второй шаг – это работа интерпретатора OTcl, использующего библиотеку NS2, который обрабатывает написанную программу. Результатом его работы являются файлы трассировки.
Третий шаг – обработка результатов моделирования.
Ниже приведен пример модели сети с простой топологией, состоящей из четырех узлов, соединенных дуплексными линиями, передача пакетов FTP-приложения в которых происходит по протоколу TCP, пакетов с постоянной скоростью – по протоколу UDP.
Система включает четыре узла n0, n1, n2, n3. Узлы n0, n1, n3 представляют собой хосты, узел n2 – маршрутизатор.
Узел n2 соединен с узлами n0 и n1 линиями связи с пропускной способностью 2 Мбит/с и временем задержки 10 мс. Тот же узел n2 соединен с узлом n3 линией с пропускной способностью 1,7 Мбит/с и задержкой 20 мс. На узле n0 располагается агент TCP с генератором трафика FTP, на узле n1 – агент UDP с генератором трафика CBR, создающий постоянный трафик 1 Мбит/с с размером пакетов 1 Кбит. К узлу n3 подключены агент-приемник TCPSink и агент Null для приема UDP пакетов (рис. 16.15).
FTP
TCP
n0
UDP
n1
CBR 
2 |
Mbps, |
|
10 |
ms |
|
|
|
|
|
|
n2 |
Mbps, |
||
2 |
|
ms |
10 |
||
TCPSinki
n3
1.7 Mbps,
20 ms
NULL
Рис. 16.15. Пример структуры сети
Далее рассмотрим структуру OTcl-скрипта, описывающего модель и запускающего симулятор [2, 6].
Создадим объект-симулятор ns и зададим цвета для отображения потоков данных в визуализаторе NAM (знак # обозначает комментарии):
#Создать объект Simulator
446 |
Глава 16. Моделирование мультисервисных сетей в NS2 |
|
|
|
|
|
set ns [new Simulator] |
|
|
#Определить разные цвета для отображения потоков |
|
|
$ns color 1 White |
#белый |
|
$ns color 2 Black |
#черный |
Откроем файл записи трассировки моделирования:
#Открыть файл «out.nam» для записи трассировки 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]
16.3. Пример создания модели мультисервисной сети |
447 |
|
|
Создадим линии связи с заданными параметрами и дисциплиной обслуживания 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 $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]
$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 #белый
Создадим агент UDP и подключим его к узлу n1:
#Установить UDP соединение set udp [new Agent/UDP]
$ns attach-agent $n1 $udp
Создадим агент Null и подключим его к узлу n3: set null [new Agent/Null]
448 |
Глава 16. Моделирование мультисервисных сетей в NS2 |
|
|
$ns attach-agent $n3 $null
Укажем, что агент UDP должен передавать данные агенту Null: $ns connect $udp $null
$udp set fid_ 2 #черный
Создадим генератор трафика FTP и подключим его к агенту TCP:
#Задать передачу ftp-трафика через tcp-соединение set ftp [new Application/FTP]
$ftp attach-agent $tcp
Создадим генератор трафика 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"
вызов определенной ранее процедуры "finish" после 5 секунд модельного времени:
#Вызов процедуры finish через 5 секунд симуляции $ns at 5.0 "finish"
Запустим моделирование: $ns run
Результат выполнения приведенного выше tcl-скрипта в виде визуализации network animator приведен на рис. 16.16.
16.4. Средства для визуализации, сбора и обработки результатов симуляции |
449 |
|
|
Рис. 16.16. Фрагмент симуляции
16.4.Средства для визуализации, сбора и обработки результатов симуляции
Обработка результатов моделирования является целью самого моделирования. Результаты моделирования заключены в трейсфайлах различного типа. Трейс-файл представляет собой текст в формате ASCII, в котором зарегистрированы необходимые события моделирования [1, 6].
16.4.1. Файлы трассировки
Для того чтобы трейс-файл был создан, в скрипт необходимо добавить следующие строки:
set f [open out.tr w] $ns trace-all $f
Они добавляют объекты трассировки во все звенья сети. Имя трейс-файла может быть произвольным, расширение рекомендуется использовать .tr, так как некоторые программы обработки результатов, написанные для платформы Windows, могут считывать
450 |
Глава 16. Моделирование мультисервисных сетей в NS2 |
|
|
файлы только с таким расширением (в приведенном примере имя файла трассировки out.tr).
Одна строка файла трассировки содержит следующие поля
(рис. 16.17):
Собы- |
|
От |
К |
Тип |
Размер |
|
Иденти- |
Адрес |
Адрес |
Поряд- |
Иденти- |
|
Время |
Флаги |
фикатор |
источ- |
получа - |
ковый |
фикатор |
||||||
тие |
узла |
узлу |
пакета |
пакета |
||||||||
|
|
|
|
|
|
|
потока |
ника |
теля |
номер |
пакета |
Рис. 16.17. Формат строки трейс-файла
поле «Событие» может содержать: r – принятие пакета узлом;
+– постановка пакета в очередь; - – снятие с очереди;
d – отбрасывание пакета из очереди;
поле «Время» показывает модельное время события в секундах;
поле «От узла» означает последний узел, который обрабатывал данный пакет;
поле «К узлу» показывает, к какому узлу этот пакет направлен;
поле «Тип пакета» указывает на то, к какому приложению или агенту относится данный пакет. Если транспортным агентом является UDP, то указывается приложение, если TCP, то указывается ―tcp‖ – пакет или ―ack‖ – подтверждение;
поле «Размер пакета» содержит размер пакета сетевого уровня с учетом IP заголовка;
поле «Флаги» содержит шесть флагов. Четыре из них используются для явного извещения о перегрузке. Первые два заполняют биты 6 и 7 в поле ToS заголовка IP, а следующие два — в заголовке TCP. Остальные два флага обозначают приоритет и быстрый старт TCP соответственно;
поле «Идентификатор потока» совпадает с полем fid (flow ID)
взаголовке IPv6;
поля «Адрес источника» и «Адрес приемника» имеют формат узел.порт (например, 1.0);
поле «Порядковый номер» показывает номер пакета на транспортном уровне;
поле «Идентификатор пакета» говорит само за себя.
Существуют и другие файлы трассировки. Например, визуализатор NAM использует свой формат файла трассировки. Некоторые виды трейс-файлов предназначены для регистрации событий в беспроводных сетях.
