vyuka:cviceni:x36dsi:projekt2_nezobrazovat

Implementujte zjednodušený model linkové vrstvy ethernetu.

Celý projekt bude mít několik stupňů obtížnosti. Kolik a jak obtížných - to uvidím během spolupráce s vámi. Při implementaci je třeba zadané věci naprogramovat zcela přesně, neboť vaším úkolem bude vyrobit především požadované moduly, které budou v rámci testování začleněny do referenčního přostředí. Chování jednotlivých modulů bude zadáno explicitně. Tedy bude přesně definováno jejich chování. Kódová implementace je na každém z vás. Důležité je především správné chování modulu a dodržení jeho předepsaného rozhraní.

Stupeň 1

Vyrobte simulaci zjednodušené sítě s PC stanicemi a switchem.

Datový rámec

Datový rámec napodobuje opravdový rámec z ethernetu. Vzhledem k tomu, že se jedná o datovou strukturu, která se bude přenášet mezi vašimi moduly a referenčním prostředí, tak struktura datového rámce je přesně daná. Následuje kód message definition v Omnetu (více informací o tom, co to je, bude probráno na cvičení nebo je lze najít v manuálu v kapitole 5.2).

Messages.msg:

enum MessageTypes{
DATA = 0;
BPDU = 1;
}

message BaseMessage {
int destinationMac;
int sourceMac;
int type = enum(MessageTypes);
}

message DataMessage extends BaseMessage{
bool ack;
int priority;
int size;
}
message SwitchMessage extends BaseMessage{

}

Na síti se budou moci vyskytnout 2 typy datových rámců: Data a BPDU. V prvním stupni obtížnosti vás budou zajímat pouze rámce pro přenos hrubých dat (DATA). Báze všech rámců je BaseMessage, kde je uložena zdrojová a cílová MAC adresa a typ datového rámce. V DataMessage se nacházejí informace týkající se přenosu datové informace. Je zde ack - potvrzení o doručení, priority a size. V tomto stupni vás zajímá pouze ack a size. (Ani ack nemusíte nutně využít pokud nechcete.) SwitchMessage nebudete v tomto stupni obtížnosti potřebovat. Broadcast je taková MAC adresa, že rámec, který ji obsahuje jako cílovou adresu, je rozeslán do celé sítě. Hodnota broadcastu je 0!!!

PC stanice

PC stanice slouží v simulaci jako generátory a terminátory datových rámců. Modul PC stanice obsahuje dvě brány, jednu pro vstup, druhou pro výstup. Stanice má pak několik povinných parametrů, které je nutné použít. Je možné, že tyto parametry budou použity referenčním prostředím, proto je nutné zachovat přesně jejich názvy.

  • int MAC - MAC adresa dané stanice
  • double generationIntervalMin - spodní časová hranice generevání datového rámce
  • double generationIntervalMax - horní časová hranice generování datového rámce
  • double treshold - práh, který je přičítán k oběma predchozím hodnotám (Slouží k jednoduché změně délky genorovacího intervalu)
  • int maxMAC - celkový počet PC v simulaci (hodí se ke generování existujících MAC adres)

Každá PC stanice dostane přidělenu jednu MAC adresu. Pro jednotnost se dohodneme, že pokud bude v simulaci například 5 PC, budou mít MAC adresy 1,2,3,4,5. Žádná PC stanice nesmi mít MAC adresu 0, protože je to hodnota vyhrazená pro broadcast. Stanice generuje datové rámce o velikosti (size) 1 až 1500. Pro generování velikosti použijte funkci uniform(). Stanice pak generuje nové pakety v náhodných intervalech <genereationMin + treshold, genereationMax + treshold>. Opět použijte funkci uniform(). Nakonec potřebujete generovat cílové MAC adresy. K tomu použijte parametr maxMAC. Stanice by neměla odesílat rámce se svou MAC adresou jako cíl. Zdrojová MAC adresa v rámci je samozřejmě adresa stanice, která rámec vytvořila.

Switch

Switch samotny by se měl co nejvíce blížit realnému switchi. Modul přepínače má také několik povinných parametrů:

  • int portBufferSize - velikost vstupního bufferu pro každý port. (Velikost znamená kolik rámců se může do bufferu ulozit, velikosti jednotlivých rámců v tom nehrají roli.)
  • bool roundRobin - zapnutí a vypnutí metody výběru dalšího paketu pomocí Round Robin. (Vysvětleno dále v textu.)
  • bool cutThrough - zapnutí metody Cut-Through pro přeposílání paketů mezi porty. Ve stupni obtížnosti 1 nechte defaultně false.

Switch má standardně 8 portů. 8 vstupních a 8 výstupních. Pro každý vstupni port má vstupní buffer. Kapacita bufferu je dána parametrem a udává počet rámců, který lze do bufferu vložit bez ohledu na jejich velikost.

Switch má pro každý port tabulku MAC adres, kam ukládá zdrojové MAC adresy rámců, které na daném portu obdrží.

Pokud switch obdrží rámec jehož zdrojová adresa je broadcast (= nesmyslný rámec), tak jej nemilosrdně zníčí.

