Рисунок 13 – Пример планировщика событий
2.2.Сетевые объекты
Сетевые объекты в ns-2 могут быть простыми и составными. К простым объектам относятся:
очереди;
линии задержки;
мультиплексоры/демультиплексоры;
атакже такие нетривиальные объекты, как:
агенты;
приложения.
Составные объекты формируются путем объединения простых объектов. Система ns-2 содержит большой набор готовых описаний классов составных объектов, среди которых:
узлы (Nodes);
линии связи (Links);
локальные сети:
проводные (например, IEEE 802.3 Ethernet);
беспроводные (например, IEEE 802.11 Wi-Fi);
спутниковые сети:
16
геостационарные;
низкоорбитальные.
Кроме того, система может быть расширена введением в нее новых классов сетевых объектов. Особенно удобно создавать составные объекты на основе имеющихся (как простых, так и составных). Для описания новых классов может использоваться язык C++ или OTcl.
2.2.1.Абстракция сетевого уровня узел
Узел создаётся командой:
set n0 [$ns node]
здесь ns – объект класса Simulator.
Несколько узлов можно задать в Tcl с использованием циклической конструкции:
for {set i 0} {$i < 7} {incr i} {
set n($i) [$ns node]
}
Узел может принимать пакеты и классифицировать их по адресу и порту, являющимся полями IP-заголовка. Как было отмечено выше, узел является составным объектом. Простейшая структура узла изображена на рисунке 14.
Прибывающие в узел пакеты принимаются точкой входа (Entry Point) узла и классифицируются классификатором адреса (Address Classifier), представляющим собой демультиплексор. Пакеты, адресованные другим узлам, передаются на одну из линий связи, подключенных к узлу, в соответствии с маршрутной таблицей, принадлежащей классификатору адреса. Пакеты же, адресованные данному узлу, передаются классификатору порта (Port Classifier), также являющемуся демультиплексором. В зависимости от номера порта, классификатор передает пакет одному из прикрепленных к узлу агентов (Agents), которые являются сетевыми объектами, не входящими в состав узла и отвечающими за реализацию протоколов более высокого уровня (например, транспортных протоколов UDP и различных реализаций TCP, протоколов маршрутизации и пр.).
Отметим, что узел может иметь практически любое количество связей, а также портов с прикрепленными к ним агентами.
По умолчанию ns2 создаёт unicast (уникастный) узел. Существуют также более сложные multicast-узлы, способные рассылать прибывающие пакеты нескольким адресатам, но они не рассматриваются в данных методических указаниях.
17
Рисунок 14 – Структура узла
2.2.2.Линия связи (звено)
Звено создаётся функцией duplex-link объекта Simulator, напри-
мер:
$ns duplex-link $n0 $n2 2Mb 10ms DropTail
Здесь $n0 и $n2 значения узлов, соединённых звеном, 2Mb – скорость передачи, 10ms – задержка, DropTail – тип очереди.
Дуплексные (двусторонние) линии связи в ns-2 являются составными объектами, состоящими из двух противоположно направленных симплексных (односторонних) линий связи. Симплексная линия связи также является составным объектом (рисунок 15).
Она состоит из очереди, Null-агента, куда отправляются отброшенные из очереди пакеты и где они стираются, линии задержки и объекта, проверяющего и уменьшающего на единицу поле времени жизни (Time to Live, TTL) в заголовке пакета.
Если модель ориентирована на трассировку событий, т.е. имеет в составе команду $ns trace-all $trace_file, то звено будет содержать также объекты трассировки. Когда пакет достигает одного из трассировочных объектов, соответствующее событие записывается в файл трассировки.
18
node1 Duplex-link node2
а)
Simplex-link
Simplex-link
Очередь |
Задержка |
TTL |
|
NULL |
б) |
|
|
|
|
агент |
|
Рисунок 15 – Звено: а - дуплексное; б - симплексное |
||
2.2.3.Абстракции транспортного уровня агенты
Для создания TCP-соединения необходимо создать два агента: TCPпередатчик и TCP-приемник. Передатчик может вести себя различным образом в зависимости от порядка и моментов получения им уведомлений от адресата о получении отправленных им пакетов. Соответственно, в системе ns2 имеется несколько вариантов TCP-передатчика, моделирующих различные реализации протокола TCP (TCP, TCP/Tahoe, TCP/Reno, TCP/Vegas), использующие разные комбинации алгоритмов TCP (Slow Start, Congestion Avoidance, Fast Recovery,
Fast Retransmit). Пример создания TCP-агента и подключения его к узлу n0:
set tcp [new Agent/TCP]
$ns attach-agent $n0 $tcp
TCP-приемник лишь принимает пакеты и посылает назад уведомления о получении (ACK). Поэтому такой агент в системе один: TCPSink. Пример создания агента-приёмника и подключения его к узлу n1:
set sink [new Agent/TCPSink]
$ns attach-agent $n1 $sink
Агенты передатчик и приёмник необходимо соединить в модели, напри-
мер:
$ns connect $tcp $sink
С протоколом UDP все обстоит гораздо проще, потому что уведомления о получении там не предусмотрены. Для передачи используется UDP-агент, а
19
для приема –Null-агент, просто принимающий и уничтожающий все приходящие пакеты. Пример создания передатчика и приёмника:
set udp [new Agent/UDP]
$ns attach-agent $n1 $udp
…
set null [new Agent/Null]
$ns attach-agent $n3 $null
Пример соединения звеном двух узлов с агентами источником и приёмником приведён на рисунке 16.
Рисунок 16 – Пример соединения двух узлов
2.2.4.Абстракции прикладного уровня приложения
За прикладной уровень в ns2 отвечают приложения (Applications). Приложение прикрепляется к агенту и служит для создания трафика. В ns2 имеются приложения, моделирующие трафик, характерный для реальных протоколов прикладного уровня (FTP и Telnet), а также абстрактные генераторы трафика различного типа (например, CBR – простейший генератор трафика с постоянным темпом выдачи пакетов). Приложения запускаются и останавливаются пользовательскими at-событиями.
Пример создания FTP-приложения, подключения его к агенту TCP и atсобытий запуска и останова FTP-трафика:
set ftp [new Application/FTP] $ftp attach-agent $tcp
…
$ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop"
20