На этот раз воспользуемся другим способом создания топологии. Следующие строки создают семь узлов и хранят их в массиве n().

for {set i 0} {$i < 7} {incr i} {

  set n($i) [$ns node]

}

Массивы, как и другие переменные в tcl, не объявляются заранее.

В данном случае, рассмотрим объединение узлов в круговую топологию.

for {set i 0} {$i < 7} {incr i} {

  $ns duplex-link $n($i) $n([expr ($i+1)%7]) 1Mb 10ms DropTail

}

Данный цикл каждый узел со следующим за ним в массиве, за исключением последнего, который соединяется с первым. Для достижения этого используется оператор '%'.

Поместим два данных цикла в шаблон, рассмотренный в примере 1, и выполним скрипт. В результате, получается структура, которая в начале может показаться странной, но с помощью редактора, встроенного в визуализатор nam, можно привести к виду, показанному на рисунке.


Рис.1. Кольцевая топология сети в ns-2

Далее необходимо создать трафик. Для примера отправим некоторую информацию от узла n0 узлу n3. Данный процесс был описан в примере 1.

            #Create a UDP agent and attach it to node n(0)

set udp0 [new Agent/UDP]

$ns attach-agent $n(0) $udp0

 

# Create a CBR traffic source and attach it to udp0

set cbr0 [new Application/Traffic/CBR]

$cbr0 set packetSize_ 500

$cbr0 set interval_ 0.005

$cbr0 attach-agent $udp0

 

set null0 [new Agent/Null]

$ns attach-agent $n(3) $null0

 

$ns connect $udp0 $null0

 

$ns at 0.5 "$cbr0 start"

$ns at 4.5 "$cbr0 stop"

Добавим эти строки в файл и пронаблюдаем выполнение. Результат выполнения представлен на рисунке (рис.2).

Рис.2. Трафик в кольцевой сети

Нетрудно заметить, что трафик от n0 к n3 проходит по кратчайшему пути (через n1 и n2).

Теперь позволим каналу между узлами 1 и 2 «упасть» на секунду и пронаблюдаем результат.

$ns rtmodel-at 1.0 down $n(1) $n(2)

$ns rtmodel-at 2.0 up $n(1) $n(2)


Рис. 3. Прекращение передачи информации

Логично, что передача информации при этом прерывается.

Подпрограмма rtmodel создает образец необходимого типа, определяет узел или канал, с которым модель будет работать, настраивает модель и также может включать трассировку.

Во избежание такой ситуации необходимо использовать динамическую маршрутизацию. Для этого поставим нужно добавить следующую строку после создания объекта симуляции:

$ns rtproto DV

После запуска такой модели при «поломке» канала трафик пойдет по-другому пути – через n6 к n3.


Рис. 5. Использование динамической маршрутизации

Кроме того, сразу после запуска можно будет заметить маленькие пакеты, которые «бегают» по сети. Это rtProtoDV пакеты, которые нужны для того, чтобы собрать информацию о возможных маршрутах между узлами.
Список использованной литературы:
1. http://www.isi.edu/nsnam/ns/tutorial/index.html
2. http://www.isi.edu/nsnam/ns/doc-stable/node267.html
3. http://www.isi.edu/nsnam/ns/doc/node364.html