\cleardoublepage
\noindent
{\large\sffamily\bfseries\MakeUppercase{Rozšírený abstrakt}}
\\
\\

%Uvod
Experimenty sú dôležitou časťou vývoja každého sieťového protokolu. Ich hlavným použitím je validácia teoretických výsledkov, prípadne validácia praktických riešení v~stave implementácie, ktorých testovanie nie je jednoduché namodelovať alebo naimplementovať. Výsledkom experimentov by mal byť posudok protokolu s~ohľadom na jeho spoľahlivosť, robustnosť a funkcionalitu špecifikovanú definíciou. Ale samozrejme v~niektorých prípadoch, ako napríklad v~rozľahlej sieti typu WAN, to nie je možné, prípadne je veľmi obtiažne ju vytvoriť, nakonfigurovať a spravovať reálne testovacie prostredie s~vysokou komplexitou. 

V~takomto prípade je možné použiť simulátor, ktorý používa funkcionálne modely pre všetky časti siete, ako aj samotnej aplikácie. Simulácia v~porovnaní s~reálnou sieťou môže byť len vo forme softwaru. Kvôli tomu je nutné, aby program modeloval správanie siete tak, že vypočíta všetky možné interakcie medzi rôznymi sieťovými entitami. Jedná sa o~čisto matematickú reprezentáciu sieťovej prevádzky, protokolov a iných sieťových prvkov. Simulátory sú zvyčajne veľmi komplikované programy s~rôznou úrovňou abstrakcie a podľa typu simulačného modelu majú aj obmedzenia, ktoré môžu byť tažko prekonateľné. 

Na druhej strane emulátory sa snažia spojiť simuláciu a experimentovanie v~reálnom svete tak, že poskytnú kontrolované prostredie, v~ktorom môže bežať skutočný kód. V~porovnaní so simulátormi, emulátory môžu existovať vo forme softwaru aj hardwaru. Ich umiestenie v~sieti je zvyčajne medzi dvoma segmentami v~lokálnej sieti typu LAN, kde môžu replikovať spojenie a rozhľahlú sieť typu WAN bez nutnosti existencie fyzických zariadení či sieťovej prevádzky.

%Linux
Cieľom tejto diplomovej práce je navrhnúť a programovo realizovať sieťový emulátor typu WAN pre systém Linux, a preto je nutné poznať ako funguje sieťový zásobník v~tomto systéme. Linux využíva ISO/OSI referenčný model pre prevažnú väčšinu svojho sieťového zásobníka, ktorý je rozdelený do mnohých modulov jadra. Linuxové jadro, známe aj ako \emph{kernel}, obsluhuje druhú až štvrtú vrstvu referenčného modelu. Po prijatí paketu na sieťovú kartu a jeho následným odovzdaním do sieťového ovládača, preberá kontrolu kernel. Hlavnou úlohou sieťového ovládača v~kerneli je príjmať pakety, ktoré sú cielené pre daného účastníka a ich predávanie do vyšších vrstviev, prípadne odosielanie paketov generovaných lokálne, cielených do iných sietí a taktiež preposielanie sieťovej prevádzky, ktorá nie je určená danému účastníkovi.
V~tretej vrstve referenčného modelu sa nachádza najväčší komponent sieťovej časti kernelu vo forme \emph{netfilter} subsystému. Netfilter je sieťová štruktúra na zachytávanie volaní generovaných v~rôznych častiach sieťového zásobníka a ich prípadnú obsluhu. Časťou tohto susbystému je aj \emph{iproute} modul, ktorý má na starosti riadenie tretej vrstvy referenčného modelu a taktiež obsahuje submodul na ovládanie prevádzky. Modul \emph{tc} je najdôležitejšou časťou diplomovej práce, nakoľko sa oň opiera implementácia samotnej aplikácie emulátoru. Jedná sa o~takmer poslednú časť sieťového zásobníka pred tým, než sú pakety zaslané sieťovému ovládaču, prípadne jedným z~prvých segmentov pre prichádzajúce pakety z~vyšších vrstiev. Jeho hlavnou úlohou je rozhodovanie o prechádzajúcich paketoch, či ich prijať alebo zahodiť, prípadne akou rýchlosťou, akým poradím, atď. Pre účely diplomovej práce sú vytvorené pravidlá pre modul tc, ktoré sú určené na degradáciu siete v~špecifických parametroch, aby bolo možné emulovať sieť WAN. Hlavné časti ovládania prevádzky sú klasifikátor a plánovač. 

%Impl
Vďaka natívnemu Linuxovému prostrediu s~plným prístupom do systému je možné využiť modul tc. Pre overenie konceptu, že bude možné vytvoriť spomínaný emulátor za pomoci tohto modulu, bolo nutné vykonať experimenty s~využitím časti modulu tc - \emph{netem}, ktorý bol schopný ovplyvnovať parametre, ako napríklad latenciu, strátovosť, jitter a mnohé iné. Nakoľko sa pre samotnú manipuláciu bude používať priamo kernel, výber programovacieho jazyka z~hľadiska rýchlosti nie je nutné riešiť a pre implementáciu bol zvolený jazyk Python. Prvotná implementácia pozostávala z~využitia plánovača z~modulu tc na odchádzajúce pakety zo systému. V~prichádzajúcom smere nebolo možné využiť plánovač, nakoľko pakety v~tomto smere neprechádzajú danou časťou netfilter subsystému, ktorý by ich mohol zachytiť. Pre prípad prichádzajúcich paketov bol využitý virtuálny IFB blok, ktorý slúžil na zachytávanie a presmerovávanie prichádzajúcich paketov, kde už bolo možné aplikovať plánovač. 

Finálna aplikácia dovoľuje užívateľovi vytvoriť jednu sieť za pomoci sieťového mosta z~dvoch daných sieťových rozhraní alebo prípadne použiť už existujúce rozhranie pre emuláciu. Pre ovládanie samotných parametrov programu, užívateľ využije grafické rozhranie nadizajnované pomocou \emph{Qt Designeru}, ktoré je kontrolované s~knižnicou \emph{PyQt5}. Aplikácia má minimálne závislosti na externé knižnice a programy. 

Testovanie a verifikácia sú poslednou časťou diplomovej práce. Sú zamerané na presnosť implementácie z~pohľadu parametrov a využívania zdrojov, hlavne procesorového času a alokovanej operačnej pamäti. Presnosť je v~rámci softwarových možností vysoká a jedinou prekážkou k~dokonalej situácii je granularita času v~kerneli. Použité prostriedky sú efektívne využité a nedochádza k~žiadnemu plytvaniu zdrojov.
Je nutné poznamenať, že pri veľmi nízkych hodnotách parametrov, je presnosť simulácie nižšia, ale pri použití parametrov blízkych reálnej WAN sieti je možné hovoriť o~zanedbateľných rozdieloch.