Δίκτυα Υπολογιστών - Προγραμματιστική Άσκηση

dargbeachΛογισμικό & κατασκευή λογ/κού

9 Ιουν 2012 (πριν από 5 χρόνια και 15 μέρες)

528 εμφανίσεις

ΗΤ335 : Γίκηςα Τπολογιζηών

Υειμεπινό εξάμηνο 2011
-
2012

Ππογπαμμαηιζηική άζκηζη

Γιδάζκοςζα: Μαπία Παπαδοπούλη


Ημεπομηνία παπάδοζηρ:

20/12/2011

Σπόπορ παπάδοζηρ
: Μέζσ submit

Σπόπορ εξέηαζηρ:

Θα δηεπθξηληζηεί


΢θνπόο ηεο εξγαζίαο απηήο είλαη ε εμνηθείσζε κε

δηθηπαθό πξνγξακκαηηζκό ζε
sockets, κε ζπιινγή δεδνκέλσλ (traces) κέζα ζε έλα δίθηπν, κε εξγαιεία όπσο
tcpdump, wireshark θαη traceroute θαη κε ηελ αλάιπζε θαη παξαηήξεζε ησλ
δηαθόξσλ ζηαηηζηηθώλ ελόο δηθηύνπ.


ΜΔΡΟ΢ Α’



1.

Τινπνίεζε ελόο TCP client θαη se
rver

Καιείζηε λα πινπνηήζεηε έλαλ TCP client θαη έλαλ TCP server πνπ ζα πιεξνύλ ηηο
παξαθάησ πξνδηαγξαθέο:


Πποδιαγπαθέρ

ηος

TCP client

name: tcpclient

Command line parameters:

1.

-
s <IP address> Με απηό ην όξηζκα ζα νξίδεηαη ε IP ηνπ server όπνπ ν client
ζα
ζπλδέεηαη.

2.

-
p <port_number> Σν port_number νξίδεη ηελ πόξηα ζηελ νπνία θάλεη listen o
server.

3.

-
n <packets_number> To packets_number
νξίδεη

πόζα

παθέηα

ζα

ζηείιεη

ν

client
ζηνλ

server.


O client
ζπλδέεηαη

ζηνλ

server.
΢ηέιλεη έλα HELLO_SERVER παθέην, ην νπ
νίν
πεξηέρεη ηνλ αξηζκό ησλ παθέησλ πνπ ν client ζα ζηείιεη ζηνλ server.

Μόιηο ν server ιάβεη απηό ην παθέην απαληά κε έλα OK_START_SENDING παθέην.

Μ
εηά ηε ιήςε ηνπ
OK
_
START
_
SENDING

παθέηνπ
, ν client αξρίδεη ηελ απνζηνιή
ηόζσλ παθέησλ όζσλ είραλ νξηζηεί κ
ε ην όξηζκα
-
n.



Κάζε παθέην πνπ ζα ζηέιλεη ν client ζα πξέπεη λα έρεη ηα εμήο ραξαθηεξηζηηθά:



Σν κέγεζνο ηνπ παθέηνπ (packet size) ζα αθνινπζεί κηα Gaussian θαηαλνκή
κ
ε κέζε ηηκή 256 θαη δηαζπνξά 80
. Σν πεξηερόκελν ησλ παθέησλ δελ έρεη
ζεκαζία (κπνξεί λα

είλαη ηπραίν), αξθεί ην κέγεζνο ηνπ παθέηνπ λα αθνινπζεί
ηελ παξαπάλσ θαηαλνκή.



Μεηά ηελ απνζηνιή ελόο παθέηνπ, ν client ζα πξέπεη λα πεξηκέλεη έλα ρξόλν t
ms θαη έπεηηα λα ζηέιλεη ην επόκελν παθέην. Ο ρξόλνο t (delay inter
-
arrival)
ζα αθνινπζεί κηα εθ
ζεηηθή θαηαλνκή κε παξάκεηξν ι=100.

