Semestrální projekt do předmětu Počítačové sítě & JAVA Technologie,
III.ročník letní semestr, 1999-2000
Projekt: Simulace Switche

Autoři: Miroslav Krupa, L97303
Zdeněk Šmíd, L97691

Simulace Switche - Dokumentace

Obsah

  1. Zadání
  2. Popis Ovládání
  3. Poznámky k způsobu simulace, implementace, diagram tříd
  4. Samotný simulační applet


1. Zadání

Vytvořte program, který bude simulovat chování různých metod bufferingu rámců v přepínači (switch). Uvažujte buffery na vstupech, na výstupech a sdílený buffer. Zohledněte také různé bitové rychlosti na jednotlivých portech a nastavitelnou délku rámce. Jako způsob průchodu rámců switchem je zvolena metoda Cut-through. Implementujte jako Java applet.

2. Popis Ovládání

Simulace switche je zpracována jako Java applet standartně pro dva druhy prohlížečů, a to Appletviewer dodávaný s balíkem JDK a standartní webový prohlížeč (nejlépe Internet Explorer). Vzhledem k odlišnému způsobu práce těchto prohlížečů je doporučeno zvolit příslošný HTML soubor, a to SimulationApplet.htm pro appletviwer a SimulationAppletIE.htm pro ostatní prohlížeče.

Po načtení appletu se zobrazí vstupní formulář pro nastavení parametrů simulace. Pro tuto simulaci byly jako základní jednotky zvoleny byty a jedna sekunda simulovaného času odpovídá 100 sekundám reálného času. Při vkládání údajů do textových polí je nutné pro potvrezení a provedení validace údajů (např. počtu vstupů, výstupů) zmáčknout klávesu ENTER. Ve formuláři lze zadat následující údaje:

Number of Inputs - Počet vstupů switche. Maximální počet vstupů je omezen na 6.
Speed of Inputs - Rychlosti jednotlivých vstupů v kBytech (1000 x) za sekundu simulovaného času. Rozmezí rychlostí je od 1 do 100. Rychlost vstupu omezuje také počet packetů, které na daný vstup mohou přijít (viz níže).
Number of Packets - Průměrný počet rámců přišlých na daný vstup. Horní hodnota počtu rámců závisí na rychlosti vstupu a velikosti rámce podle vztahu max = rychlost vstupu / velikost rámce. Celkový průměrný počet rámců generovaných za jednu sekundu simulovaného času je zobrazen níže.
Number of Outputs - Počet výstupů switche. Maximální počet výstupů je omezen na 6.
Speed of Output - Rychlosti jednotlivých výstupů v kBytech (1000 x) za sekundu simulovaného času. Rozmezí rychlostí je od 1 do 100.
Percent of Output Packets - Procentuální rozdělení průchozích rámců vzhledem k jednotlivým výstupům, údává průměrný počet procent příchozích . Součet hodnot musí dávat 100 %. Pokud bude výsledná hodnota jiná, provede se poměrové přepočítaní.
Size of Packet - Velikost rámce v bytech, která je pro všechny rámce společná. Rozmezí hodnot je od 100 do 1000.
Size of Buffer(s) - Velikost jednotlivých bufferů v bytech nebo v případě sdíleného bufferu velikost tohoto bufferu v bytech. Rozmezí velikostí je od 1000 do 10 000.
Type of Buffer - Volba druhu bufferu. Dostupné jsou tyto možnosti: on Input (buffery na vstupech), on Output (buffery na výstupech) a Shared (sdílený buffer pro vstupy i výstupy).

Dále je možné vyplnit formulář některou z třech přednastavených variant, což se stane po stiskuntí tlačítka Example 1 (2,3). Po nastavení všech údajů se stisknutím tlačítka Start provede validace všech údajů a v dialogovém okně budete vyzváni k potvrzení zadaných údajů. Pokud tak učiníte, rozběhne se simulace.

