Рассмотренная в примере 1 модель является самым простым вариантом построения сети, так как включает всего 2 узла. В связи с этим встает вопрос об усложнении поставленной задачи.
В примере 2 будет рассмотрена сеть из 4 узлов. Данная модель будет основываться на шаблоне, рассмотренном в предыдущем сообщении:
set ns [new Simulator]
set nf [open out.nam w]
$ns namtrace-all $nf
proc finish {} {
global ns nf
$ns flush-trace
close $nf
exec nam out.nam &
exit 0
}
$ns at 5.0 "finish"
$ns run
После процедуры финиша необходимо добавить объекты сети. Для начала нужно создать четыре узла. Сделать это можно двумя способами: перечислением (аналогично примеру 1) и с помощью цикла for:
for {set i 0} {$i < 4} {incr i} {
set n($i) [$ns node]
}
Затем уже известным образом создаются три дуплексных звена между созданными узлами:
$ns duplex-link $n0 $n2 2Mb 10ms DropTail
$ns duplex-link $n1 $n2 2Mb 10ms DropTail
$ns duplex-link $n3 $n2 2Mb 10ms DropTail
Также для каждого звена укажем направление для наглядной работы сети в визуализаторе nam:
$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
В данном случае понадобится создание уже двух агентов. Один из них также как в примере 1 будет UDP, другой TCP.
#создание агента UDP и прикрепление его к узлу n0
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
# создание источника CBR-трафика и присоединение его к агенту udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 500
$cbr0 set interval_ 0.005
$cbr0 attach-agent $udp0
#создание агента TCP и присоединение его к узлу n1
set tcp1 [new Agent/TCP]
$ns attach-agent $n1 $tcp1
# создание приложения FTP и присоединение его к агенту tcp1
set ftp [new Application/FTP]
$ftp attach-agent $tcp1
#создание агента-получателя для udp0
set null0 [new Agent/Null]
$ns attach-agent $n3 $null0
#создание агента-получателя для tcp1
set sink1 [new Agent/TCPSink]
$ns attach-agent $n3 $sink1
В отличие от агента UDP, к которому присоединяется источник трафика с постоянной скоростью, TCP агент работает с приложением FTP. Его параметры заданы по умолчанию. Значения переменных, установленные по умолчанию, хранятся в файле ns-default.tcl. Отрывок из этого файла показан на рис.1.
Рис. 1. Содержание файла ns-default.tcl
Также для агента TCP получатель называется уже не Null, а Sink.
Теперь необходимо соеденить агентов с их получателями:
$ns connect $udp0 $null0
$ns connect $tcp1 $sink1
В завершении добавим время выполнения для планировщика событий:
$ns at 0.5 "$cbr0 start"
$ns at 1.0 "$ftp start"
$ns at 4.0 "$ftp stop"
$ns at 4.5 "$cbr0 stop"
После этого можно запускать симуляцию полученной модели. Результат показан на рис.2.
Рис. 2. Результат моделирования
Так как оба типа пакетов изображены черным цветом, различить их довольно сложно. Поэтому добавим в начало программы (после первой строки) строки, изменяющие цвет, предварительно описав каждый цвет:
$ns color 1 Blue
$ns color 2 Red
$udp0 set class_ 1
$tcp1 set class_ 2
Кроме того, добавим строку, которая позволяет увидеть объекты, находящиеся в очереди:
$ns duplex-link-op $n2 $n3 queuePos 0.5
Данную строку необходимо поместить перед созданием агентов.
Запустим модель и пронаблюдаем результаты – рис.3.
Рис.3. Результат моделирования
Источники:
1. Галкин А.М., Кучерявый Е.А., Молчанов Д.А. Методические указания ns2
2. isi.edu/nsnam/nstutorial/nsscript1.html
Пример 1 - http://omoled.ru/publications/view/511