Μόιηο νινθιεξσζεί ε απνζηνιή ησλ παθέησλ, ν client πεξηκέλεη λα πάξεη κηα
απάληεζε από ην server γηα ην throughput πνπ επηηεύρζεθε, εθηππώλεη ηελ
πιεξνθνξία απηή, θιείλεη ην connection θαη ηεξκαηίδεη.

Γηα ηελ παξαγσγή ησλ παξαπάλσ θαηαλνκώλ κπνξείηε λα ρξεζηκνπνηήζεηε
ηηο

αθνινπζίεο ησλ αξηζκώλ πνπ
ζαο

έρνπλ δνζεί ζηα αξρεία
Gaussian
.
txt

θαη
Exponential
.
txt
.

Δναλλακηικά
,
ζα έρεηε
BONUS

1 κνλάδαο

αλ πινπνηήζεηε
εζείο

ηηο

ζπλαξηήζεηο γηα
ηηο

θαηαλνκέο ζύκθσλα κε ηα παξαθάησ ζρόιηα:




Η ζπλάξηεζε
nextGaussian
()
ηεο θιάζεο
Random

ζηε
Java

παξάγεη αξηζκνύο
πνπ αθνινπζνύλ ηελ
Gaussian

θαηαλνκή κε κέζε ηηκή 0 θαη δηαζπνξά 1.



Έζησ
x

κηα αθνινπζία αξηζκώλ από ηελ θαηαλνκή
N
(0,1) δει.
Gaussian

θαηαλ
νκή κε κέζε ηηκή 0 θαη δηαζπνξά 1. Μπνξνύκε λα κεηαζρεκαηίζνπκε
ηελ αθνινπζία
x

ζηελ αθνινπζία
y

πνπ αθνινπζεί ηελ
Gaussian

θαηαλνκή
Ν(κ,ζ) ζύκθσλα κε ηνλ παξαθάησ ηύπν:

y

= ζ
*
x

+
κ



Γηα ηελ παξαγσγή αξηζκώ
λ

πνπ αθνινπζνύλ ηελ
Gaussian

θαηαλνκή Ν(0,1)
ζηε
C
,

ζα ρξεζηκνπνηήζεηε
έλαλ αιγ
όξηζκν
,

ιεπηνκέξεηεο ηνπ νπνίνπ ζα
ζαο

δνζνύλ ζύληνκα.



Γηα ηελ παξαγσγή αξηζκώλ
y

πνπ αθνινπζνύλ ηελ εθζεηηθή θαηαλνκή κε
παξάκεηξν ι
,
ρξεζηκνπνηνύκε ηνλ παξαθάησ ηύπν:

y

=
-
ln
(
-
u

+ 1)*
ι

όπνπ
u

είλαη έλαο ηπραίνο
double

αξηζκόο κεηαμύ ηνπ 0.0 θαη ην 1.0


Πποδια
γπαθέρ

ηος

TCP

server

name: tcpserver

Command line parameters:

1.

-
l <listening_port> To όξηζκα απηό θαζνξίδεη ηελ port ζηελ νπνία ζα θάλεη
listen ν server


Αξρηθά ν server πεξηκέλεη γηα connections, θάλνληαο listen ζηελ listening_port.

Με ηε ιήςε ελόο HELLO_
SERVER παθέηνπ, ζα απαληά ζηνλ client κε έλα
OK_START_SENDING παθέην θαη ζα πεξηκέλεη λα ιάβεη ηόζα παθέηα όζα όξηδε ην
HELLO_SERVER παθέην.

Επίζεο ν server ζα πξέπεη λα θαηαγξάςεη ηνλ κέζσ όξν ηνπ throughput πνπ
επηηεύρζεθε κε ηελ επηθνηλσλία ηνπ κε ηνλ

client, θαη λα ζηείιεη ηελ πιεξνθνξία
απηή πίζσ ζηνλ client κόιηο ηειεηώζεη ε απνζηνιή ησλ παθέησλ.


΢ημανηικό:

Όζοι αποθαζίζοςν να γπάτοςν ηον client και ηον server ζε Java ή κάποια άλλη
γλώζζα ςτηλού επιπέδος ο server θα ππέπει ΑΠΑΡΑΙΣΗΣΑ να ςποζηηπίζει