Jak to celé funguje

Switch obdrží na portu X datový rámec. V případě, že není buffer příslušného portu plný, je rámec vložen do bufferu a tam čeká než je vyzvednut a zpracován. Pokud je vstupní buffer plný, je rámec zahozen! (V rámci kódu to znamená i řádně dealokován!) Modul switche je aktivní pouze tehdy, když má alespoň jeden vstupní buffer neprázdný. Pokud má všechny buffery prázdné, nedělá nic, jen čeká než něco opět dorazí. Switch poté projde všech 8 portů a když narazí na neprázdný buffer, vyndá z něj paket a ten poté obsluhuje. Doba obsluhy trvá (0.1ms x velikost datového rámce). Switch dále přečte z rámce cílovou MAC adresu a prohledává tabulky adres všech portů, které jsou připojeny. Nepřipojených portů si nevšímá! Dále při tomto průzkumu ignoruje port, ze kterého přeposílaný rámec dorazil! Pokud nalezne cílovou MAC adresu na některém z portů, přestane hledat a rámec odesle na tento port. Pokud switch nenalezne cílovou adresu na žádném z portů, tak zduplikuje rámec na všechny připojené porty, kromě toho ze kterého rámec přišel. Tato operace trvá 200ms a o to se prodlužuje doba obsluhy!!! (Těch 200 ms navíc, je pouze v případě, že nebyl nalezen vhodný cílový port.)

Round-Robin - když switch vybírá z bufferů rámec, tak to může provést alespoň dvěma způsoby
1) roundRobin == false - v tomto případě začne switch kontrolovat vždy buffer na prvním portu a pak pokračuje dále. V případě, že je buffer prvního portu plný, jsou nejdříve postupně obslouženy rámce z prvního portu, dokud neni prázdný a teprve pak postupuje k dalšímu. V této metodě se múže stát, že rámce z posledních portů nejsou obslouženy vůbec!

2) roundRobin == true - v tomto případě začne switch kontrolovat nejdříve buffer prvního portu, pak obsluhuje a po skončení obsluhy kontroluje další port (ne ten, na kterém předtím skončil). Takto pokračuje stále dokola. Tato metoda začne sice u prvního portu, ale pak už spravedlivě prochází jeden port za druhým. Pokud je switch chvíli neaktivní a pak opět začne prohledávat porty, začíná vždy portem, který následuje za tím posledním prohledaným při poslední aktivitě switche.

Co je vaším úkolem?

1) implementujte zadané moduly a do jednoho switche zapojte 8 PC stanic. U switche nastavte velikost bufferů na 3. Metoda Round-Robin bude true (pojede to tedy s tou efektivnější metodou.
2) u PC stanice navrhněte nebo použijte nějaký potvrzovací protokol. Stačí aby měl timeout (aby poznal, že se rámec prostě ztratil) a nějaké sekvenční číslo (aby poznal, které rámce se ztratily). Na základě těchto údajů bude každá PC stanice měřit svou průměrnou ztrátovost odeslaných rámců. (Pokud potřebujete do rámce přidat další položky, přidejte je přímo do těla DataMessage.)
3) u PC stanic najděte takové nastavení parametrů, aby začalo docházet ke ztrátám rámců. Až se vám to podaří zkuste vyvodit jakou závislost má velikost vstupních bufferů na celkovou průměrnou ztrátovost rámců (= součet průměrných ztrát všech PC stanic / 8). Výsledky slovně zhodnoťte, zkuste vytvořit přehledný graf a nezapomeťe uvést, pro jak velký vzorek dat jste měření provedli a jak dlouho jste měřili. Upozornění: Velikost timeoutu je klíčová pro správné naměření statistik. Každý si tedy zvolí velikost timeoutu a svá měření vztáhne k této hodnotě. Ve zprávě uveďte Vaše zamyšlení jaký vliv má velikost timeoutu na Vaše výsledky.
4) Pokuste se provést statistické porovnání chování switche v zatíženém provozu se zapnutou a vypnutou metodou Roun-Robin.
5) Vypracujte stručnou přehlednou zprávu o vašich výsledcích. Stručnost a věcnost je vítána.

Slovo na závěr

Ǔlohu jsem záměrně definoval velice volně. Úkoly, které máte splnit se blíží požadavkům, kterým programátoři občas musí čelit. V úloze nejde ani tolik o to, jak skvěle a efektivně naprogramujete celou simulaci, ale jde především o to, abyste se dokázali dopracovat k rozumným požadovaným výsledkům. Představte si, že máte nový produkt s danými vlastnosmtmi (switch). Vaším úkolem je o této nové koncepci získat potřebné údaje. Proto je implementace PC stanic vícemeně na vás. Zadaveteli je jedno, jak potvrzujete rámce mezi PC stanicemi, zadavetele zajímá výsledek, jak se nové zařízení chová. Na vás je, abyste jej rozumně otestovali a dokázali interpretovat naměřené výsledky.

  • vyuka/cviceni/x36dsi/projekt2_nezobrazovat.txt
  • Last modified: 2010/04/26 13:46
  • by vikturek