ˇ ´ ˇen´ı technick´ Cesk e vysok´ e uc e v Praze ´ Fakulta elektrotechnicka
´ PRACE ´ DIPLOMOVA Pouˇ zit´ı operaˇ cn´ıho syst´ emu Linux pro mˇ eˇ r´ıc´ı aplikace
Praha, kvˇ eten 2007
Autor: Bohuslav Stalmach
Vedouc´ı pr´ ace: Doc. Ing. Jaroslav Roztoˇ cil, CSc.
Prohl´ aˇsen´ı Prohlaˇsuji, ˇze jsem svou diplomovou pr´aci vypracoval samostatnˇe a pouˇzil jsem pouze podklady uveden´e v pˇriloˇzen´em seznamu. Nem´am z´avaˇzn´y d˚ uvod proti uˇzit´ı tohoto ˇskoln´ıho d´ıla ve smyslu § 60 Z´akona ˇc.121/2000 Sb. , o pr´avu autorsk´em, o pr´avech souvisej´ıc´ıch s pr´avem autorsk´ym a o zmˇenˇe nˇekter´ ych z´akon˚ u (autorsk´ y z´akon).
V Praze dne podpis
i
Podˇ ekov´ an´ı Na tomto m´ıstˇe bych r´ad podˇekoval pˇredevˇs´ım rodiˇc˚ um za podporu po celou dobu ˇ studia na CVUT. Nemal´e d´ıky patˇr´ı vedouc´ımu pr´ace Doc. Ing. Jaroslavu Roztoˇcilovi, CSc za jeho nesm´ırnou trpˇelivost a cenn´e pˇr´ıpom´ınky k diplomov´e pr´aci.
ii
Abstrakt C´ılem diplomov´e pr´ace bylo v jazyce C vyvinout multiplatformn´ı software, kter´ y otestuje vlastnosti pˇrenosov´e cesty IP s´ıt´ı s d˚ urazem na ztr´atovost paket˚ u a pˇrenosovou rychlost. Serverov´a ˇc´ast je spustiteln´a pod operaˇcn´ım syst´emem Linux, klientsk´a ˇc´ast pak pod syst´emy Linux a 32-bitov´ ymi Windows. Byl pouˇzit UDP protokol a to tak, aby bylo moˇzn´e mˇeˇrit i v s´ıt´ıch, kter´e pouˇz´ıvaj´ı NAT/PAT techniky a to obou smˇerech.
iii
Abstract Main goal of the project is to develop multiplatform software in C programming language that will test communication path characteristic of IP networks with emphasis to packet loss and transmission speed. Server part will run under Linux operating system, client part will run under Linux and 32-bit Windows. Software will use UDP protocol and it will be possible to measure networks that use NAT/PAT techniques in both directions.
iv
Tady bude zad´an´ı
v
Obsah Seznam obr´ azk˚ u
viii
´ 1 Uvod
1
1.1
UDP protokol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.1.1
Struktura paketu . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
V´ yhody UDP protokolu pˇri testov´an´ı IP s´ıt´ı . . . . . . . . . . . . . . . .
3
1.3
NAP/NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2 Anal´ yza 2.1
5
Poˇzadavky na aplikaci . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.1
Obecn´e
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.2
Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.3
Klient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2.1
Komunikaˇcn´ı protokol . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2.2
V´ yznam jednotliv´ ych paket˚ u . . . . . . . . . . . . . . . . . . . . .
9
2.2.3
N´avrh aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.2.3.1
Klient . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.2.3.2
Server . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Technick´a pozn´amka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . S´ıt’ov´a vrstva - tm sockets.h . . . . . . . . . . . . . . . . . . . . . . . . .
12 12
2.4.1
Nejniˇzˇs´ı vrstva . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 15
2.5
2.4.2 Servisn´ı vrstva . . . . . . . . . . . . . . . . . . . . . . . . . . . . ˇ Casovaˇ c - timer.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2.6
Vstupn´ı parametry - parser.h . . . . . . . . . . . . . . . . . . . . . . . .
19
2.7
Seznam vstupn´ıch parametr˚ u . . . . . . . . . . . . . . . . . . . . . . . .
22
2.8
extractor.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
2.2
2.3 2.4
vi
2.9
Hash - md5.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
2.10 Reporty - reporter.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
2.11 Server - tm server.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
2.12 Klient - tm client.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ´ 2.13 Upravy pro Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3 Pouˇ zit´ı
26 27
3.1
useradd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
3.2
tool.sh - uk´azkov´ y skript . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4 Kompilace
32
4.1
Linux
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.2
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
5 Z´ avˇ er
34
Literatura
35
A CD s aplikac´ı
I
vii
Seznam obr´ azk˚ u 1.1
Zapouzdˇren´ı UDP datagramu . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
UDP datagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3
NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1
Soubˇeh poˇzadavk˚ u v jednom bodˇe . . . . . . . . . . . . . . . . . . . . . .
6
2.2
Standardn´ı pr˚ ubˇeh komunikace . . . . . . . . . . . . . . . . . . . . . . .
8
2.3
Opakovan´e vysl´an´ı paketu . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.4
Vazby mezi strukturami msghdr, iovec a daty . . . . . . . . . . . . . . .
15
2.5
iperf - http://dast.nlanr.net/Projects/Iperf . . . . . . . . . . . . . . . . .
21
2.6
Sn´ımek termin´alu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
viii
Kapitola 1 ´ Uvod V souˇcasn´e dobˇe existuje nˇekolik podobn´ych aplikac´ı a to vˇcetnˇe zdrojov´ ych k´odu mnohdy s otevˇrenou licenc´ı. Vˇsechny tyto aplikace vˇsak postr´adaj´ı kl´ıˇcov´e vlastnosti, kter´e zadavatele vedly k poˇzadavku na aplikaci zcela novou. Z´asadn´ı rozd´ıl je pˇredevˇs´ım v moˇznosti ovˇeˇren´ı uˇzivatel˚ u, kteˇr´ı ˇz´adaj´ı o testovac´ı datov´ y tok. Dalˇs´ı z velk´ych rozd´ıl˚ u je vyuˇzit´ı jen jednoho UDP portu na stranˇe serveru, coˇz hlavn´ı d˚ uvod, proˇc jen nelze modifikovat jiˇz existuj´ıc´ı software.
1.1
UDP protokol
Obr´ azek 1.1: Zapouzdˇren´ı UDP datagramu
UDP (User datagram protocol) je souˇc´ast´ı sady Internetov´ ych protokol˚ u a tvoˇr´ı spoleˇcnˇe s TCP protokolem vˇetˇsinu internetov´e komunikace. Protokol je pops´an v RFC 768 [7]. 1
´ KAPITOLA 1. UVOD
1.1. UDP PROTOKOL
UDP byl p˚ uvodnˇe urˇcen pro zas´ıl´an´ı kr´atk´ ych zpr´av (datagram˚ u) a jako takov´ y postr´ad´a spolehlivost TCP. Mezi komunikuj´ıc´ımi zaˇr´ızen´ımi se nevytv´aˇr´ı spojen´ı, ˇc´ımˇz odpad´a reˇzie na vytvoˇren´ı a udrˇzov´an´ı takov´ehoto spojen´ı. D´ıky tˇemto vlastnostem je UDP protokol vhodn´ y pro aplikace, kde jde pˇredevˇs´ım o pˇrenosovou rychlost a ztr´ata nˇekolika paket˚ u nevede k z´asadn´ı ztr´atˇe informace. Pouˇziv´a se tedy pro aplikace, kde server na z´akladˇe kr´atk´ ych poˇzadavk˚ u rozes´ıl´a velk´a kvanta dat velk´emu poˇctu klient˚ u. UDP protokol podporuje zas´ıl´an´ı zpr´avy vˇsem poˇc´ıtaˇc˚ um na lok´aln´ı s´ıti (broadcast) a vˇsem z´ajemc˚ um o danou sluˇzbu (multicast). Z toho d˚ uvodu UDP protokol nalezneme u aplikac´ı pro ˇs´ıˇren´ı audiovizu´aln´ıch dat. Z rozˇs´ıˇren´ych pouˇzit´ı protokolu UDP jmenujme DNS (Domain Name System), TFTP (Trivial File System Protocol a z popul´arn´ıch pak VoIP telefonii. O protokolu TFTP bude zm´ınka v n´asleduj´ıc´ım textu.
1.1.1
Struktura paketu
Na obr´azku 1.2 je zobrazena struktura UDP paketu. UDP hlaviˇcka obshuje pouze ˇctyˇri ˇc´asti, z nichˇz dvˇe jsou voliteln´e.
Obr´ azek 1.2: UDP datagram
zdrojov´ y port identifikuje odesilatele a je pouˇzit, pokud oˇcek´av´ame odpovˇed’. Jde o nepovinn´ y parametr. c´ılov´ y port podle tohoto portu se na c´ılov´em poˇc´ıtaˇci vyb´ır´a pˇr´ısluˇsn´a aplikace. Parametr je povinn´ y.
2
´ ˇ TESTOVAN ´ ´I IP S´IT´IKAPITOLA 1. UVOD ´ 1.2. VYHODY UDP PROTOKOLU PRI d´ elka 16 bitov´a hodnota, kter´a obsahuje d´elku cel´eho datagramu (vˇcetnˇe hlaviˇcky) v bytech. Minim´aln´ı d´elka je 8 byt˚ u, coˇz je velikost hlaviˇcky, kotroln´ı souˇ cet nepovinn´a hodnota pro kontrolu paketu. Aˇc nepovinn´a, vˇetˇsinou se pouˇz´ıv´a. Kromˇe RFC 768 [7], je moˇzno pro v´ıce informac´ı navˇst´ıvit pˇr´ısluˇsnou str´anku na Wikipedii [1], ˇci do [11].
1.2
V´ yhody UDP protokolu pˇ ri testov´ an´ı IP s´ıt´ı
UDP protokol s´am o sobˇe nezaruˇcuje, ˇze datagram doraz´ı na m´ısto urˇcen´ı a stejnˇe tak nezaruˇcuje, ˇze datagramy doraz´ı ve stejn´em poˇrad´ı, v jak´em byly vysl´any. V nˇekter´ych pˇr´ıpadech m˚ uˇze doj´ıt i ke zduplikov´an´ı paketu uprostˇred pˇrenosov´e cesty. A pr´avˇe v´yˇse uveden´e vlastnosti lze s v´ yhodou vyuˇz´ıt pro testov´an´ı IP s´ıt´ı. Pokud jsou na vys´ılac´ı stranˇe pakety oznaˇceny, lze na stranˇe pˇr´ıjemce snadno zjistit, jestli se na pˇrenosov´e cestˇe nˇekter´ y paket ztratil ˇci zda doˇslo ke zmˇenˇe poˇrad´ı paket˚ u. Tyto vlastnosti jsou velmi v´ yhodn´e pro samotn´e mˇeˇren´ı, ale aplikace si mus´ı sama pˇridat vlastn´ı mechanismy, kter´e zabezpeˇc´ı doruˇcen´ı d˚ uleˇzit´ych zpr´av.
1.3
NAP/NAT
Network address translation (NAT) je technika vyvinut´a v IPv 4 s´ıt´ıch kv˚ uli nedostatku IP adres. Hlavn´ım vyuˇzit´ım je pˇripojen´ı lok´aln´ı s´ıtˇe k Internetu pˇres jedinou veˇrejnou IP adresu tak, ˇze pˇri cestˇe datagramu z lok´aln´ıho poˇc´ıtaˇce router (gateway) nahrad´ı zdrojovou adresu svou vlastn´ı adresou, takˇze z pohledu c´ılov´eho poˇc´ıtaˇce tento komunikuje pouze s gateway. Dalˇs´ı v´yhodou je skryt´ı lok´aln´ıch poˇc´ıtaˇc˚ u pˇred vnˇejˇs´ı s´ıt´ı, kter´e tak nejsou bˇeˇzn´ymi metodami pˇr´ımo dostupn´e z Internetu a kles´a tak pravdˇepodobnost napaden´ı poˇc´ıtaˇce a sniˇzuje se moˇznost vzd´alen´e n´akazy virem (ˇcervem). Omezen´ım je pak nefunkˇcnost nˇekter´ ych sluˇzeb ˇci n´aroˇcnost jejich konfigurace. Pokud pouˇzijeme Port Address Translation (PAT), router nahrazuje jednak IP adresu, jednak zdrojov´ y port datagramu. V´ıce v RFC 3022[10]. Je-li klient skryt pomoc´ı nˇekter´e z pˇredchoz´ıch technik pˇred veˇrejnou s´ıt´ı, server takov´ehoto klienta nevid´ı. Teprv´e pot´e, co klient zaˇsle sv˚ uj datagram na server, vytvoˇr´ı 3
´ KAPITOLA 1. UVOD
1.3. NAP/NAT
se v routerech na cestˇe patˇriˇcn´e smˇerovac´ı tabulky. Je dobr´e si uvˇedomit, ˇze port i adresa UDP paketu, kter´y pˇrich´az´ı na server se m˚ uˇzou liˇsit od re´aln´e adresy klienta. Je tedy zbyteˇcn´e na aplikaˇcn´ı u ´ rovni vkl´adat na stranˇe klienta adresu, nebot’ bude s velkou pravdˇepodobnost´ı pˇreps´ana. Jedin´e, co NAT zaruˇcuje je, ˇze pokud jsou vysl´any z poˇc´ıtaˇce za NATem pakety z jednoho zdrojov´eho portu, budou se i zvnˇejˇsku jevit, ˇze byly vysl´any z jednoho portu, aˇckoliv ˇc´ıslo portu se m˚ uˇze na obou stran´ach liˇsit.
Obr´ azek 1.3: NAT
4
Kapitola 2 Anal´ yza
2.1 2.1.1
Poˇ zadavky na aplikaci Obecn´ e
Zad´an´ı diplomov´e pr´ace pomˇernˇe pˇresnˇe definuje poˇzadavky na aplikaci. Pˇri realizaci je jiˇz od poˇc´atku nutn´e poˇc´ıtat s t´ım, ˇze klientsk´a ˇc´ast mus´ı b´yt zkompilovateln´a - provozu schopn´a - jak na operaˇcn´ım syst´emu Linux, tak na 32-bit verz´ıch Microsoft Windows. Dalˇs´ı poˇzadavek, kter´ y je na prvn´ı pohled skryt, je zaruˇcen´a funkˇcnost aplikace i v s´ıt´ıch za NAT/PAT. Pˇredpokl´ad´a se, ˇze server je veˇrejnˇe pˇr´ıstupn´y, kdeˇzto klient je v s´ıti neveˇrejn´ ych adres.
2.1.2
Server
Z´asadn´ım poˇzadavkem je nutnost pouˇz´ıt na stranˇe serveru pro komunikaci pouze jeden UDP port. Klasick´e klient UDP server aplikace, napˇr´ıklad TFTP pouˇzivaj´ıc´ı protokol stejn´eho jm´ena, kter´y je definov´am v RFC 1350 [9], funguj´ı jinak. Server naslouch´a na obecnˇe zn´amem portu (v pˇr´ıpadˇe TFTP je to port 69). Klient zaˇsle datagram na tento 5
ˇ 2.1. POZADAVKY NA APLIKACI
´ KAPITOLA 2. ANALYZA
port, server vytvoˇr´ı nov´ y socket a dalˇs´ı komunikace s klientem prob´ıh´a jiˇz pˇres jin´y UDP port. T´ımto zp˚ usobem se obejde faktick´a neexistence dvoubodov´eho spojen´ı zn´ameho z protokolu TCP, kdy pˇres jeden TCP port na stranˇe serveru m˚ uˇze kumunikovat nˇekolik klient˚ u v jeden okamˇzik. Ale jak jiˇz bylo ˇreˇceno, tuto techniku nelze vyuˇz´ıt. Dalˇs´ı odliˇsnost´ı od existuj´ıc´ıch aplikac´ı je ovˇeˇren´ı uˇzivatele, kter´ y ˇz´ad´a o datov´ y tok pomoc´ı uˇzivatelsk´eho jm´ena a hesla. Jedinˇe v pˇr´ıpadˇe, ˇze souhlas´ı oba u ´ daje se z´aznamy na serveru, je datov´ y tok vysl´an. Vzhledem k odstavci v sekci 1.3 je tˇreba zajistit, aby server spr´avnˇe ˇcetl adresu pˇr´ıchoz´ıho paketu a mohl tak komunikovat s klinety za NAT/PAT.
Obr´ azek 2.1: Soubˇeh poˇzadavk˚ u v jednom bodˇe
Posledn´ım poˇzadavkem na server je pouˇzit´ı reprezentativn´ıch datov´ych tok˚ u pro testov´an´ı linkov´e vrstvy a vlivu komprese na pˇrenosov´e charakteristiky. Pˇri tomto poˇzadavku budou pouˇzity extern´ı soubory r˚ uzn´ych obsah˚ u (komprimovan´e video, zip soubory, obr´azky, text), jejichˇz obsahem budou pakety plnˇeny. Na linkov´e vrstvˇe TCP/IP protokolu je totiˇz implementov´ano nˇekolik protokol˚ u, kter´e dok´aˇz´ı komprimovat data, ˇc´ımˇz sniˇzuj´ı velikost paketu a teoreticky zvyˇsuj´ı propustnost takov´e s´ıtˇe. Je zˇrejm´e, ˇze napˇr´ıklad jiˇz vysoce zkomprimovan´e MPEG video nebude pˇri pˇrenosu d´ale komprimov´ano, ale napˇr´ıklad u bitmapov´ ych obr´azk˚ u ˇci textu dos´ahne komprimaˇcn´ı algoritmus zaj´ımav´ ych kompresn´ıch pomˇer˚ u. Pouˇzit´ım r˚ uzn´ych reprezentativn´ıch datov´ych tok˚ u m˚ uˇzeme ovˇeˇrit funkˇcnost kompresn´ıch algoritm˚ u na pˇrenosov´e cestˇe. Z protokol˚ u linkov´e vrstvy, kter´e jsou schopny datov´e komprese jmenujme alespoˇ n protokoly PPP, Frame Relay, High-Level Data Link Control (HDLC) a X.25. 6
ˇ 2.1. POZADAVKY NA APLIKACI
´ KAPITOLA 2. ANALYZA
Kritickou ˇc´ast´ı aplikace bude ˇcasovaˇc, kter´y zaruˇc´ı, ˇze rozestupy mezi pakety budou odpov´ıdat poˇzadavku klienta. Mus´ı b´yt schopen spr´avn´e funkce i pˇri vys´ıl´an´ı v´ıce datov´ ych tok˚ u r˚ uzn´ym klient˚ um. Server bude schopen datov´e toky nejen vys´ılat, ale tak´e pˇrij´ımat datov´ y tok od klienta a to bud’ samostatnˇe v obou smˇerech, ˇci v du´aln´ım reˇzimu, kdy se postupnˇe zmˇeˇr´ı pˇrenosov´a cesta v obou smˇerech datov´ym tokem shodn´ych parametr˚ u. Je d˚ uleˇzit´e zajistit v´ ymˇenu v´ysledk˚ u mˇeˇren´ı mezi serverem a klientem.
2.1.3
Klient
D˚ uleˇzit´ym poˇzadavkem, kter´ y vyplynul aˇz v pr˚ ubˇehu ˇreˇsen´ı, je moˇznost pouˇzit´ı klientsk´e ˇc´asti aplikace v uˇzivatelsk´ ych skriptech. Je tedy potˇreba, aby klient dok´azal zpracovat poˇzadavky z pˇr´ıkazov´e ˇr´adky a aby takto bylo moˇzno nastavit vˇsechny poˇzadavky na datov´ y tok. Ve vˇsech ˇz´adostech o datov´ y tok mus´ı b´yt uveden uˇzivatel a heslo. Heslo se zas´ıl´a v ”hash” podobˇe - odtud plyne potˇreba vybrat vhodnou hashovac´ı funkci. Uˇzivatel m˚ uˇze zadat datov´ y tok v ”raw” podobˇe - to jest velikost paket˚ u a rozestup mezi nimi. Druhou moˇznost´ı je zadat datov´ y tok jako definovanou pˇrenosovou rychlost, kter´a je doplnˇena bud’ informac´ı o velikosti paketu ˇci rozestupu mezi pakety. Ostatn´ı parametry budou dopoˇc´ıt´any. Dalˇs´ı, v´yslovnˇe zadan´e parametry, jsou typ v´ yplnˇe paketu a timeout pro komunikaci se serverem. Pro lepˇs´ı funkci budou implementov´any dalˇs´ı parametry, kter´e pouˇz´ıv´a software iperf, kter´ y byl v minulosti pouˇz´ıv´an zadavatelem. Po pˇrijet´ı datov´eho toku klient vyhodnocuje datov´ y tok z nˇekolika hledisek: ztr´atovost paket˚ u, zmˇena poˇrad´ı paket˚ u, pˇrenosov´a rychlost, rozestupy mezi pakety, kol´ıs´an´ı rozestup˚ u (jitter). V norm´aln´ım reˇzimu vypisuje klient v´ ysledky na standardn´ı v´ystup, popˇr´ıpadˇe do CSV souboru, coˇz je v´yhodn´e zejm´ena pˇri opakovan´em mˇeˇren´ı. Klient dok´aˇze datov´ y tok nejen zpracovat, ale v pˇr´ıpadˇe du´aln´ıho reˇzimu i vyslat datov´ y tok na server.
7
´ KAPITOLA 2. ANALYZA
2.2. DESIGN
2.2 2.2.1
Design Komunikaˇ cn´ı protokol
Klient a server mezi sebou komunikuj´ı pomoci UDP datagram˚ u. Datagram obsahuje ID paketu, ˇcasovou znaˇcku a data. Podle ID paketu se datagramy dˇel´ı na datov´e (ID > 0) a pakety nesouc´ı informaci (ID < 0). Tyto se d´ale dˇel´ı na pakety servisn´ı (ACK, DEN, FIN, ERR) a reporty. Speci´aln´ı paket s ID = 0 (REQ) obsahuje ˇz´adost o datov´ y tok a jako takov´ y vˇzdy zahajuje komunikaci. Na obr´azku 2.2 je vidˇet standardn´ı pr˚ ubˇeh komunikace se serverem. Pokud v pr˚ ubˇehu komunikace vznikne chyba, je vysl´an paket ERR, kter´ y obsahuje k´od chyby.
Obr´ azek 2.2: Standardn´ı pr˚ ubˇeh komunikace
Jelikoˇz je UDP protokol nespolehliv´ y, je potˇreba na aplikaˇcn´ı u ´ rovni zajistit ovˇeˇren´ı doruˇcen´ı servisn´ıch a informaˇcn´ıch paket˚ u. Nejjednoduˇs´ım ˇreˇsen´ım je opakovan´e zas´ıl´an´ı po urˇcit´em ˇcasov´em intervalu, dokud neobdrˇz´ıme odpovˇed’ ˇci pokud nen´ı pˇrekroˇcen stanoven´ y poˇcet opakov´an´ı. Princip je na obr´azku 2.3. Protoˇze klient i server mohou b´yti kompilov´any na r˚ uzn´ ych softwarov´ ych a hardwarov´ ych architektur´ach, nen´ı se moˇzn´e spolehnout na to, ˇze ˇc´ıseln´e hodnoty budou na obou 8
´ KAPITOLA 2. ANALYZA
2.2. DESIGN
stran´ach interpretov´any stejnˇe napˇr´ıklad kv˚ uli odliˇsn´emu poˇrad´ı nejvyˇsˇs´ıch a nejniˇzˇs´ıch ˇ byt˚ u. C´ısla budou pˇrek´odov´ana do ˇsestn´actkov´e soustavy (HEX) a zas´ıl´ana jako text, kdy jeden znak bude m´ıt jeden byte. T´ımto se vyhneme pot´ıˇz´ım s poˇrad´ım byt˚ u v ˇc´ıseln´e promˇenn´e.
Obr´ azek 2.3: Opakovan´e vysl´an´ı paketu
2.2.2
V´ yznam jednotliv´ ych paket˚ u
• REQ - request - prvn´ı paket, kter´ y klient pos´ıl´a na server. Slouˇz´ı k ovˇeˇren´ı uˇzivatele a z´aroveˇ n k definov´an´ı poˇzadovan´eho datov´eho toku. • ACK - acknowledgement- potvrzuje, ˇze paket byl pˇrijat. V pˇr´ıpadˇe, ˇze pˇredchoz´ı paket byl REQ, potvrzuje ovˇeˇren´ı uˇzivatele. • ERR - error - pˇri zpracov´an´ı poˇzadavk˚ u vznikla chyba. V pˇr´ıpadˇe, ˇze pˇredchoz´ı paket byl REQ, oznamuje paket, ˇze uˇzivatel nebyl korektnˇe ovˇeˇren. • DEN - data end - pˇredchoz´ı datov´ y paket byl posledn´ı. Tento paket obsahuje tak´e informaci o ID posledn´ıho vyslan´eho paketu, jin´ ymi slovy poˇcet odeslan´ ych paket˚ u. • FIN - finish - vys´ılac´ı strana ukonˇcuje komunikaci
9
´ KAPITOLA 2. ANALYZA
2.2. DESIGN
2.2.3
N´ avrh aplikace
Server i klient sd´ıl´ı vˇetˇsinu k´odu, vyuˇz´ıvaj´ı stejn´e knihovny. Rozd´ıl je pˇredevˇs´ım v tom, ˇze server je v´ıcevl´aknov´ y - vyuˇz´ıv´a POSIX vl´aken operaˇcn´ıho syst´emu Linux. Vl´akna jsou vyuˇzita pouze pro vys´ıl´an´ı datov´ ych tok˚ u od serveru smˇerem ke klientovi. Pˇr´ıjem paket˚ u se shodnˇe na klientu i serveru zpracov´av´a sekvenˇcnˇe v hlavn´ım vl´aknˇe. V n´asleduj´ıc´ıch odstavc´ıch je bliˇzˇs´ı n´avrh aplikace. Text se jiˇz nezab´yv´a ovˇeˇrov´an´ım pˇrijet´ı paket˚ u.
2.2.3.1
Klient
Klient je spouˇstˇen z pˇr´ıkazov´e ˇr´adky. Naˇcte uˇzivatelem definovan´e parametry a nezadan´e parametry dopln´ı na v´ ychoz´ı hodnoty. Jelikoˇz m˚ uˇze b´ yt datov´ y tok definov´an neupln´ ymi parametry, klient zb´ yl´e parametry dopoˇc´ıt´a. S takto vypoˇcten´ymi daty zaˇsle REQ paket. Po obdrˇzen´ı paketu ACK ˇcek´a na pˇr´ıchoz´ı datov´ y tok. Jelikoˇz paket ACK se m˚ uˇze po cestˇe ztratit, je zasl´an´ı paketu ACK v tomto pˇr´ıpadˇe nepovinn´e a klient pˇrichoz´ı datov´e pakety spr´avnˇe zpracuje i bez tohoto potvrzen´ı. Po pˇr´ıchodu prvn´ıho datov´eho paketu odmˇeˇr´ı ˇcas. Dokud jsou ID paket˚ u vetˇs´ı neˇz nula, naˇcte z hlaviˇcky paketu ˇcasovou znaˇcku a vypoˇc´ıt´a rozd´ıl oproti aktu´aln´ımu ˇcasu. D´ale sleduje ˇcasov´ y rozd´ıl oproti minul´emu paketu. Pokud se ID paketu neliˇs´ı od pˇredchoz´ıho ID pr´avˇe od jedniˇcku, zapoˇc´ıt´a jej jako ztracen´ y. Pokud je ID paketu niˇzˇs´ı neˇz pˇredchoz´ı ID, zapoˇc´ıt´a jej jako paket mimo poˇrad´ı a sn´ıˇz´ı poˇcet ztracen´ ych paket˚ u. Jakmile klient obdrˇz´ı paket DEN, kter´ y z´aroveˇ n obsahuje informaci o posledn´ım zaslan´em ID paketu, vypoˇcte pˇrenosovou rychlost, pr˚ umˇern´y rozestup mezi pakety, nejistotu rozestup˚ u. V du´aln´ım reˇzimu server po odesl´an´ı paketu DEN odeˇsle paket REQ a klient tentokr´ate vys´ıl´a datov´ y tok smˇerem k serveru. Po odeslan´ı paketu DEN klientem ˇcek´a klient na report ze serveru a pot´e ukonˇcuje komunikaci. Podle poˇzadavk˚ u uˇzivatele pak tiskne form´atovanou z´avˇereˇcnou zpr´avu na standardn´ı v´ystup, popˇr´ıpadˇe do CSV souboru pro pozdˇejˇs´ı zpracov´an´ı. Toto je posledn´ı akce, program se ukonˇc´ı.
10
´ KAPITOLA 2. ANALYZA
2.2. DESIGN 2.2.3.2
Server
Po spuˇstˇen´ı server pˇrij´ım´a poˇzadavky na uˇzivatelem definovan´em portu. Pˇri obdrˇzen´ı paketu s jin´ym neˇz nulov´ ym ID ovˇeˇr´ı nejdˇr´ıve, jestli paket poch´az´ı od ovˇeˇren´eho uˇzivatele. Pokud ne, paket je zahozen a d´ale nezpracov´av´an. Paket s ID = 0 obsahuje uˇzivatelsk´e jm´eno a heslo, kter´e je ovˇeˇreno proti seznamu uˇzivatel˚ u. Pokud je ovˇeˇren´ı v poˇr´adku, server vytvoˇr´ı nov´e vl´akno, kter´e odeˇsle paket ACK a po definovan´e prodlevˇe zaˇcne vys´ılat poˇzadovan´ y datov´ y tok. Na z´avˇer odeˇsle paket DEN, kter´ ym signalizuje konec vys´ıl´an´ı. V pˇr´ıpadˇe, ˇze souˇc´ast´ı poˇzadavku na datov´ y tok byla ˇz´adost o du´aln´ı reˇzim, nevyˇrazuje server klienta ze seznamu ovˇeˇren´ych klient˚ u, ale odes´ıl´a paket REQ. Hlavn´ı vl´akno serveru mezit´ım zpracov´av´a dalˇs´ı pˇr´ıchoz´ı pakety. Pro kaˇzd´eho klienta, kter´ y poˇz´adal o du´aln´ı reˇzim m´a server vytvoˇren z´aznam, do kter´eho ukl´ad´a informace o paketech. Po pˇr´ıchodu paketu DEN vyhodnot´ı datov´ y tok a report zaˇsle klientovi. Z´aznam je smaz´an a klient je ostranˇen ze seznamu ovˇeˇren´ych klient˚ u. Autentizace plat´ı jen pro pr´avˇe prob´ıhaj´ıc´ı datov´e toky. Na rozd´ıl od klienta zobrazuje server informace o sv´em stavu na standardn´ı v´ystup, do sv´eho logu a do syst´emov´eho logu. Do syst´emov´eho logu jsou zapisov´any pouze nejd˚ uleˇzitˇejˇs´ı informace - spuˇstˇen´ı serveru, vypnut´ı a neuspˇeˇsn´a autentizace vˇcetnˇe informac´ı o klientovi, kter´ y se pokusil o pˇripojen´ı. Do sv´eho logu si server zapisuje stejn´e zpr´avy jako na v´ ystup s t´ım, ˇze v´ystup na obrazovku lze zak´azat - tzv. tich´ y reˇzim. Pokud server bˇeˇz´ı v konzoli, je moˇzn´e ho ukonˇcit stiskem kl´aves Ctrl+C, popˇr´ıpadˇe zasl´an´ım sign´alu SIGTERM, po jehoˇz obdrˇzen´ı se server korektnˇe ukonˇc´ı. Server m˚ uˇze b´yt spuˇstˇen tak´e jako syst´emov´ y d´emon (daemon) bˇeˇz´ıc´ı na pozad´ı. Poˇcet souˇcasnˇe beˇz´ıc´ıch server˚ u nen´ı omezen, v syst´emov´em logu jsou jednotliv´e zpravy odliˇseny pomoc´ı PID (process id).
11
´ POZNAMKA ´ 2.3. TECHNICKA
2.3
´ KAPITOLA 2. ANALYZA
Technick´ a pozn´ amka
Aplikace byla programov´ana ve v´ yvojov´em prostˇred´ı KDevelop. Ke kompilaci byl pouˇzit bal´ık n´astroj˚ u GCC a to jak v prostˇred´ı Linux, tak Windows. Jako programovac´ı jazyk bylo zvolen jazyk C v jeho ANSI podobˇe a to vˇcetnˇe ANSI C form´atov´an´ı k´odu. Z ANSI normy C90 nejsou dodrˇzeny zejm´ena form´aty koment´aˇr˚ u, nebot’ norma C90 neumoˇznuje pouˇzit´ı koment´aˇr˚ u C++ stylu tj. dvˇe lom´ıtka.
2.4
S´ıt’ov´ a vrstva - tm sockets.h
V c´ılov´ ych operaˇcn´ıch syst´emech se k pˇr´ıstupu ke sluˇzb´am s´ıtˇe pouˇz´ıv´aj´ı sockety, kter´e v obou pˇr´ıpadech vych´az´ı z Berkeley sockets API. Zat´ımco v pˇr´ıpadˇe Linuxu byla specifikace dodrˇzena, v pˇr´ıpadˇe Microsoft Windows a jejich WinSock doˇslo k odchylk´am. Obˇe implementace byly porovn´any a nakonec byla vybr´ana mnoˇzina funkc´ı, kter´e jsou t´emˇeˇr identick´e a k´od je tak pˇrenositeln´ y s minim´aln´ımi z´asahy v k´odu jen s pomoc´ı direktiv preprocesoru. Popis rozhran´ı socket najdeme napˇr´ıklad [3] a popis rozhran´ı WinSock pak [2].
2.4.1
Nejniˇ zˇ s´ı vrstva
Z´akladem kaˇzd´e komunikace je vytvoˇren´ı socketu, pˇres kter´ y bude aplikace komunikovat s vnˇejˇs´ım svˇetem. K tomu slouˇz´ı vol´an´ı socket()
int socket(int domain, int type, int protocol);
, kter´e m´a v naˇsem pˇr´ıpadˇe podobu
socket(AF_INET, SOCK_DGRAM, 0); 12
ˇ ´ VRSTVA - TM SOCKETS.H 2.4. S´ITOV A
´ KAPITOLA 2. ANALYZA
Pouˇz´ıv´ame totiˇz rodinu AF INET, datagramovˇe orientovan´ y protokol SOCK DGRAM, coˇz je v naˇsem pˇr´ıpadˇe UDP. Aby bylo pˇres socket moˇzno pˇrij´ımat datagramy, je potˇreba ho sv´azat s konkr´etn´ım portem a s´ıt’ov´ ym zaˇr´ızen´ım, k ˇcemuˇz slouˇz´ı funkce bind(). Bind je potˇreba pouˇz´ıt jak u klienta, tak u serveru, nebot’ oba pˇrij´ımaj´ı datagramy. Pokud bychom chtˇeli jen odes´ılat, bind nen´ı nutn´ y. Je pouˇzit IP 4 protokol, ale poˇc´ıt´a se u ´ pravou programu tak, abyt mohl b´ yt pouˇzit i na IP 6 s´ıt´ıch. Pro vlastn´ı odes´ıl´an´ı a ˇcten´ı jednotliv´eho datagramu jsou pouˇzity funkce readmsg(), recvmsg() respektive WSARecvFrom() a WSASendTo(), coˇz jsou knihovn´ı funkce definovan´e v hlaviˇckov´ ych souborech socket.h (linux, unix) a WinSock2.h (windows).
/* socket */ ssize_t sendmsg (int socket, const struct msghdr *message, int flags); ssize_t recvmsg(int socket, struct msghdr *message, int flags);
/* WinSock */ int WSARecvFrom( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr* lpFrom, LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); int WSASendTo( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, const struct sockaddr* lpTo, 13
ˇ ´ VRSTVA - TM SOCKETS.H 2.4. S´ITOV A
´ KAPITOLA 2. ANALYZA
int iToLen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );
Prvotn´ı design aplikace p˚ uvodnˇe poˇc´ıtal s pouˇzit´ım funkc´ı WSARecv() a WSASend(), kter´e jsou totoˇzn´e s funkcemi v POSIXov´e implementaci. Pˇresto, ˇze jsou tyto funkce v dokumentaci Microsoftu MSDN, je jich moˇzno plnˇe vyuˇz´ıt aˇz v operaˇcn´ım syst´emu Windows VISTA. Pro maxim´aln´ı pouˇzitelnost aplikace na starˇs´ıch Windows byly nakonec pouˇzity v´ yˇse uveden´e funkce za cenu rozd´ılu v k´odu pro Windows a Linux. Aplikace zdaleka nevyuˇz´ıv´a vˇsechny moˇznosti, kter´e tyto funkce program´atorovi poskytuj´ı. Vol´an´ı funkce vypad´a jednoduˇse, v´ıce n´am ˇrekne pohled na strukturu msghdr.
struct msghdr{ void
*msg_name
socklen_t struct iovec
/* Optional address. */
msg_namelen *msg_iov
/* Size of address. */ /* Scatter/gather array.*/
int
msg_iovlen
/* Members in msg_iov.*/
void
*msg_control
/* Ancillary data; see below.*/
socklen_t
msg_controllen
/* Ancillary data buffer len.*/
int
msg_flags
/* Flags on received message*/
}; struct iovec{ void *iov_base;
/* starting address of the buffer */
size_t
/* size of buffer */
iov_len;
};
D´ıky tˇemto funkc´ım je moˇzn´e zapsat a ˇc´ıst v´ıce buffer˚ u z´aroveˇ n. Pointer *msg iov totiˇz m˚ uˇze ukazovat na pole struktur iovec, jehoˇz d´elka je urˇcena poloˇzkou msg iovlen. Struktura iovec pak obsahuje ukazatel na buffer a jeho d´elku. Pˇri pos´ıl´an´ı paketu je
14
ˇ ´ VRSTVA - TM SOCKETS.H 2.4. S´ITOV A
´ KAPITOLA 2. ANALYZA
potˇreba ˇr´adnˇe vyplnit hlaviˇcku *msg name, kter´a v naˇsem pˇr´ıpadˇe ukazuje na strukturu sockaddr in, kter´a definuje informace o adres´atovi paketu. Pro vˇetˇs´ı pˇrehlednost je pˇripojen obr´azek 2.4 vazeb mezi jednotliv´ ymi strukturami tak, jak je pouˇz´ıv´a aplikace.
Obr´ azek 2.4: Vazby mezi strukturami msghdr, iovec a daty
struct sockaddr_in { short
sin_family;
// e.g. AF_INET
unsigned short
sin_port;
// e.g. htons(3490)
struct in_addr
sin_addr;
// see struct in_addr, below
char
sin_zero[8];
// zero this if you want to
}; struct in_addr { unsigned long s_addr;
// load with inet_aton()
};
2.4.2
Servisn´ı vrstva
Jak je patrn´e z pˇredchoz´ıho textu, manipulace s n´ızko´ urovˇ nov´ ymi funkcemi nen´ı jednoduch´a, bylo tedy potˇreba vytvoˇrit obsluˇzn´e funkce, kter´e vypln´ı datov´e struktury a z´aroveˇ n zv´yˇs´ı pˇrehlednost k´odu. Tyto funkce jsou definov´any v hlaviˇckov´e souboru 15
ˇ ´ VRSTVA - TM SOCKETS.H 2.4. S´ITOV A
´ KAPITOLA 2. ANALYZA
tm sockets.h a implementov´any v pˇr´ısluˇsn´e knihovnˇe. Vyuˇzijeme toho, ˇze jiˇz pˇri vol´an´ı u ´ vodn´ı bind() funkce potˇrebujeme m´ıt inicializov´anu strukturu sockaddr in. Jelikoˇz velikosti datov´ ych struktur zn´ame tak´e, pouˇzijeme jiˇz uˇzivatelskou funkci tm fill msghdr(), kter´a vypln´ı vˇse potˇrebn´e.
void tm_fill_msghdr(struct msghdr *hdr, struct iovec *iov, struct sockaddr_in *SA);
Takto vyplnˇenou strukturu, na kterou ukazuje pointer *hdr, lze jiˇz pˇredloˇzit funkci sendmsg(), ˇc´ımˇz by doˇslo k odesl´an´ı pr´azdn´eho paketu. Pro rozumn´e vyuˇzit´ı je potˇreba pˇred odesl´an´ım doplnit ukazatele na datov´e struktury, kter´e jsou celkem dvˇe. Prvn´ı je typu socket header t a druh´a ukazuje na libovoln´a data, at’ uˇz je to buffer pro v´yplˇ n datov´eho paketu, ˇci jin´a struktura. Pokud takov´ y paket pˇrijme druh´a strana, podle kontextu (a ID paketu) pozn´a, jak´a data oˇcek´avat a provede pˇr´ısluˇsn´e pˇretypov´an´ı. Na samotn´em konci stoj´ı funkce tm send data packet(), kter´a poˇsle paket na definovanou adresu s pˇr´ısluˇsn´ym obsahem.
int send_data_packet(int sckt, struct msghdr *msg, int ID, void *data, int datalen,int flags);
Pˇr´ıklad: funkce recvmsg vypln´ı strukturu, na kterou odkazuje ukazatel hdr a ta bude obsahovat informace o odesilateli. Chceme-li ihned odpovˇedˇet odesilateli, ˇze nˇeco nen´ı v poˇr´adku, staˇc´ı zavolat send data pacet(sckr, hdr, -1, NULL, 0, 0). Funkce odeˇsle paket s ID -1 (ERR) na adresu odesilatele. Poˇzadovan´ y datov´ y tok pak generujeme jednoduˇse tak, ˇze v pravideln´ ych intervalech zas´ıl´ame pakety dan´e velikosti. Knihovna obsahuje dalˇs´ı pomocn´e funkce, ale ty nejsou d˚ uleˇzit´e k pochopen´ı fungov´an´ı aplikace. Na u ´ pln´em konci stoj´ı funkce tm sendstream(), kter´a zuˇzitkov´av´a vˇsechny dˇr´ıve uveden´e funkce k zasl´an´ı poˇzadovan´eho datov´eho toku. Ve struktuˇre req jsou obsaˇzeny vˇsechny parametry. Tato funkce poˇc´ıt´a s t´ım, ˇze m˚ uˇze b´yt v pˇr´ıpadˇe serveru vol´ana ve v´ıce vl´aknech. 16
ˇ ´ VRSTVA - TM SOCKETS.H 2.4. S´ITOV A
´ KAPITOLA 2. ANALYZA
int tm_sendstream(int serverSocket,struct sockaddr_in *to, stream_request_t *req)
Struktura sockaddr in je jiˇz zn´am´a, struktura stream request t je uk´az´ana n´ıˇze.
typedef struct stream_request_ { char username[USERNAME_L]; char password[PASSWORD_L]; char mode; // ’u’ ... upload // ’x’ ... dual
: client -> server : client <-> server
// ’d’ ... download : client <- server uint32_t
packet_size;
uint32_t
packet_delay;
uint32_t
packet_num; //number of packets to be sent
char packet_data; // 0... random data // f... file - filename must be specified char filename[FILENAME_L]; uint32_t bandwidth;
// in bytes per second
uint32_t
stream_dur; // if packet_num == 0 packet will be sent for stream_dur sec
uint32_t
stream_size; // if packet_num == 0 && stream_dur==0 stream_size bytes wi
char
single;
} stream_request_t;
Kaˇzd´y paket, kter´ y aplikace vys´ıl´a, obsahuje hlaviˇcku typu packet header t, coˇz je struktura
typedef struct packet_header_ { int32_t id; // packet ID struct timeval timestamp; // time at packet’s departure } 17
ˇ ˇ - TIMER.H 2.5. CASOVA C
´ KAPITOLA 2. ANALYZA
packet_header_t;
timestamp obsahuje syst´emov´ y ˇcas v okamˇziku odesl´an´ı paketu. Je potˇreba si uvˇedomit, ˇza paket str´av´ı nˇejak´y ˇcas v s´ıt’ov´em subsyst´emu j´adra operaˇcn´ıho syst´emu, takˇze ˇcas re´aln´eho odesl´an´ı paketu - tady ˇcasu, kdyˇz paket opouˇst´ı s´ıt’ovou kartu - se liˇs´ı od ˇcasu v hlaviˇcce paketu. Tento rozd´ıl m˚ uˇze ˇcinit des´ıtky mikrosekund. Hlaviˇckou se mysl´ı hlaviˇcka packet header t pˇridan´a na aplikaˇcn´ı u ´ rovni, nikoliv hlaviˇcka IP ˇci UDP protokolu. V´yznam hodnoty ID paketu jiˇz byl pops´an, jiˇz staˇc´ı jen doplnit hodnoty tak, jak jsou definov´any v hlaviˇckov´em souboru tm sockets.h.
#define REQ 0 #define DEN -2 #define ERR -1 #define ACK -3 #define FIN -5
2.5
ˇ Casovaˇ c - timer.h
Na kvalitˇe ˇcasovaˇce pˇr´ımo z´avis´ı kvalita generovan´ ych datov´ ych tok˚ u a tud´ıˇz i pˇresnost mˇeˇren´ı. Jelikoˇz ˇz´adn´ y ze standardn´ıch syst´emov´ ych ˇcasovaˇc˚ u nedosahuje poˇzadovan´eho rozliˇsen´ı a pˇresnosti, bylo nutn´e implementovat vlastn´ı. Nejpˇresnˇejˇs´ı metodou se uk´azala tzv. busy loop, ˇcili smyˇcka, kter´e je v cyklu, dokud’ nen´ı splnˇena dan´a podm´ınka - vyprˇsel dan´ y ˇcas. Pˇr´ıklad busy loop:
while(!isolder(&now,&future)) { gettimeofday(&now,NULL); }
18
2.6. VSTUPN´I PARAMETRY - PARSER.H
´ KAPITOLA 2. ANALYZA
Periodicky se odmˇeˇruje nastaven´y ˇcas a smyˇcka se ukonˇc´ı aˇz po splnˇen´ı podm´ınky. Tato metoda funguje v´ ybornˇe, pokud je generov´an pouze jeden datov´ y tok. Smyˇcka totiˇz zcela logicky pohlcuje vˇetˇsinu v´ykonu procesoru a pokud je tˇechto smyˇcek puˇsteno v´ıce najendou, doch´az´ı k nepˇresnostem. Tento d˚ uvod a tak´e pˇredpoklad, ˇze pro vˇetˇsinu mˇeˇren´ych datov´ ych tok˚ u bude ˇcekac´ı ˇcas pomˇernˇe vysok´ y, byl pro tyto vyˇsˇs´ı ˇcasy implementov´an dalˇs´ı ˇcasovaˇc, kter´y pˇri ˇcek´an´ı nech´av´a procesor odpoˇcinout - vyuˇz´ıv´a vol´an´ı usleep(), coˇz je usp´an´ı vl´akna na poˇzadovan´ y poˇcet mikrosekund. Tento ˇcasovaˇc je m´enˇe pˇresn´y, ale po zavaden´ı korekce, kdy je porovn´ana nastaven´a a skuteˇcn´a ˇcekac´ı doba, dosahuje dobr´ych v´ysledk˚ u. N´asleduje pˇr´ıklad debugovac´ıho v´ ypisu ˇcasovaˇce s autokorekc´ı.
set=8000 measure=8369 rozdil=-369 should=7631 set=7631 measure=8021 rozdil=21 should=7610 set=7610 measure=8001 rozdil=1 should=7609
Set ... nastaven´a hodnota, measure ... zmˇeˇren´a hodnota, should ... doporuˇcen´e nastaven´ı ˇcasovaˇce pro dalˇs´ı iteraci. Pokud jde o klienta, vˇzdy je pouˇzita busy loop, v pˇr´ıpadˇe serveru jen pokud jde ˇ o velmi kr´atk´e ˇcekac´ı ˇcasy. Pro dlouh´e ˇcekac´ı doby je pouˇzita druh´a metoda. Casovaˇ c je implementov´an v knihovnˇe timer, uˇzivatelsk´e funkce jsou definov´any v hlaviˇckov´em souboru timer.h. Knihovna d´ale obsahuje funkce pro pr´aci s ˇcasem a strukturou timeval, kterou pouˇz´ıvaj´ı jako windows, tak linuxov´e knihovny. Pokud by n´aroky na pˇresnost byly vyˇsˇs´ı, neˇz je standardn´ı linuxov´e j´adro schopno zajistit, lze pouˇz´ıt nˇekter´e ze speci´aln´ıch realtime (RT) jader, popˇr´ıpadˇe pˇr´ımo RT distribuci (napˇr´ıklad ELinos).
2.6
Vstupn´ı parametry - parser.h
Parametry jsou pˇred´av´any z pˇr´ıkazov´e ˇr´adky. Na zpracov´an´ı parametr˚ u byla pouˇzita knihovna getopt respektive jej´ı nadstavba getopt long. Tato knihovna je ˇs´ıˇrena pod 19
2.6. VSTUPN´I PARAMETRY - PARSER.H
´ KAPITOLA 2. ANALYZA
licenc´ı GNU Lesser General Public License[4], kter´a pˇri dynamick´em linkov´an´ı nijak neomezuje autorsk´a pr´ava autora aplikace, kter´a tuto knihovnu pouˇz´ıv´a. Pouze pˇri statick´em slinkov´an´ı se na v´yslednou aplikaci automaticky vztahuje licence GPL a vˇsechny pr´avn´ı aspekty z tohoto plynouc´ı. Knihovna um´ı jednoˇse pracovat s kr´atk´ ymi i dlouh´ ymi n´azvy parametr˚ u, d´ale lze nastavit, zda-li m´a dan´ y parametr povinnou hodnotu ˇci nikoliv. Pouˇzit´ı je velmi jednoduch´e - definice vstupn´ıch parametr˚ u je zˇrejm´a z n´asleduj´ıc´ıho pˇr´ıkladu:
static struct option long_options[] = { /* These options set a flag. */ {"verbose", no_argument,
&verbose_flag, 1},
{"brief",
no_argument,
&verbose_flag, 0},
{"server",
no_argument,
0, ’s’},
{"client",
required_argument, 0, ’c’},
{0, 0, 0, 0} };
Na pˇr´ıkladu vid´ıme vˇsechny moˇznosti vstupn´ıch parametr˚ u. Parametry --verbose a --brief nastavuj´ı hodnotu promˇenn´e verbose flag. Parametr --server , -s jsou identick´e a nepˇredpokl´ad´a se ˇz´adn´a dalˇs´ı hodnota. Za parametrem --client ˇci -c mus´ı n´asledovat hodnota. Knihovna tuto hodnotu nekontroluje, je potˇreba ji d´ale oˇsetˇrit. Pomoc´ı dalˇs´ı knihovn´ı funkce se proch´az´ı pole argument˚ u argv[], kter´e obsahuje argumenty z pˇr´ıkazov´e ˇr´adky. Nad touto knihovnou je postavena uˇzivatelsk´a knihovna parser, kter´a zpracov´av´a vstupn´ı parametry, prov´ad´ı kontrolu spr´ avnosti parametr˚ u - rozsahy, hodnoty. Pokud nejsou nˇekter´e hodnoty nastaveny uˇzivatelem, jsou pouˇzity v´ ychoz´ı hodnoty napˇr´ıklad velikost datov´eho paketu (1450B), port (5000), s´ıt’ov´e rozhran´ı (INADDR ANY), d´elka datov´eho toku (10s). Hodnota 1450B nen´ı zvolena n´ ahodou. Modern´ı ethernetov´e s´ıtˇe maj´ı totiˇz hodnotu MTU (Maximum transmission unit) 1500B. MTU je velikost paketu, kter´ y projde pˇres s´ıt’ov´e zaˇr´ızen´ı (gateway, router, bridge...), aniˇz by byl IP paket fragmentov´an - rozdˇelen na v´ıce ˇc´ast´ı, z nichˇz kaˇzd´a je menˇsi neˇz MTU. Pˇri fragmentaci se zvyˇsuje pravdˇepodobnost ztr´aty paketu, nebot’ pˇri ztr´atˇe jedn´e z jeho ˇc´ast´ı je zahozen cel´y (plat´ı jen v pˇr´ıpadˇe UDP). Pokud od hodnoty MTU 1500B odeˇcteme velikosti 20
2.6. VSTUPN´I PARAMETRY - PARSER.H
´ KAPITOLA 2. ANALYZA
hlaviˇcek vˇsech niˇzˇs´ıch protokol˚ u, dost´av´ame se na hodnotu okolo 1450B - ne vˇsechny hlaviˇcky mus´ı b´yt v paketu pˇr´ıtomny. Hodnota 1450B je nejvyˇsˇs´ı moˇzn´a velikost paketu, kter´ y na standardn´ı s´ıti projde bez fragmentace. Minim´aln´ı hodnotu MTU pˇrenosov´e cesty lze zjistit tak, ˇze v hlaviˇcce IP protokolu nastav´ıme volbu DF (Don’t Fragment). Kaˇzd´e zaˇr´ızen´ı na pˇrenosov´e cestˇe, jehoˇz MTU je menˇs´ı neˇz velikost paketu tento paket nam´ısto fragmentace skartuje a vyˇsle zpˇet ICMP zpr´avu ICMP ”Destination Unreachable (Datagram Too Big)”. Zaˇcneme-li na mal´e velikosti paketu a postupnˇe ji zvyˇsujeme, pak snadno nalezneme MTU cel´e trasy. Tato technika je pˇresnˇeji pops´ana v [6]. Dalˇs´ı funkc´ı knihovny je v´ypoˇcet hodnot ze zadan´ ych parametr˚ u. Zad´a-li napˇr´ıklad uˇzivatel poˇzadovan´ y datov´ y tok a nic jin´eho, pouˇzije se v´ychoz´ı velikost paketu (1450B) pro v´ ypoˇcet rozestupu mezi pakety. Server tak vˇzdy dost´av´a informace stejn´eho typu a nemus´ı jiˇz ˇz´adn´e dalˇs´ı v´ypoˇcty prov´adˇet. Posledn´ı d˚ uleˇzitou funkc´ı knihovny je generov´an´ı hash hodnoty ze zadan´eho hesla. Jak jiˇz bylo ˇreˇceno, pokud to jen bylo moˇzn´e, bylo dodrˇzeny n´azvy parametr˚ u testovac´ıho software iperf[5]. Mnoho jich bylo vypuˇstˇeno, protoˇze se t´ykaly jen protokolu TCP, dalˇs´ı zabrali jejich m´ısto, protoˇze iperf nˇekter´e vlastnosti v˚ ubec nepodporuje.
Obr´ azek 2.5: iperf - http://dast.nlanr.net/Projects/Iperf
21
˚ 2.7. SEZNAM VSTUPN´ICH PARAMETRU
2.7
´ KAPITOLA 2. ANALYZA
Seznam vstupn´ıch parametr˚ u s
l
Popis
-s
- -server
serverov´ y m´od
-
-y
- -daemon
daemon m´od
-
-r
- -root
exkluzivn´ı m´od - do ukonˇcen´ı aktu´aln´ıho
-
mˇeˇren´ı budou ostatn´ı ˇz´adosti odm´ıt´any. -c host
- -client
klientsk´y m´od - je potˇreba zadat adresu ser-
-
veru, na kter´ y se m´a klient pˇripojit. Pokud nen´ı zad´an port (-p - -port), pouˇzije se v´ychoz´ı hodnota -i #
- -interval
interval, ve kter´em jsou pravidelnˇe vypi-
0
sov´any reporty -l #
- -len
velikost paketu v bytech
1450
-p #
- -port
port, na kter´em beˇz´ı server
5000
-p #
- -port
port, na kter´ y se pˇripojuje klient
5000
-b #
- -bandwidth
datov´ y tok v bytech za vteˇrinu
-w #
- -win
-B #
- -bind
velikost pˇr´ıj´ımac´ıho bufferu dle syst´emu s´ıt’ov´e zaˇr´ızen´ı, na kter´em m´a aplikace na1 Mbs
1 Mbs
slouchat -d
- -dualtest
po pˇrijet´ı dat za serveru vyˇsle klient sv˚ uj tes-
-
tovac´ı datov´ y tok -u
- -upload
mˇeˇren´ı pouze ve smˇeru klient -¿ server
-
-n #
- -num
poˇcet paket˚ u datov´eho toku
-
-t #
- -time
ˇcas v sekund´ach - d´elka datov´eho toku
10
-T #
- -tout
ˇcas v sekund´ach - timeout pˇri komunikaci se
10
serverem -D #
- -delay
ˇcas v milissekund´ach - rozestup mezi pakety
-
-F fil
- -file
jm´eno souboru pro reprezentativn´ı datov´ y
-
tok -C fil
- -file
soubor, do kter´eho se m´a pˇripojit CSV re-
-
port -a user
- -username
uˇzivatelsk´e jm´eno
-
-x pass
- -password
heslo
22
´ KAPITOLA 2. ANALYZA
2.8. EXTRACTOR.H Pˇr´ıklad :
[bob@bob src]$ ./udptool --server --port 15000 -B 147.32.104.83
2.8
extractor.h
Tato knihovna obsahuje funkce, kter´e z poˇzadovan´eho souboru naˇc´ıtaj´ı data a tato kop´ıruj´ı do bufferu. Data se naˇc´ıtaj´ı postupnˇe aˇz ke konci souboru. Pokud je poˇzadov´ano v´ıce dat, neˇz zb´yv´a do konce souboru, zaˇcne se znovu od zaˇc´atku.
2.9
Hash - md5.h
Pro hashovan´ı hesla byla pouˇzita hashovac´ı funkce MD5 [8], kterou v knihovnˇe md5 podle uveden´eho RFC 1321 implementoval L. Peter Deutsch (
[email protected]) a dal ji volnˇe k pouˇzit´ı pˇri zachov´an´ı urˇcit´ych podm´ınek, jako je napˇr´ıklad zm´ınka o autorovi a nezasahov´an´ı do k´odu. Sama funkce MD5 je jiˇz pˇrekon´ana, pˇresto pro naˇse pouˇzit´ı postaˇcuje.
2.10
Reporty - reporter.h
Tento hlaviˇckov´ y soubor popisuje funkce, kter´e se pouˇz´ıvaj´ı k vyhodnocov´an´ı pˇr´ıchoz´ıch datov´ ych tok˚ u. V´ysledn´ y report v pˇr´ıpadˇe du´aln´ıho m´odu zas´ıl´a server klientovi. Zastˇreˇsuj´ıc´ı funkce data stream eval() vyhodnocuje vlastn´ı datov´ y tok. Jako vstup slouˇz´ı ukazatel
23
´ KAPITOLA 2. ANALYZA
2.11. SERVER - TM SERVER.H
na hlaviˇcku paketu - packet header t. Funkce vyhodnot´ı spoˇzdˇen´ı paketu, poˇc´ıt´a ztracen´e pakety a pakety mimo poˇrad´ı. Hlaviˇckov´ y soubor d´ale definuje funkce na pˇrevod ˇc´ıseln´ych promˇenn´ych na textov´ y HEX form´at.
2.11
Server - tm server.h
Serverov´a ˇc´ast aplikace je urˇcena k provozu pouze na operaˇcn´ım syst´emu Linux. Vyuˇz´ıv´a vl´akna dle POSIX specifikace pro zas´ılan´ı datov´ ych tok˚ u v´ıce klient˚ um souˇcasnˇe. Jelikoˇz vl´aknu lze pˇredat pouze obecn´y ukazatel (void *), obsahuje knihovna podp˚ urn´e datov´e struktury a funkce, kter´e umoˇzn´ı pˇredat vytv´aˇren´emu vl´aknu informace o datov´em toku. Pro kaˇzd´eho klienta, ˇz´adaj´ıc´ıho o testovac´ı datov´ y tok je tedy vytvoˇreno vl´akno, na jehoˇz v´ysledky ovˇsem hlavn´ı vl´akno neˇcek´a. Vl´akno samotn´e nepˇrij´ım´a pakety od klienta. M´ısto toho kontroluje sd´ılen´e datov´e struktury, napˇr´ıklad seznam pˇrijat´ ych servisn´ıch paket˚ u. Pˇr´ıstup ke sd´ılen´ym struktur´am je ˇr´ızen pomoc´ı mutex˚ u. Vl´akno po odesl´an´ı dat a paketu DEN ˇcek´a na paket ACK, po nˇem odes´ıl´a paket FIN a opˇet ˇcek´a na ACK. Server m˚ uˇze obsluhovat teoreticky neomezen´y poˇcet klient˚ u, jedin´y limit je pamˇet’ a maxim´aln´ı poˇcet souˇcasnˇe spuˇstˇen´ych vl´aken, kter´e dovol´ı spustit operaˇcn´ı syst´em. Pokud si odmysl´ıme vys´ılac´ı vl´akna, funguje ˇctec´ı ˇc´ast serveru i klienta jako asychronn´ı stavov´ y automat, kter´y je taktov´an pˇr´ıchody paket˚ u na socket. Automat kaˇzd´y paket vyhodnot´ı a provede pˇr´ısluˇsnou akci. Po ukonˇcen´ı akce se opˇet ˇcek´a na paket. U klientsk´e ˇc´asti akce blokuje, ˇcili klient nem˚ uˇze zpracov´avat dalˇs´ı paket. Server naopak kaˇzdou sloˇzitˇejˇs´ı akci pouˇst´ı ve vl´aknˇe, takˇze t´emˇeˇr ihned m˚ uˇze zpracov´avat dalˇs´ı paket.
24
´ KAPITOLA 2. ANALYZA
2.12. KLIENT - TM CLIENT.H
2.12
Klient - tm client.h
V pˇredchoz´ıch ˇc´astech byla ˇcinnost klientsk´e ˇc´asti aplikace pops´ana podrobnˇe a z implementaˇcn´ıho hlediska nepˇrid´av´a nic nov´eho. Tyto ˇc´asti aplikace jsou oddˇeleny pˇredevˇs´ım proto, aby se zjednoduˇsila kompilace pod obˇema operaˇcnimi syst´emy. Pokud by mˇel syst´em bˇeˇzet jen pod operaˇcn´ım syst´emem Linux, nebylo by toto oddˇelen´ı v˚ ubec potˇreba. Klientsk´a ˇc´ast ma pˇreci jen jednu odliˇsnost a to je voliteln´ y timeout, po jehoˇz pˇrekroˇcen´ı bude spojen´ı vyhodnoceno jako ztracen´e a klient ukonˇcen.
Obr´ azek 2.6: Sn´ımek termin´alu
25
´ 2.13. UPRAVY PRO WINDOWS
2.13
´ KAPITOLA 2. ANALYZA
´ Upravy pro Windows
Jak jiˇz bylo ˇreˇceno, pro kompilaci pod obˇema syst´emy nebylo potˇreba velk´e mnoˇzstv´ı u ´ prav. Pˇri kompilaci je serverov´a ˇc´ast skryta, zb´ yvaj´ı tedy jen rozd´ıly mezi knihovnami socket.h a winsock.h. Aˇc se z´akladn´ı funkce jmenuj´ı r˚ uznˇe (viz strana 13 - 2.4.1), jejich funkce je podobn´a. Postup pro kompilaci pod operaˇcn´ım syst´emem Windows bude pops´an v z´avˇereˇcn´ych kapitol´ach.
26
Kapitola 3 Pouˇ zit´ı
Aplikace je implementov´ana, ukaˇzme si jej´ı pouˇzit´ı a chov´an´ı v re´aln´e situaci. Spust’me serverovou aplikaci na linuxov´em stroji pˇr´ıkazem
[bob@bob src]$ ./udptool --server --port 10000 -B 10.0.0.139
Server se spustil a naslouch´a na rozhran´ı 147.32.104.83, portu 15000. Server je ted’ pˇripraven pro pˇr´ıjem poˇzadavk˚ u od klient˚ u. Spust’me tedy klient.
[bob@localhost src]$ ./udptool -c 10.0.0.139 -p 10000 -l 1900 -t 5 -i 1 --username bob --password threepo -t 5 -i 1
V´yznam parametr˚ u je zˇrejm´ y, pˇresto zopakujeme, co vlatnˇe po programu ˇz´ad´ame. Program se m´a spustit v klientsk´em m´odu a pˇripojit se k serveru beˇz´ıc´ımu na IP adrese 10.0.0.139. M´a zaslat poˇzadavek na datov´ y tok, kter´ y bude obsahovat pakety velk´e 1900B. Uˇzivatelsk´e jm´eno je pak bob, heslo 453sdfs. D´ale sdˇelujeme, ˇze chceme kaˇzdou vteˇrinu zobrazovat pr˚ ubˇeh mˇeˇren´ı. Server obdrˇzel poˇzadavek, klient byl u ´spˇeˇsnˇe ovˇeˇren a datov´ y tok tak mohl b´ yt zasl´an. Pod´ıvejme se na klientskou obrazovku. 27
ˇ ´I KAPITOLA 3. POUZIT [bob@localhost src]$ ./udptool -c 10.0.0.139 -p 10000 --username bob --password threepo -l 1900 -t 5 -i 1 -----------------------------------------Connecting to 10.0.0.139:10000 Timeout set to 5 sec Request username
: bob
pckt size
: 1900
pckt delay : 3800 pckt data
: 0
bandwidth
: 500000
stream dur : 5 -----------------------------------------Interval
Transfered
Bandwidth
Jitter
00-01s
0.00 kB
-0.00kBs
0.000ms
0|
01-02s
491.00 kB
487.82kBs
0.015ms
0| 266
02-03s
981.00 kB
488.06kBs
0.015ms
0| 530
03-04s
1471.00 kB
488.14kBs
0.015ms
0| 794
04-05s
1961.00 kB
488.18kBs
0.015ms
0|1058
DEN from 10.0.0.139:10000 lastID=1317 -----------------------------------------[Server -> Client] -----------------------------------------Sent packets: 1317 Recv packets: 1317 Lost packets: 0 Pckt loss : 0.00 % Duplicated
: 0
Out of order: 0 Jitter
: 15 usec
Avg delay
: 3799 usec
Avg ping
: 15 usec
Duration
: 5.001 s
Transfered
: 2441 kB 28
Lost|Total 1
ˇ ´I KAPITOLA 3. POUZIT Speed
: 488.216 kBs (499933 Bs)
Posilam FIN ACK [bob@localhost src]$
V horn´ı ˇc´asti obrazovky vid´ıme informace o poˇzadovan´em datov´em toku, ve stˇredn´ı ˇc´asti pr˚ ubˇeˇzn´e v´ysledky mˇeˇren´ı a nakonec souhrn´e informace. Jelikoˇz server i klient v tomto pˇr´ıpadˇe beˇzely na stejn´em stroji, ˇzadn´ y paket se neztratil. Log serveru pak vypad´a takto:
06:40:49 bob udptool[2241]: Connection from 127.0.0.1:32788, bob - access granted 06:40:54 bob udptool[2241]: ACK from 127.0.0.1:32788 06:40:55 bob udptool[2241]: ACK from 127.0.0.1:32788 06:40:56 bob udptool[2241]: Client 127.0.0.1:32788 disconnected
Ukaˇzme si, jak vypad´a v´ ystup aplikace na typick´e asymetrick´e s´ıt´ı - v tomto pˇr´ıpadˇe ADSL.
-----------------------------------------[Client -> Server] -----------------------------------------Sent packets: 281 Recv packets: 279 Lost packets: 2 Pckt loss : 0.71 % Duplicated
: 0
Out of order: 0 Jitter
: 443 usec
Avg delay
: 14423 usec
Avg ping
: 587128 usec
Duration
: 4.010 s
Transfered
: 271 kB 29
ˇ ´I KAPITOLA 3. POUZIT
3.1. USERADD Speed
: 67.581 kBs (69326 Bs)
-----------------------------------------[Server -> Client] -----------------------------------------Sent packets: 281 Recv packets: 138 Lost packets: 143 Pckt loss : 50.89 % Duplicated
: 0
Out of order: 0 Jitter
: 12630 usec
Avg delay
: 37619 usec
Avg ping
: 569456 usec
Duration
: 5.154 s
Transfered
: 133 kB
Speed
: 25.959 kBs (26582 Bs)
Posilam FIN ACK
Vid´ıme, ˇze na cestˇe server - klient se ztratilo 50 % paket˚ u a pˇrenosov´a rychlost byla 26 kB/s, coˇz je 208kb/s, pˇriˇcemˇz teoretick´a maxim´aln´ı rychlost linky byla 256kb/s.
3.1
useradd
Souˇc´ast´ı aplikace je n´astroj useradd, kter´ y slouˇz´ı k pˇrid´av´an´ı uˇzivatel˚ u.
[bob@localhost useradd]$ ./useradd Usage useradd USER [filename]
Aplikace jako paremetry pˇrij´ım´a jm´eno uˇzivatele, kter´eho pˇrid´av´ame a cestu k souboru s hesly. useradd nekontroluje jiˇz zapsan´e uˇzivatele, pˇr´ıpadn´e duplicity ˇreˇs´ı uˇzivatel. Jde
30
´ ´ SKRIPT 3.2. TOOL.SH - UKAZKOV Y
ˇ ´I KAPITOLA 3. POUZIT
o obyˇcejn´y textov´ y soubor, kter´ y je moˇzno editovat v libovoln´em editoru a uˇzivatele odstranit. N´astroj beˇz´ı pod Linuxem i Windows.
3.2
tool.sh - uk´ azkov´ y skript
Jak jiˇz bylo zm´ınˇeno v u ´ vodu, byla aplikace navrˇzena tak, aby se klient dal pouˇz´ıvat v uˇzivatelsk´ ych skriptech.
#!/bin/sh ./udptool -c $1 -p $2 -a bob -x threepo -b $3 -t 2 -u | grep Lost
Uveden´y skript tool.sh spust’me s parametry 10.0.0.139 10000 40000. Klient se pˇripoj´ı na IP adresu 10.0.0.139, port 10000 a bude pos´ılat na server datov´ y tok o rychlosti 400 000 bajt˚ u za sekundu. Pˇr´ıkaz grep zajist´ı, ˇze se n´am vyp´ıˇse pouze ˇr´adek se ztracen´ymi pakety.
[bob@localhost src]$ ./tool.sh 10.0.0.139 10000 40000 Lost packets: 15 Pckt loss : 26.45 % [bob@localhost src]$
31
Kapitola 4 Kompilace
4.1
Linux
Pro zkompilov´ani aplikace ze zdrojov´ ych k´od˚ u potˇrebujeme n´asleduj´ıc´ı software:
• autoconf • automake • gcc
Aplikace vyˇzaduje knihovnu libpthread.so, kter´a je ovˇsem souˇc´ast´ı drtiv´e vˇetˇsiny distribuc´ı. Nejdˇr´ıve je tˇreba spustit skript configure a pot´e jiˇz staˇc´ı jen make popˇr´ıpadˇe make all. V´ysledn´e spusstilen´y bin´arn´ı soubor udptool se nach´az´ı v adres´aˇri src.
32
4.2. WINDOWS
4.2
KAPITOLA 4. KOMPILACE
Windows
Pro kompilaci ze zdrojov´ ych k´od˚ u potˇrebujeme bal´ık n´astroj˚ u MinGW - Minimalist GNU for Windows(http://www.mingw.org/, kter´ y obsahuje vˇsechny potˇrebn´e n´astroje (ˇcili ekvivalenty v´ yˇse uveden´ych linuxov´ ych n´astroj˚ u) a knihovny. ´ Uvodn´ ı krok je stejn´ y - v konzoli MSYS spust´ıme configure. Nyn´ı je potˇreba v soubotu src/Makefile nahradit odkaz na knihovnu pthread (ˇretˇezec -lpthread) odkazem na knihovnu WinSock2 (-lws2 32). A nyn´ı jiˇz opˇet staˇc´ı make.
33
Kapitola 5 Z´ avˇ er
Pˇri implementaci software, kter´ y byl c´ılem diplomov´e pr´ace, doch´azelo k spˇresˇ nov´an´ı poˇzadavk˚ u. V´yhodou jsou jasn´e poˇzadavky a t´ım i mantinely, ve kter´ ych jsem se pohyboval. Nev´ yhodou pak sloˇzitˇejˇs´ı pˇr´ıd´av´an´ı nov´e funkˇcnosti, se kterou nebylo v n´avrhu od poˇc´atku poˇc´ıt´ano. Vˇetˇsina poˇzadavk˚ u byla splnˇena, ale v´ ysledky budou zˇrejm´e aˇz po delˇs´ıch zkuˇsenostech zadavatele. Vytvoˇren´y software nen´ı naprostou novinkou, nebot’ vznikl na z´akladˇe nespokojenosti s jin´ ymi aplikacemi, jejichˇz dobr´e vlastnosti mˇel pˇrevz´ıt a pˇr´ıdat dalˇs´ı, kter´ymi v t´e dobˇe existuj´ıc´ı aplikace nedisponovaly. Poˇc´ıt´am s t´ım, ˇze pˇri pouˇz´ıv´an´ı vyplynou dalˇs´ı poˇzadavky a r´ad tuto aplikaci uprav´ım tak, aby d´al dobˇre slouˇzila sv´emu u ´ˇcelu.
34
Literatura
[1] User datagram protocol. http://en.wikipedia.org/wiki/User Datagram Protocol. [2] Winsock reference. http://msdn2.microsoft.com/en-us/library/ms741416.aspx. [3] sys/socket.h - internet protocol family. http://www.opengroup.org/pubs/online/ 7908799/xns/syssocket.h.html, 1997. [4] Gnu lesser general public license. http://www.gnu.org/licenses/lgpl.html, 1999. [5] Mark
Gates,
Ajay
Tirumala,
J.
D.
K.
G.
Iperf user docs.
http://dast.nlanr.net/Projects/Iperf/iperfdocs 1.7.0.php, 2003. [6] Mogul, J., and Deering, S. Path mtu discovery. RFC 1191 (1990). [7] Postel, J. User datagram protocol. RFC 768 (1980). [8] Rivest, R. The md5 message-digest algorithm. RFC 1321 . [9] Sollins, K. The tftp protocol (revision 2). RFC 1350 (1992). [10] Srisuresh, P., and Egevang, K. Traditional ip network address translator (traditional nat). RFC 3022 (1991). [11] Stevens, W. R. UNIX Network Programming: Networking APIs – Sockets and XTI, vol. 1. Prentice Hall;, 1997.
35
Pˇ r´ıloha A CD s aplikac´ı
K t´eto pr´aci je pˇriloˇzeno CD, na kter´em jsou uloˇzeny zdrojov´e k´ody, manu´al a verze aplikace pro vˇsechny podporovan´e syst´emy - Windows ˇrady NT (NT, 2000, XP) a Linux.
• bin win32 linux • src • data • dip
bin zkompilovan´e spustiteln´e soubory win32 linux src zdrojov´e k´ody data soubory pro otestov´an´ı reprezentativn´ıch datov´ych tok˚ u dip tato pr´ace ve form´atu PDF I