πολλά ηαςηόσπονα connections από clients. Όζοι επιλέξοςν ηην C, η ςποζηήπιξη
πολλαπλών ζςνδέζευν θα μεηπ
ήζει υρ bonus

(+0.5 μονάδερ
)


2.

΢πιινγή δεδνκέλσλ θαη αλάιπζε απνηειεζκάησλ

Καηά ηε δηάξθεηα εθηέιεζεο ηνπ πξνγξάκκαηνο
ζαο

ρξεζηκνπνηείζηε ην εξγαιείν
tcpdump (wireshark) γηα λα θάλεηε capture ηα παθέηα ζηνλ client. Από ην trace πνπ
έρεηε ζπιιέμεη, ζρεδηάζηε ην ηζηόγξακκα κε ηηο ζπρλόηεηεο εκθάληζεο ησλ δηαθόξσλ
packet sizes, θαζώο επίζεο θαη ην ηζηόγξακκα κε ηηο ζπρλόηεηεο ε
κθάληζεο ησλ
δηαθόξσλ delay inter
-
arrivals. Εμεηάζηε νπηηθά θαη ζρνιηάζηε ην θαηά πόζν ηα δύν
ηζηνγξάκκαηα πξνζεγγίδνπλ ηελ Gaussian θαη ηελ εθζεηηθή θαηαλνκή αληίζηνηρα.

Επαιεζεύζηε κε ηελ ρξήζε qqplots όηη ηα packet sizes θαη ηα delay inter
-
arrivals πνπ

έρεηε κεηξήζεη αθνινπζνύλ ηηο αξρηθέο θαηαλνκέο.

Υξεζηκνπνηείζηε
έλαλ αξθεηά κεγάιν αξηζκό παθέησλ

πνπ ζα ζηείιεηε π.ρ. 100
παθέηα

3.

Αλάιπζε παθέηνπ από ην tcpdump

Παξαηεξήζηε ηα παθέηα πνπ θάλεη report ην tcpdump. Γηα θάπνην ζπγθεθξηκέλν
παθέην, αλαθέξεηε
ηα headers πνπ πεξηιακβάλεη θαζώο θαη ην κέγεζνο ηνπο.
Παξαδώζηε έλα screenshot πνπ λα θαίλεηαη ε δνκή ηνπ παθέηνπ, όπσο γίλεηαη report
από ην tcpdump.

4.

BONUS

(+0.5

κνλάδεο
)

Σξέμηε μαλά ην πξόγξακκα ζαο, αιιά απηή ηε θνξά δεκηνπξγώληαο ζην δίθηπν ζαο
θαη θάπνηα
backgroun
d

θίλεζε (π.ρ. θάπνηα
bittorent

εθαξκνγή λα «θαηεβάδεη» κε
κεγάιε ηαρύηεηα έλα κεγάιν αξρείν).
Ση παξαηεξείηαη ζε ζρέζε κε ην
throughput
;
Ε
παλαι
άβεηε ην εξώηεκα (2). ΢ρνιηάζηε ηηο παξαηεξήζεηο ζαο ζρεηηθά κε ην πόζν
«θαιά» ηα packet sizes θαη ηα delay int
er
-
arrivals πνπ έρεηε κεηξήζεη ζε απηή ηελ
πεξίπησζε αθνινπζνύλ ηηο αξρηθέο θαηαλνκέο.



ΜΔΡΟ΢ Β’

1.

Τινπνίεζε ελόο HTTP client.


Καιείζηε λα πινπνηήζεηε έλαλ απιό web client πνπ ζα «θαηεβάδεη» απηόκαηα κηα
ζειίδα πνπ ζα ηνπ έρεη πξνθαζνξίζεη ν ρξήζηεο.

Σ
ν πξόγξακκα ζαο ζα πξέπεη λα εθηειείηε σο εμήο:



ζα δέρεηαη έλα URL ζαλ command line argument



ζα δεκηνπξγεί θαη ζα ζηέιλεη έλα HTTP GET request γηα λα «θαηεβάζεη» ην
ζπγθεθξηκέλν URL