Po spuštění simulace se pod formulářem se v levé části zobrazí grafická podoba switche. Nad každým vstupem (v levé části switche) i výstupem je zobrazen indikátor stavu switche. Pokud je indikator černý, neprobíhá žádná operace, v případě že má zelenou barvu, probíha příjem rámce nebo jeho vysílání. Buffery jsou reprezenrovány obdélníky v tělě switche. Červená část indikuje zaplnění bufferu.

V pravé části vedle switche se nachází informace o průběhu simulace, a to simulační čas (Simulation Time) (minuty:sekundy:setiny sekundy), celkový počet přijatých rámců (Total arrived packets), celkový počet zahozených rámců z důvodů zaplnění bufferů (Total packets lost) a statistika zahozených rámců vzhledem k vstupů a výstupům (Lost packets from Input I to Output O), udávající počet zahozených rámců směřujících ze vstupu I na vstup O.

3. Poznámky k způsobu simulace, implementace

O generování rámců v simulaci se stará třída Dispatcher, které jsou předány údaje o rychlostech vstupů, výstupů, počtu rámců na vstupech a podílů výstupů. Simulace je vztažena k času jedné sekundy simulačního času, která je pro napodobení dynamiky procesů ve switchi rozdělena na 1000 úseků, každý o délce 100 milisekund reálného času. To znamená že jedna sekunda simulovaného času trvá 100 sekund reálného času. Toto zpomalení je zvoleno z důvodů minimalizace výkonu počítače a programu na děje ve switchi. V každém z těchto diskrétních časových úseků se v třídě Dispatcher pro každý vstup kontroluje, zda byl vygenerován rámec. Pravděpodobnost vygenerování rámce plyne ze vztahu požadovaný průměrný počet vygenerovaných packetů / počet cyklů. Horní hodnota skutečného počtu vygenerovaných rámců je přirozeně omezena velikostí rámce a rychlostí vstupu. [Úmyslně nebyly zvoleny pevné meze počtu rámců, protože by to neodpovídalo povaze zatížení (na daný vstup nemusí přijít žádný rámec, ale může jich přijít také maximum). Složitější zadávání pravděpodobnosti by rovněž vyžadovalo zadávání velkého množství vstupních údajů.] Pokud byl rámec vygenerován, určí se podle procentuálního rozdělení výstupních rámců, na který výstup bude rámec směřovat. Takto vzniklý rámec se předá vstupu. Pokud je v době vysílání jednoho rámce na vstupu vygenerován další rámec pro tento vstup, je uložen do fronty a vyslán hned po uvolnění vstupu.

Jakmile rámec je vstupem přijat začíná jej vstup zpracovávat tak, že jej rozděluje (použitá metoda cut-through) na fragmenty pevné délky (ta je zadána konstantou v kódu), které posílá na určené výstupy prostřednictvím bufferu.

Pokud jsou buffery na vstupech, automaticky je fragment umístěn do bufferu přiděleného ke vstupu, pokud jsou buffery na výstupech je fragment uložen do bufferu přidělenému tomu výstupu, který odpovídá cílovému číslu výstupu fragmentu (to zdědí fragment z paketu).

Pokud jsou buffery na výstupech, začnou výstupy automaticky pracovat po příchodu fragmentu do "jejich" bufferu. Pokud jsou na vstupech, má každý buffer všechny výstupy připojené jako observery a po příchodu fragmentu oznámí událost příchodu dat s parametrem cílového výstupu - všechny výstupy pak provedou metodu update a ten, který odpovídá cílovému výstupu fragmentu, začne pracovat (případně uloží informaci o lokaci fragmentu do fronty).

Pokud existuje jediný buffer sdílený všemi vstupy a výstupy, provádí se celá situace podobně.

Pokud se při ukládání do bufferu fragment už nevejde, je paket "zahozen", jeho fragmety se již na výstup nepředávají a vstup to oznámí simulaci prostřednictvím události.

Jednotlivé vstupy a výstupy jsou řešeny jako samostatné thready.

Diagram tříd: jako pdf nebo jako gif



[Na začátek stránky]