NS-2 Krzysztof Rusek 26 kwietnia 2010 1 Opis ćwiczenia Symulator ns-2 jest potężnym narzędziem, szeroko stosowanym w telekomunikacji. Ćwiczenie ma na cele przedstawić podstawy symulatora oraz symulacji dyskretnych zdarzeń. 1.1 Środowisko Ćwiczenie wykonujemy w systemie Linux. Na potrzeby ćwiczenie zastała przygotowana skompilowana wersja symulatora ns-2, którą należy pobrać ze strony: http://pbz.kt. agh.edu.pl/~krusek/ns.tar.gz. Plik należy zapisać w katalogu /media/disk/ po wcześniejszym zamontowaniu dysku twardego w katalogu /media/disk/. Pobrany plik należy rozpakować poleceniem: tar xvf ns.tar.gz lub skorzystać z aplikacji graficznej. Po rozpakowaniu aplikacji należy przejść do katalogu /media/disk/ns/ns-allinone-2.34 i wykonać polecenie source env.sh 1, które przygotuje środowisko dla symulatora. Poprawne działanie symulatora należy zweryfikować poleceniem ns test.tcl. Wynik ok oznacza, że środowisko zostało skonfigurowane poprawnie. 1.2 Symulacje Nową symulację tworzy się pisząc plik w języku OTcl, w którym definiowane są parametry symulacji oraz topologia sieci. Symulację uruchamiamy poleceniem ns nazwa_pliku.tcl. Proszę pobrać przykładowy plik symulacji z http://home.agh.edu.pl/~krusek/dydaktyka/pst/ns2/ i przeanalizować jego zawartość. Po zapoznaniu się z treścią proszę wykonać polecenia z sekcji 1.3. Pobrany plik zawiera opis symulacji sieci przedstawionej na rysunku: 1. Poniżej znajduje się opis najważniejszych części symulacji. Podstawowym obiektem wymaganym w każdej symulacji jest obiekt symulatora tworzony następująco: set ns [new Simulator] 1 Skrypt env.sh nie jest częścią standardowej dystrybucji symulatora. Został on przygotowany na potrzeby ćwiczenie, aby ułatwić pracę z symulatorem 1
Rysunek 1: Topologia symulowanej sieci Topologia symulowanej sieci w ns-2, podobnie jak rzeczywistej sieci, składa się z węzłów i łączy. W węzłach dokonywany jest ruting oraz generowanie ruchu poprzez tzw. agentów. Węzły i łącza pomiędzy nimi tworzone są poprzez wywołanie odpowiednich metod z globalnego obiektu symulatora. Łącza mogą być zarówno jedno, jak i dwukierunkowe (łącza niekoniecznie muszą odpowiadać fizycznym przewodom, mogą to być też kanały radiowe). Dla każdego łącza precyzuje się jego przepustowość, opóźnienie oraz dyscyplinę kolejkowania. W poniższym przykładzie tworzone są cztery węzły, oraz trzy łącza pomiędzy nimi. DropTail oznacza dyscyplinę FIFO. #Create four nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] 2
#Create links between the nodes $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 #Set Queue Size of link (n2-n3) to 10 $ns queue-limit $n2 $n3 10 Mając zdefiniowaną topologię sieci, kolejnym krokiem jest dodanie do niej ruchu. Ruch dodawany jest przy pomocy agentów, którzy z kolei współpracują z aplikacjami, czyli źródłami ruchu.większość implementacji protokołu TCP ma swojego agenta ns-2, dodatkowo istnieją agenci UDP, RTP i inni. #Setup a TCP connection set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1 Aplikacje w ns-2 znajdują się nad warstwą agentów transportowych. Po utworzeniu obiektu aplikacji trzeba go dołączyć do agenta transportowego. Istnieją dwa podstawowe typy aplikacji: generatory ruchu i symulowane aplikacje #Setup a FTP over TCP connection set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP Powtórzenie powyższych kroków, dla UDP. #Setup a UDP connection set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null $udp set fid_ 2 #Setup a CBR over UDP connection 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 3
Symulator ns-2 jest symulatorem zdarzeniowym tzn. każda akcja jest wynikiem jakiegoś zdarzenie np. przyjście pakietu lub zakończenie wysyłania pakietu. W poniższym kodzie dodawane są zdarzenia początku i końca aplikacji w odpowiednich chwilach czasu. #Schedule events for the CBR and FTP agents $ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop" Symulacja zaczyna się w momencie wywołania metody run z symulatora. Raz uruchomiona symulacja nie zakończy się, dlatego należy dodać zdarzenie końca symulacji, czyli wywołanie metody finish, która kończy wykonywanie programu. #Call the finish procedure after 5 seconds of simulation time $ns at 5.0 "finish" #Run the simulation $ns run #Define a finish procedure proc finish {} { exit 0 } Oprócz opisanych fragmentów kodu, plik symulacyjny zawiera dodatkowo instrukcje logowania. Po wykonaniu symulacji tworzone są pliki nam, oraz log wszystkich zdarzeń. Opracowując log można wyznaczyć wiele przydatnych informacji np. stosunek liczby utraconych pakietów do wysłanych (nazywany współczynnikiem strat) itp. Analizę otrzymanych wyników nalerzy przeprowadzić korzystając ze skryptu util.awk dostępnego pod adresem http://home.agh.edu.pl/~krusek/dydaktyka/pst/ns2/. Skryptu util.awk używamy w następujący sposób: awk -f util.awk trace.txt, gdzie trace.txt jest plikiem logu otrzymanym z symulacji. 1.3 Polecenia 1. Uruchomić symulację, korzystając z programu nam obejrzeć przebieg symulacji. 2. Proszę zmienić czas trwania symulacji i sprawdzić czas wykonywania symulacji. Czas wykonywania symulacji można łatwo sprawdzić poleceniem time. 3. Łącze n2-n3 jest wąskim gardłem sieci. Zbadać i wyjaśnić wpływ przepustowości n2-n3 na współczynnik strat. 4. Łącze n2-n3 jest wąskim gardłem sieci. Zbadać i wyjaśnić wpływ długości kolejki w n2 na współczynnik strat. 4
5. Zbadać i wyjaśnić wpływ rozmiaru pakietu źródła CBR na współczynnik strat. 6. Dlaczego obserwujemy ruch z n3 do n0 a nie obserwujemy ruchu z n3 do n1? 1.4 Sprawozdanie Sprawozdanie (w formacie pdf) zawierające odpowiedzi na pytania z sekcji 1.3 należy wysłać na adres krusek@agh.edu.pl wpisując w temacie PST2010NS2. Dokument może mieć maksymalnie 2 strony A4 i koniecznie musi zawierać numer indeksu w nazwie pliku. 5