ζα απνζεθεύεη ζην αξρείν output.txt ηελ απάληεζε ηνπ web server θαη ζα
εθη
ππώλεη ζηελ θνλζόια ην status code πνπ πεξηιακβάλεηαη ζην HTTP
response πνπ ζηέιλεη ν web server.


2.

Μεηξήζεηο θαζπζηεξήζεσλ γηα δηάθνξα URLs


Δηαιέμηε δύν URLs,
θάπνην πνπ βξίζθεηαη ζηελ Κξήηε

θαη θάπνην πνπ βξίζθεηαη ζε

θάπνηα ρώξα εθηόο Επξώπεο
. Υξεζηκνπ
νηήζηε ηνλ web client πνπ πινπνηήζαηε γηα
λα «θαηεβάζεηε» ηηο δύν ζειίδεο θαη κεηξήζηε ην ρξόλν πνπ κεζνιαβεί από ηελ
απνζηνιή ηνπ http request κέρξη λα ιάβεηε ηελ απάληεζε από ηνλ web server.
(Επαλ
αιάβεηε ην πείξακα 30 θνξέο

ώζηε λα έρεηε πην έγθπξα απνηε
ιέζκαηα ζρεηηθά
κε ηηο θαζπζηεξήζεηο γηα ηηο δύν ζειίδεο). Ση παξαηεξείηε ζρεηηθά κε ηελ
θαζπζηέξεζε γηα ηηο δύν ζειίδεο; Πνπ κπνξεί λα νθείιεηαη; ΢ρνιηάζηε.
Υξεζηκνπνηήζηε ην εξγαιείν traceroute θαη πξνζπαζήζηε λα εμεγήζεηε ηηο δηαθνξέο
ζηηο θαζπζηεξήζεη
ο πνπ παξαηεξείηε κεηαμύ ησλ δύν ζειίδσλ, ζε ζρέζε κε ηνλ
αξηζκό ηνλ hops πνπ κεζνιαβνύλ. Παξαηεξείηε θάπνηα εμάξηεζε κεηαμύ ηηο
γεσγξαθηθήο απόζηαζεο θαη ηεο θαζπζηέξεζεο; Πνηνη άιινη παξάγνληεο ζα
κπνξνύζαλ λα επεξεάδνπλ ηελ θαζπζηέξεζε; ΢ρνιηάζηε.



ΠΑΡ
ΑΓΟΣΔΑ

Παξαδώζηε κηα γξαπηή αλαθνξά πνπ ζα πεξηιακβάλεη ηηο απαληήζεηο ζηα εξσηήκαηα
ησλ αζθήζεσλ, ηα γξαθήκαηα θαζώο επίζεο θαη ηα ζρόιηα πνπ θξίλεηε απαξαίηεην
λα θάλεηε γηα λα εμεγήζεηε θάζε γξάθεκα. Επίζεο παξαδώζηε όιν ηνλ θώδηθα ηεο
πινπνίεζεο ζαο θ
αζώο θαη νπνηνδήπνηε script έρεηε θηηάμεη γηα ηελ παξαγσγή ησλ
γξαθεκάησλ.



΢ημανηικό:

Αλεμάξηεηα ηεο γιώζζα πινπνίεζεο, ζα πξέπεη λα παξαδώζεηε καδί κε ηνλ θώδηθά
ζαο θαη έλα αξρείν Makefile πνπ ζα θάλεη build ηνλ απαξαίηεην θώδηθα. Σα
πξνγξάκκαηά ζαο ζα
πξέπεη λα ηξέρνπλ ζε θνλζόια. Μελ θάλεηε submit ηα
πεξηερόκελα ηνπ θαθέινπ ηνπ project ζαο, πνπ παξάγνπλ δηάθνξα Development
Environments (πρ Netbeans, Eclipse θηι). Επίζεο, ν θώδηθάο ζα πξέπεη λα είζαη ζε
ζέζε λα θάλεη build θαη λα ηξέρεη ΑΠΑΡΑΙΣΗΣΑ ζε Li
nux πεξηβάιινλ, θαζώο εθεί
ζα εμεηαζηείηε.