záhlaví

Autor: Jan Dohnal
Škola: ČVUT FEL
Semestr: 9. (2006/2007)
Předmět: 36SIM - Simulace (X36DSI - Diskretní simulace)

obsah

zadání

Zadáním této práce je v simulačním prostředí Omnet++ namodelovat síť s cykly a zjistit její chování v případě, že není v činnosti Spanning Tree Algoritmus.

Práce s Omnetem

Pro řešení úlohy jsem použil framework INET, který obsahuje vytvořené komponenty, jako je switch, síťový klient, sběrnice a podobně. Jeho kompilace nebyla zcela triviální (nepodařilo se mi mu vnutit include adresáře). Pro další zájemce nechť poslouží následující "kuchařku":

Dále jsem využil několika příkladů z INET Framework

Řešení

V jazyce NED jsem si nejprve vytvořil základní model sítě. Nejdříve s jedním switchem, protože jsem chtěl porovnávat běh sítě, která je bez cyklů se sítí s cykly. Pak jsem model rozšířil o druhý switch (tvořící cyklus) a simulaci prováděl na něm. Podobu modelu jsem tvořil v nástroji GNED.


Model bez cykluModel s cyklem

Konfigurace sítě

V modelu sítě se nalézejí dvě klientské stanice(host1, host2) a jeden server. Z hlediska implementace jsou si tyto stanice rovnocenné, všechny jsou realizovány za pomocí modulu EtherHost, který je převzat z příkladu LANs (viz. adresář INET\Examples\Ethernet\LANs). Komunikace probíha na úrovni ethernetových rámců (adresace je realizována automaticky generovanými MAC adresami). Stanice host1 a host2 posílají rámce serveru a server posílá rámce stanici host1.

Sběrnice jsou vytvořeny pomocí modulu EtherBus. Rámce přeposílá všem připojeným zařízením v pořadí dle vzdáleností na sběrnici.

Switch je vytvořen za pomoci modulu EtherSwitch. Bylo pouze potřeba navýšit txQueueLimit (maximální délka fronty) z 1000 na 10000.

Pro sledování délky fronty switche je třeba upravit soubory EtherMAC.cc a EtherMAC.h:

Simulace

Dobu simulace jsem nastavil na 500 sekund. Výsledky se vždy výsledky zapíší do souborů omnetpp.sca a omnetpp.vec.

Naměřeno:

  síť bez cyklusíť s cyklem
Čas simulace 499,9635s 499,9996s
Host1odeslaných rámců 2152 5894
přijatých rámců 4145 154310
max. doba přenosu 0.01192845s 8.341480s
prům. doba přenosu 0.00406966s 1.307561s
Host2odeslaných rámců 517 450
přijatých rámců 5780 159754
max. doba přenosu 0.01182927s 14.591198s
prům. doba přenosu 0.00404274s 2.6586159s
Serverodeslaných rámců 3628 8638
přijatých rámců 2669 150265
max. doba přenosu 0.01052685s 11.440701s
prům. doba přenosu 0.00415091s 1.1834192s

V síti s cyklem dochází na sběrnici k duplikaci rámců. Počet přijatých rámců několika násobně převyšuje počet odeslaných oproti síti bez cyklu, kde se počet odeslaných rámců hosty se rovná počtu přijatých serverem.

V síti s cyklem rapidně roste doba přenosu rámce, jak roste počet duplikovaných rámců. U sítě bez cyklu je doba přenosu packetu asi 300x menší.

Grafy:

Délka fronty na switchi

Síť bez cyklu:


Síť s cyklem:


Jak je vidět u sítě bez cyklu délka fronty nedosahuje nijak vysokých hodnot oproti síti s cyklem, kde lze pozorovat nárůst délky fronty po určité době - síť se začíná zahlcovat. Na grafu lze také pozorovat stárnutí packetů ve frontě, které je nastaveno na 60 sekund. Potom jsou packety z fronty zahozeny a fronta se vyprazdňuje.


Doba přenosu rámce

Síť bez cyklu:


Síť s cyklem:


Opět je zřejmý moment zahlcování sítě s cyklem. Pilovitý charakter průběhu je dán vyprazdňováním fronty.


Počet rámců určených jinému příjemci

Síť bez cyklu:


Síť s cyklem:


Zde je graf znázorňující počet rámců zahozených, protože jim nepatřily. Je zřejmé, že sběrnice doručuje Hostu1 rámce určené i pro Host2 a Server.

V důsledku cyklu se ovšem k Serveru dostanou i rámce, které mu nepatří. Tento fakt je způsoben zmatením switchů v důsledku cyklu v síti a špatným nastavováním směrovacích tabulek, kdy switch dostane rámec i z druhé strany, přenastaví si v tabulce směr a potom rámec posílá špatným směrem.




Závěr

Při simulaci jsem se naučil používat systém Omnet++ a INET Framework a ukázal si průběh rámců v síti s cyklem.


Zdrojové kódy:
Síť bez cyklu
Síť s cyklem
Upravený modul EtherMAC.cc