rapp
[packetlaptime.git] / rapport / rapport.tex
blob804c555fe033f16157612dfa15d3201ef306910b
1 \documentclass[a4paper, 12pt]{article}
2 \usepackage[swedish]{babel}
3 \usepackage[utf8]{inputenc}
4 \usepackage{verbatim}
5 \usepackage{graphicx}
6 \usepackage{fancyhdr}
8 % vars
9 \def\dokumentTyp{Laborationsrapport}
11 \def\preTitle{Laboration 2}
12 \def\title{Kommunikationsringar}
14 \def\namn{Anton Johansson, Victor Zamanian}
15 \def\username{dit06ajn, dit06vzy}
16 \def\mail{dit06ajn@cs.umu.se, dit06vzy@cs.umu.se}
18 \def\handledareEtt{Thomas Johansson (thomasj@cs.umu.se)}
19 \def\inst{Datavetenskap}
20 \def\kurs{Datakommunikation och Internet, HT-07}
22 \def\pathToCode{/home/dit06/dit06vzy/edu/doi/lab2/}
23 \def\pathToApi{http://www.cs.umu.se/$\sim$dit06ajn/doi/}
25 \begin{document}
26 \begin{titlepage}
27 \thispagestyle{empty}
28 \begin{small}
29 \begin{tabular}{@{}p{\textwidth}@{}}
30 UMEÅ UNIVERSITET \hfill \today \\
31 Institutionen för \inst \\
32 \dokumentTyp \\
33 \end{tabular}
34 \end{small}
35 \vspace{10mm}
36 \begin{center}
37 \LARGE{\preTitle} \\
38 \huge{\textbf{\kurs}} \\
39 \vspace{10mm}
40 \LARGE{\title} \\
41 \vspace{15mm}
42 \begin{large}
43 \begin{tabular}{rl}
44 \textbf{Namn} & \namn \\
45 \textbf{Användarnamn} & \username \\
46 \textbf{E-mail} & \mail \\
47 \textbf{Sökväg} & \texttt{\pathToCode} \\
48 \end{tabular}
49 \end{large}
50 \vfill
51 \large{\textbf{Handledare}}\\
52 \mbox{\large{\handledareEtt}}
53 \end{center}
54 \end{titlepage}
56 \pagestyle{fancy}
57 \rhead{\today}
58 \lhead{\footnotesize{\namn}}
59 \chead{}
60 \lfoot{}
61 \cfoot{}
62 \rfoot{}
64 \tableofcontents
65 % No indrag
66 \setlength{\parindent}{0pt} % but some space
67 \setlength{\parskip}{10pt}
68 \newpage
70 % start pagenumbering
71 \rfoot{\thepage}
72 \pagenumbering{arabic}
73 % VAD SOM SKA TAS UPP
74 % # Diskussioner kring din lösning, finns utrymme för optimering?
75 % # Utförliga och välkommenterade testkörningar
77 \section{Problembeskrivning}
80 Problemspecifikationen finns i original på:\\
81 \verb!http://www.cs.umu.se/kurser/5DV065/HT07/ou2/index.html!\\
83 \section{Åtkomst}
84 Katalogen som källkoden till vårt program ligger i är:\\
85 \pathToCode
87 \section{Systembeskrivning}
88 % contructPacket(); Tillverkare ett paket, olika beroende på vilken
89 % protokolltyp man använder.
91 Varje nod slumpar fram ett unikt nummer. Detta nummer skickas vidare
92 till anslutande nod i fas ett. När noder tar emot meddelande i denna
93 fas så jämförs nodens egna nummer med det som kommer i meddelandet. Om
94 ankomande nummer är större än nodens egna så skickas detta nummer
95 vidare istället för nodens egna genererade nummer. När en nod får
96 tillbaka sitt egna nummer så är ringen sluten och denna nod sätts att
97 vara den ''utvalda''. Efter det inleds fas två.
99 I fas två, börjar den utvalda noden att skicka ett meddelande, sedan
100 skickas detta meddelande runt i ringen ett specificerat antal
101 varv. För varje varv loggar en av noderna medeltiden av alla varv
102 hitintills och skriver denna data till en fil. När meddelandet har
103 skickats sina varv runt i ringen så skickas ett annat meddelande
104 ut. I denna fas avslutas varje instans av noderna i ringen.
106 Efter en avslutat körning finns resultatet av loggningen att läsa i en
107 fil \verb!lap-times-tcp.log! eller \verb!lap-times-udp.log! i
108 katalogen hos den instans som vid start valdes till ''logg-nod''. Log
109 filerna innehåller en rad för varje varv meddelandet skickats,
110 nodfilen har följande utseende:
111 \begin{verbatim}
113 Average time so far: 309001.600480144 ns, ID = 1921013324
114 Average time so far: 308998.699739948 ns, ID = 1921013324
115 Average time so far: 308997.899789979 ns, ID = 1921013324
117 \end{verbatim}
119 ID-numret på slutet av varje rad är det nummer som slumpats fram av
120 den utvalda noden. Genom att testa att det är samma ID efter varje
121 körning dras slutsatsen att enbart ett meddelande skickas runt i
122 ringen.
124 \begin{verbatim}
125 $ cat lap-times-tcp.log | grep 1921013324$ > greptest
126 $ diff lap-times-tcp.log greptest
128 \end{verbatim}
130 Körningen ovan är ett test som visar på att det är samma ID på varje
131 rad i filen (ID-numret i detta fallet var alltå 1921013324). Första
132 kommandot hämtar alla rader ur lap-times-tcp.log som avslutas med
133 1921013324 och lägger dessa i en ny fil "greptest". Andra kommandot visar
134 skillnaden mellan denna nya fil och den ursprungliga. Eftersom alla
135 rader innehåller samma ID så är det ingen skillnad mellan filerna, och
136 outputen från kommandot diff uteblir.
138 % Metoder:
139 % sendMessage();
140 % receiveMessage(); // Tråd
141 % interpretMessage(); // Tolkar meddelanden och kör kod beroende på
142 % innehåll (switch sats? Typ)
143 % logLapTimes() // Loggar varvtider till fil och stdout. Körs bara av
144 % utvald nod. Tråd?
145 \subsection{API}
146 Full API på implementationen finns på:\\
147 \pathToApi
149 \section{Testkörningar}
150 \subsection{Hjälpmedel}
151 För att testköra vår implementerade lösning använde vi oss av ''shell
152 script''. Ett shell script kan användas för att instruera en dator
153 till att göra många saker bara genom en enda körning av
154 scriptet. (''Script'': ''manus'' på engelska.)
156 Vi skapade två olika script för testkörningar av UDPNode respektive
157 TCPNode. Strukturen är likadan för båda script-typerna (TCP och UDP)
158 och går ut på att skapa fem stycken noder på en värddator och fem
159 noder på en annan värddator, där varje nod som skapas på den ena
160 värddatorn försöker upprätta kontakt med en nod som skapats på den
161 andra värddatorn. Våra UDP-script ser till exempel ut som följer:
163 runUDP-fyrkant.sh:
164 \begin{footnotesize}
165 \verbatiminput{../runUDP-fyrkant.sh}
166 \end{footnotesize}
168 runUDP-cirkel.sh:
169 \begin{footnotesize}
170 \verbatiminput{../runUDP-cirkel.sh}
171 \end{footnotesize}
173 TCP-scripten fungerar alltså på samma sätt: UDPNode ersätts med
174 TCPNode.
176 \subsection{Resultat}
177 De testkörningar som gjordes gick ut på att skapa olika många noder
178 och sedan jämföra varvtider när antalet noder ökar. Det antal noder
179 som testades var 5, 10, 20 och 50 noder.
181 Tabell: Varvtider för UDP- och TCP-ringar.
183 \begin{scriptsize}
184 \begin{tabular}{clll}
185 \textbf{Antal noder} & \textbf{Varvtider för UDP} & \textbf{Varvtider för TCP} \\
186 \hline
187 \textbf{5}
188 \textbf{10} & & \\
189 \textbf{20} & & \\
190 \textbf{50} & & \\
191 \end{tabular}
192 \end{scriptsize}
194 \section{Diskussion}
195 För att testa tillförlitligheten hos TCP- och UDP-noderna kördes
196 noderna utan begränsning på antal varv mellan olika datorer på skolan,
197 när körningen varit igång 30 min vardera utan att förlora ett enda
198 paket avbröts körningen manuellt. Slutsats om tillförlitligheten hos
199 TCP jämfört med UDP går i det här fallet alltså inte att
200 göra. Generellt sett så borde fler fel dock uppkomma hos en
201 UDP-implementation eftersom någon felkoll om paketen kommit fram inte
202 görs av protokollet.
204 Implementation av noderna är sådan att begreppen Klient och Server går
205 att använda samtidigt på noderna. När de skickar ett meddelande till
206 nästa nod i ringen kan man säga att Noden agerar som en Klient. När
207 noden skickat sitt meddelande går den över i ett annat läge och väntar
208 på inkommande meddelanden, nu agerar noden mer som en Server.
210 \section{Problem och reflektioner}
212 \newpage
213 \appendix
214 \section{Appendix Källkod}
216 \subsection{Node.java}
217 \begin{footnotesize}
218 \verbatiminput{../Node.java}
219 \end{footnotesize}
220 \newpage
222 \subsection{UDPNode.java}
223 \begin{footnotesize}
224 \verbatiminput{../UDPNode.java}
225 \end{footnotesize}
226 \newpage
228 \subsection{TCPNode.java}
229 \begin{footnotesize}
230 \verbatiminput{../TCPNode.java}
231 \end{footnotesize}
232 \newpage
234 \subsection{Makefile}
235 \begin{footnotesize}
236 \verbatiminput{../Makefile}
237 \end{footnotesize}
238 \newpage
240 \subsection{NodeInterface.java}
241 \begin{footnotesize}
242 \verbatiminput{../NodeInterface.java}
243 \end{footnotesize}
244 \end{document}