Σκήκα Δπηζηήκεο Τπνινγηζηώλ ΠΣΤΥΗΑΚΖ ΔΡΓΑΗΑ

Σχετικά έγγραφα
Σαο θνηλνπνηνύκε ηηο αλσηέξσ δηαηάμεηο ζρεηηθά κε ηε θνξνιόγεζε ηεο ππεξαμίαο πνπ πξνθύπηεη από κεηαβίβαζε αθίλεηεο πεξηνπζίαο από θπζηθά πξόζσπα.

Ο ζύδπγνο θαη ε ζύδπγόο ηνπ ζηε δήισζή ηνπο ηνπ 2013 δειώλνπλ αληίζηνηρα:

ΠΑΜΕ ΜΟΥΣΕΙΟ; ΠΡΙΝ ΚΑΙ ΜΕΣΑ ΣΗΝ ΕΠΙΚΕΨΗ ΣΟ ΜΟΤΕΙΟ ΠΡΩΣΟ ΜΕΡΟ. Ειζαγυγικά

ΚΡΙΣΙΚΗ ΣΗ ΠΕΡΙΠΣΩΗ ΑΤΣΗ. "ΑΣΑΝΙΜΟ -ΑΠΟΚΡΤΦΙΜΟ. ΈΝΑ ΕΓΚΛΗΜΑΣΙΚΟ ΔΟΓΜΑ".

ΔΝΣ: ΠΟΘΟ ΕΘΝΑΘ Ο ΟΡΓΑΝΘΜΟ ΠΟΤ ΠΑΡΟΤΘΑΖΕΣΑΘΩ «ΩΣΗΡΑ» ΣΩΝ ΟΘΚΟΝΟΜΘΩΝ

Νέα Διιεληθή Λνγνηερλία Πνηήκαηα γηα ηελ πνίεζε

Παπαγωγή πποθοπικού λόγος από ηα νήπια, μέζα από ηην αθήγηζη ιζηοπιών, με ηη βοήθεια εκπαιδεςηικών ςλικών και ψηθιακών εικόνων ζε Γιαδπαζηικό Πίνακα

Παπαδοηέο.Π1α.:Τεύχος Προδιαγραφών. Έπγο: Υποζηήπιξη Υποςπγείος Παιδείαρ &Θπηζκεςμάηων ζε Πληποθοπιακά Σςζηήμαηα2014. «Υποέπγο 4»

Νικόλαος Β. Στασινός, «Ηπειρωτική Εστία», τεύχος , 7-8/1977 ΑΠΟ ΣΗΝ ΔΓΚΤΜΟΤΝΗ Χ ΣΟ ΑΡΑΝΣΙΜΑ

Εγρεηξίδην ρξήζεο ηνπ Πιεξνθνξηαθνύ Σπζηήκαηνο ηνπ Πξνγξάκκαηνο Πιεζπζκηθνύ Ειέγρνπ (Π.Σ.-Π.Π.Ε.) γηα θαξθίλν ηξαρήινπ κήηξαο.

ΠΟΛ (ΦΔΚ 3398/Β/ ) Απνδεηθηηθό Δλεκεξόηεηαο άξζξνπ 12 λ. 4174/2013 (ΦΔΚ 170 Α'), όπωο ηζρύεη.

ΠΑΝΔΛΛΖΝΗΑ ΟΜΟΠΟΝΓΗΑ ΔΡΓΑΕΟΜΔΝΧΝ ΟΡΓΑΝΗΜΧΝ ΣΟΠΗΚΖ ΑΤΣΟΓΗΟΗΚΖΖ Π.Ο.Δ. Ο.Σ.Α. ΠΡΑΚΣΗΚΑ ΔΡΓΑΗΧΝ ΣΟΤ 37 ου ΚΑΤΑΣΤΑΤΙΚΟΥ - ΟΡΓΑΝΩΤΙΚΟΥ ΣΥΝΕΔΡΙΟΥ

ΠΣΤΥΙΑΚΗ ΕΡΓΑΙΑ ΔΛΛΗΝΙΚΗ ΓΗΜΟΚΡΑΤΙΑ ΤΔΦΝΟΛΟΓΙΚΟ ΙΓΡΥΜΑ Τ.Δ.Ι. ΚΑΒΑΛΑΣ ΣΦΟΛΗ ΓΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ: ΛΟΓΙΣΤΙΚΗΣ

Γ Ι Α Ρ Θ Ρ Ω Σ Ι Κ Δ Λ Δ Ξ Δ Ι

«Ηζηοπική αναδπομή και πολεοδομική εξέλιξη ηηρ πόληρ ηηρ Σπίποληρ»

Οι επιδόζεις Ιανοσαρίοσ-Ιοσλίοσ 2009 ηοσ ηοσριζηικού ηομέα από ηο ΙΤΕΠ

Αποστολή ΕΣΠ στη Σάμο

1000 Σούννα ανά Μέρα και Νύχτα

Μ. Γθηξηδή 1, Α. Μπνπληίδνπ 2. ΔΠ ζηηο πνπδέο ζηνλ Διιεληθό Πνιηηηζκό, Διιεληθό Αλνηθηό Παλεπηζηήκην, 2

ΔΘΝΙΚΟ ΚΑΙ ΚΑΠΟΓΙΣΡΙΑΚΟ ΠΑΝΔΠΙΣΗΜΙΟ ΑΘΗΝΩΝ

Ηιεθηξνληθό Δκπόξην Τν λνκηθό πιαίζην ελίζρπζεο θαη πξνζηαζίαο ηνπ

ΣΔΥΝΗΚΔ ΠΡΟΓΗΑΓΡΑΦΔ. 1. Αληηθείκελν ησλ ππεξεζηώλ ηνπ αλαδόρνπ

ΚΥΑ Γ4/Φ.167/2073/1982 (ΦΕΚ Β 640/ )

ΓΙΑ ΣΟ ΓΔΩΡΓΙΟ ΓΡΙΒΑ ΓΙΓΔΝΗ...

Αλαιπηηθό Πξόγξακκα Λνγνηερλίαο Γπκλαζίνπ. Γείθηεο Δπηηπρίαο θαη Γείθηεο Δπάξθεηαο

(Πιάησλνο Πξσηαγόξαο, 322 Α -323 Α ) πεηδὴ δὲ ὁ ἄλζξσπνο ζείαο κεηέζρε κνίξαο, πξῶηνλ κὲλ δηὰ ηὴλ ηνῦ ζενῦ

Η «Δλσζηο Πηζηδψλ» ηεο κχξλεο θαη νη αλζειιεληθνί δησγκνί ζηε πάξηε ηεο Μ. Αζίαο

Οηθνλνκηθέο Καηαζηάζεηο ηεο 31 Γεθεκβξίνπ 2012 ύκθσλα κε ηα Γηεζλή Πξόηππα Υξεκαηννηθνλνκηθήο Αλαθνξάο όπσο έρνπλ πηνζεηεζεί από ηελ Δπξσπατθή Έλσζε

ΟΔΟΙ ΔΙΑΦΤΓΗ ΣΗΝ ΕΞΕΓΕΡΗ ΣΩΝ ΓΑΛΛΙΚΩΝ ΠΡΟΑΣΙΩΝ ησλ Παχινπ Υαηδφπνπινπ θαη Διέλεο Κακπνχξε

Ρνπ Βαζίιε Πεβδαιή ( Από ηελ αλζνινγία βξαβεπκέλσλ έξγσλ ηνπ ινγνηερληθνύ δηαγσληζκνύ ηνπ 2011

ΚΧΓΙΚΟΠΟΙΗΜΔΝΟ ΚΑΣΑΣΑΣΙΚΟ ΣΗ ΑΝΧΝΤΜΗ ΔΣΑΙΡΙΑ S&B ΒΙΟΜΗΥΑΝΙΚΑ ΟΡΤΚΣΑ Α.Δ ΚΔΦΑΛΑΙΟ Ι ΤΣΑΗ-ΔΠΧΝΤΜΙΑ-ΚΟΠΟ-ΓΙΑΡΚΔΙΑ

Είδος: Αριθμός: Έηος: ΦΕΚ: Σέθηκε ζε ιζτύ: Αρμόδιος Φορέας: Ημ.Τπογραθής: Σίηλος: Προοίμιο: ΣΟΙΥΕΙΑ ΑΡΘΡΩΝ Άρθρο: Ημ/νία:

ΠΡΑΚΣΙΚΟ ΤΝΑΝΣΗΗ ΕΡΓΑΙΑ. Οι λεκάνες απορροής ηοσ Τ.Δ Τθιζηάμενη καηάζηαζη, Προβλήμαηα και Λύζεις Νομός Κιλκίς ΚΗΛΚΗ

ΣΟ ΠΟΛΗΣΗΜΗΚΟ ΤΠΟΒΑΘΡΟ ΣΟΤ ΝΑΕΗΜΟΤ ΚΑΗ Ο ΡΟΛΟ ΣΖ ΔΛΛΖΝΟΡΘΟΓΟΞΖ ΣΡΗΣΖ ΖΛΗΚΗΑ ΖΜΔΡΑ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΣΙΑ ΝΟΜΟ ΑΣΣΙΚΗ Άλιμος: ΝΠΔΔ ΔΗΜΟΣΙΚΟΙ ΠΑΙΔΙΚΟΙ Αριθμ. Πρωτ.: ΣΑΘΜΟΙ ΑΛΙΜΟΤ

ΣΡΑΠΕΖΑ ΘΕΜΑΣΩΝ Α ΛΤΚΕΙΟΤ

Τα θαηλνηνκηθά ζηνηρεία ηνπ Νένπ ΠΣ ζηα Θξεζθεπηηθά

ΓΔΝΙΚΗ ΓΡΑΜΜΑΣΔΙΑ ΔΠΔΝΓΤΔΩΝ ΚΑΙ ΑΝΑΠΣΤΞΗ ΔΓΚΤΚΛΙΟ. Θέκα: ύζηαζε θαη Λεηηνπξγία ηωλ Γξαθείωλ Δμππεξέηεζεο Δπελδπηώλ ηνπ Δπελδπηηθνύ Νόκνπ

Μερικέσ Ειλικρινείσ Συμβουλέσ για Κάθε Χριςτιανό

Ιωάννης Χρσζόζηομος. Λόγοι Καηά Ιοσδαίων

ΘΕΩΡΙΑ ΔΙΔΑΚΣΙΚΗ ΣΟΤ ΠΟΔΟΦΑΙΡΟΤ Ι ΣΕΥΝΙΚΗ ΚΑΙ ΕΠΙΔΕΞΙΟΣΗΣΑ ΣΟ ΠΟΔΟΦΑΙΡΟ ΠΡΟΠΟΙΗΗ ΝΣΡΙΠΛΑ ΚΑΙ ΟΤΣ ΣΜΗΜΑ ΕΠΙΣΗΜΗ ΦΤΙΚΗ ΑΓΩΓΗ & ΑΘΛΗΣΙΜΟΤ

ΥΗΗ. ΚΤΚΛΟ ΚΛΑΓΗΚΩΝ ΔΜΗΝΑΡΗΩΝ ΓΗΑ ΔΠΗΥΔΗΡΖΔΗ ΒΗΟΜΖΥΑΝΗΑ & ΔΜΠΟΡΗΑ ΔΝΓΤΖ

Η ΑΜΑΝΤΑ ΚΑΙ Η ΓΟΥΚΙΣΣΑ

EU KIDS ONLINE II Δξωηεκαηνιόγην γνλέωλ 23/4/2010

AΠΟΛΟΓΙΣΜΟΣ Ιούλιος 2012-Ιούνιος 2013

ΓΔΝΙΚΗ ΓΡΑΜΜΑΣΔΙΑ ΔΝΗΜΔΡΩΗ ΚΑΙ ΔΠΙΚΟΙΝΩΝΙΑ ΓΔΛΣΙΟ ΣΤΠΟΤ. Αζήλα 29/6/2015

ΔΗΑΓΩΓΖ. 1 Φ. Μπαξκπηέ-Κ. Λαβελίξ, Ιζηνξία ησλ Μέζσλ Μαδηθήο Δπηθνηλσλίαο, Απφ ηνλ Νηηληεξφ ζην Ίληεξλεη,

ΘΔΜΑ: «Το ποδήιαηο φς βαζηθό κέζο κεηαθίλεζες, άζιεζες θαη υσταγφγίας, ζηελ περηοτή ηφλ Τρηθάιφλ.» αξεγηαλίδεο Γεκήηξηνο Μπνπξιηόο Κσλζηαληίλνο

EU Kids Online II (08/04/2010) ΓΣΩΝ

ΜΔΛΔΣΖ ππομήθειαρ. «ειδών καθαπιόηηηαρ, ςγιεινήρ και εςππεπιζμού» Μάιορ 2015 Ο ςνηάξαρ: Γεπηιλήρ Παν/ηηρ - 1 -

21 ΜΑΡΤΗ 2013 ΓΥΡΙΖΟΥΜΕ ΣΕΛΙΔΑ

1. ΔΠΙΚΟΙΝΧΝΙΑ ΛΟΓΟ. απνηειεί ην κέζν πξόθιεζεο, αλάπηπμεο θαη δηεθπεξαίσζεο πνιιψλ

ΚΩΔΙΚΑΣ ΔΕΟΝΤΟΛΟΓΙΑΣ ΜΟΒΙΑΚ Α.Ε.

ΣΜΗΜΑ ΜΑΘΗΜΑΣΙΚΧΝ ΜΔΣΑΠΣΤΥΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΜΔΘΟΓΟΛΟΓΙΑ ΚΑΙ ΓΙΓΑΚΣΙΚΗ ΣΧΝ ΜΑΘΗΜΑΣΙΚΧΝ ΗΜΔΙΧΔΙ ΣΟΤ ΜΑΘΗΜΑΣΟ Γ1. 1.Δηζαγσγή ζηελ γλσζηαθε ζεσξία

ΣΗ ΔΚΛΟΓΔ ΣΧΝ ΗΑΣΡΗΚΧΝ ΤΛΛΟΓΧΝ ΣΗ 12 θαη 13 ΟΚΣΧΒΡΖ ΦΖΦΗΕΟΤΜΔ ΜΑΕΗΚΑ ΔΝΧΣΗΚΟ ΚΗΝΖΜΑ ΓΗΑ ΣΖΝ ΑΝΑΣΡΟΠΖ!

ΝΑΤΣΙΚΟ ΝΟΟΚΟΜΔΙΟ ΑΘΗΝΧΝ ΓΙΔΤΘΤΝΗ ΟΙΚΟΝΟΜΙΚΧΝ ΤΠΗΡΔΙΧΝ ΤΠΟΓΙΔΤΘΤΝΗ ΔΦΟΓΙΑΜΟΤ ΣΜΗΜΑ ΓΙΑΓΧΝΙΜΧΝ ΣΑΥΤ ΔΓΓΡΑΦΟ

ΤΠΟΤΡΓΔΙΟ ΟΙΚΟΝΟΜΙΚΩΝ

Εγχειρίδιο μέλους. Prestige Plus Ατομικό Οκτώβριος Διεθνές Πρόγραμμα Υγείας

Δ4) Να κειεηήζεηε αλ θαηά ηελ θξνύζε δηαηεξείηαη ε θηλεηηθή ελέξγεηα ηνπ ζπζηήκαηνο ησλ δύν ζσκάησλ Σ 1 θαη Σ 2. Μονάδες 7

ΑΔΑ: Β4Π7Ω9Μ-ΠΑΚ. Θωμάς Γεώργιος Αναστάσιος Χριστόδουλος Ιωάννης Γρηγόριος Ανδρέας Κων/νος Ανέστης τυλιανός Κων/νος Γεώργιος Γεώργιος

εργασiα ΚΑΙ υγεία ΠΑΡΑ ΣΗ ΡΑΣΧΝΗ ΣΧΝ ΓΙΑΚΟΠΧΝ ΔΠΗΜΔΝΟΤΝ ΟΛΑ ΣΑ ΠΡΟΒΛΗΜΑΣΑ ΤΓΙΔΙΝΗ ΚΑΙ ΑΦΑΛΔΙΑ ΔΡΓΑΙΑ

ΓΗΔΘΝΔ ΤΝΔΓΡΗΟ ΣΟΠΗΚΖ ΗΣΟΡΗΑ & ΠΟΛΗΣΗΜΟΤ ΣΡΗΥΩΝΗΑ ΚΑΗ ΝΑΤΠΑΚΣΗΑ ΗΟΤΝΗΟΤ 2012 Αθξόπνιε Θεζηίαο (Βινρόο) - Θέξκν - Ναύπαθηνο

Ι. ΤΓΚΡΟΣΗΗ ΚΑΙ ΛΕΙΣΟΤΡΓΙΑ ΣΗ ΕΠΙΣΡΟΠΗ

ΚΑΣΑΣΑΗ ΚΑΙ ΠΡΟΟΠΣΙΚΔ ΣΩΝ ΜΙΚΡΟΜΔΑΙΩΝ ΔΠΙΥΔΙΡΗΔΩΝ ΣΟΝ ΝΟΜΟ ΘΔΑΛΟΝΙΚΗ

Δπηκνξθσηηθό πιηθό γηα ηελ εθπαίδεπζε ησλ επηκνξθσηώλ ζηα Παλεπηζηεκηαθά Κέληξα Δπηκόξθσζεο ΣΔΤΥΟ 1: ΓΔΝΙΚΟ ΜΔΡΟ

ΟΜΙΛΙΑ ΤΟΥ ΑΝΑΣΤΑΣΗ ΓΚΙΚΑ ΣΤΗΝ ΔΚΓΗΛΩΣΗ ΤΗΣ ΔΝΩΣΗΣ ΓΟΝΔΩΝ ΑΓ. ΒΑΡΒΑΡΑΣ ΓΙΑ ΤΗΝ 28η ΟΚΤΩΒΡΗ

ΑΝΑΠΣΤΞΙΑΚΗ ΛΑΙΘΙΟΤ Αλαπηπμηαθή Αλώλπκε Δηαηξεία ΟΣΑ

ΟΗ ΤΠΟΓΔΗΞΔΗ ΣΩΝ ΓΟΝΔΩΝ Ω ΜΔΟ ΑΝΑΓΝΩΡΗΖ ΣΖ ΥΑΡΗΜΑΣΗΚΟΣΖΣΑ ΣΑ ΜΑΘΖΜΑΣΗΚΑ

Ο ΑΡΥΖΓΟ ΣΖ ΔΛΛΖΝΗΚΖ ΑΣΤΝΟΜΗΑ

11.1 ΔΗΑΓΩΓΗΚΑ ΑΙΜΟΡΡΑΓΙΑ SHOCK ΜΗΥΑΝΙΜΟΙ KΑΙ ΣΤΠΟΙ SHOCK

ΓΗΑΚΖΡΤΞΖ ΑΡΗΘΜ. 16/11 ΑΝΟΗΚΣΟΤ ΓΖΜΟΗΟΤ ΓΗΑΓΧΝΗΜΟΤ ΠΡΟΜΖΘΔΗΑ ΓΗΑ ΔΝΑ ΥΡΟΝΟ KΑΘΔΣΖΡΧΝ ΠΑΡΟΥΔΣΔΤΖ ΓΗΑ ΣΗ ΑΝΑΓΚΔ ΣΟΤ ΝΟΟΚΟΜΔΗΟΤ

Γιακήπςξη ςπ απίθμ. 125/2015

ΚΑΣΑΛΖΚΣΗΚΖ ΖΜΔΡΟΜΖΝΗΑ ΚΑΗ ΧΡΑ

1ν ΓΔΛ ΑΡΣΔΜΗΓΟ ΥΟΛΗΚΖ ΥΡΟΝΗΑ ΔΚΓΡΟΜΖ Γ ΣΑΞΖ ΔΠΗΜΔΛΔΗΑ: ΥΡΖΣΟ ΚΑΡΑΣΕΑ

Γιαηαπασέρ Λήτηρ Τποθήρ Πληροφορίες για Εκπαιδεστικούς. Β.Α. Παπαγεσξγίνπ - Παηδνςπρίαηξνο MD, PhD, Med, Advanced TEACCH Consultant

Φηινζνθία - Αηζζεηηθή

Αηζζεηήξηα θαη κεηαηξνπείο. Κέηξεζε ζεξκνθξαζίαο.

ΠΡΔΒΔΙΑ ΣΗ ΔΛΛΑΓΟ ΣΟ ΔΡΔΒΑΝ ΓΡΑΦΔΙΟ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΔΜΠΟΡΙΚΩΝ ΤΠΟΘΔΔΩΝ. Δξεβάλ, 22 Απγνχζηνπ : Σν εκπνξηθό ηζνδύγην ηεο Αξκελίαο.

Ὁ φιλομαθὴσ πτωχόσ Αγνχζηνπ 30. Ἀιινίκνλν! εἶκαη θησρὸ ζ αηνῦ ηνῦ θφζκνπ ηὸλ ηξνρφ! εἶκ ὀξθαλὸ θαὶ μέλν! θη ἀγξάκκαην ζὰ κέλσ!

Σν Ν.Π.Γ.Γ. ΠΑΗΓΔΗΑ - ΚΟΗΝΧΝΗΚΖ ΠΡΟΣΑΗΑ ΚΑΗ ΑΛΛΖΛΔΓΓΤΖ ΓΖΜΟΤ ΛΤΚΟΒΡΤΖ - ΠΔΤΚΖ

Ο ΓΔΝΗΚΟ ΓΡΑΜΜΑΣΔΑ ΓΖΜΟΗΩΝ ΔΟΓΩΝ ΣΟΤ ΤΠΟΤΡΓΔΗΟΤ ΟΗΚΟΝΟΜΗΚΩΝ

ΘΔΩΡΙΑ ΓΙΓΑΚΣΙΚΗ ΣΟΤ ΠΟΓΟΦΑΙΡΟΤ Ι ΣΔΥΝΙΚΗ ΚΑΙ ΔΠΙΓΔΞΙΟΣΗΣΑ ΣΟ ΠΟΓΟΦΑΙΡΟ ΤΠΟΓΟΥΗ ΣΗ ΜΠΑΛΑ - ΜΔΣΑΒΙΒΑΗ ΣΜΗΜΑ ΔΠΙΣΗΜΗ ΦΤΙΚΗ ΑΓΩΓΗ & ΑΘΛΗΣΙΜΟΤ

ΑΝΑΚΟΙΝΧΗ ππ' αξηζκ. ΜΔ 2/2015 γηα ηε ζύλαςε ΤΜΒΑΗ ΜΙΘΧΗ ΔΡΓΟΤ. Ο Γήκνο Αγίαο Παξαζθεπήο. Αλαθνηλώλεη

ΔΛΛΗΝΙΚΗ ΓΗΜΟΚΡΑΣΙΑ ΝΟΜΟ ΘΔΑΛΟΝΙΚΗ ΓΗΜΟ ΒΟΛΒΗ Σερληθή Τπεξεζία Αξ. κειέηεο 20 /2014

METAΠΣΤΥΗΑΚΖ ΔΡΓΑΗΑ ΔΤΘΤΜΗΑΓΟΤ ΣΔΛΛΑ (A.E.M. 0033)

TΔΥΝΙΚΔ ΠΡΟΓΙΑΓΡΑΦΔ ΔΦΑΡΜΟΓΧΝ ΜΤΟΚΣΟΝΙΑ - ΑΠΔΝΣΟΜΧΗ ΑΠΟΛΤΜΑΝΗ ΓΙΑ: 3)ΜΟΝΑΓΑ ΦΤΥΟΚΟΙΝΧΝΙΚΗ ΑΠΟΚΑΣΑΣΑΗ (ΞΔΝΧΝΑ ΦΤΥΑΡΓΧ)

ΕΡΕΤΝΗΣΙΚΟ ΠΡΟΓΡΑΜΜΑ

ΠΟΛΘΤΘΣΜΟΣ BRNO Τν ιαϊθό Θέαηξν ζηε Ζάθπλζν - «oμιλίες» (Ν. Αρβανιτάκη- Ζάκσνθος )

ΔΛΛΗΝΙΚΗ ΓΗΜΟΚΡΑΣΙΑ Ημεπ/νία: 08/12/2015 ΝΟΜΟ ΘΔ/ΝΙΚΗ Aπιθμ. Ππυη.: ΓΗΜΟ ΛΑΓΚΑΓΑ ΓΙΔΤΘ. ΟΙΚΟΝΟΜΙΚΩΝ ΤΠΗΡΔΙΩΝ ΣΜΗΜΑ ΠΡΟΜΗΘΔΙΩΝ ΓΙΑΚΗΡΤΞΗ

«ΑΛΚΤΟΝΗ: ΕΘΝΙΚΗ ΠΡΩΣΟΒΟΤΛΙΑ ΠΡΟΑΓΩΓΗ ΣΟΤ ΜΗΣΡΙΚΟΤ ΘΗΛΑΜΟΤ»

Τα αναγνωστικά των λογοτεχνών

ΕΡΓΑΣΗΡΙΑΚΕ ΔΙΑΓΝΩΕΙ ΚΑΙ ΕΞΕΣΑΕΙ

ΔΛΛΖΝΗΚΖ ΓΖΜΟΚΡΑΣΗΑ. Αζήλα, 2 Απγνχζηνπ 2011 ΠΟΛ.: ΠΡΟ: Ωο Π.Γ

ΘΔΜΑ: Οδηγίερ για ηην εθαπμογή ηων διαηάξεων ηος άπθπος 13 ηος ν. 3943/2011.

Σν Λπθόθσο ηνπ Αζετζκνύ

Σοῦ ἐν ἁγίοις Πατρὸς ἡμῶν Επιυανίοσ ἐπισκόποσ πόλεως Κωνσταντίας, τῆς Κσπριωνήσοσ

Ελλάδα-Μςηιλήνη: Έπιπλα ςπνοδωμαηίος 2015/S Πποκήπςξη ζύμβαζηρ. Ππομήθειερ

ΑΠΟΦΑΗ Ο ΤΠΟΤΡΓΟ ΟΙΚΟΝΟΜΙΚΩΝ. 1. Τηο θαησηέξσ δηαηάμεηο ηνπ Κψδηθα ΦΠΑ (λ. 2859/00), φπσο ηζρχνπλ:

2 ε Δνόηεηα: ΣΧΟΛΙΚΑ ΒΙΒΛΙΑ

ΟΜΑΓΑ ΠΡΩΣΗ ΘΔΜΑ Α1 Να δψζεηε ην πεξηερφκελν ησλ παξαθάησ φξσλ: α) πκβνχιην Αζθαιείαο ΟΖΔ β) Χάηη Χνπκαγηνχλ γ) Αλαηνιηθφ Εήηεκα Μονάδες 15

Transcript:

Σκήκα Δπηζηήκεο Τπνινγηζηώλ ΠΣΤΥΗΑΚΖ ΔΡΓΑΗΑ Σίηινο: FPGA based Network Traffic Measurement Τπεύζπλνη θαζεγεηέο: Υξηζηόθνξνο Κάρξεο, Μαλώιεο Καηεβαίλεο Όλνκα : Κνπηζνπκπόο Βαζίιεο Α.Μ. : 1932 1

Πεπίλητη ε απηό ην έγγξαθν παξνπζηάδεηαη έλα ςεθηαθό ζύζηεκα ην νπνίν βαζίδεηαη ζηελ πιαθέηα NetFPGA. To ζύζηεκα απηό, ρξεζηκνπνηείηαη γηα ηελ θαηεγνξηνπνίεζε ηεο θπθινθνξίαο ηνπ δηαδηθηύνπ. Ζ θαηεγνξηνπνίεζε ηεο θίλεζεο ηνπ δηαδηθηύνπ είλαη ηδηαίηεξα δύζθνιε δηαδηθαζία Όκσο ε ζεκαζία ηεο είλαη ηδηαίηεξα ζεκαληηθή. Σα πξσηόθνιια πνπ κπνξεί λα θαηεγνξηνπνηήζεη ην ζπγθεθξηκέλν ζύζηεκα είλαη ην HTTP, ην BitTorrent θαη ην Gnutella. Σν ζύζηεκά καο, κπνξεί λα δνπιέςεη θαη ζε πξαγκαηηθό ρξόλν θαη ηα απνηειέζκαηα ρξήζεο ηνπ κπνξνύκε λα ηα δνύκε κέζσ γξαθηθνύ πεξηβάιινληνο. (GUI) 2

Δςσαπιζηίερ Ηδηαίηεξα, ζα ήζεια λα επραξηζηήζσ ην Ίδξπκα Σερλνινγίαο θαη Έξεπλαο (Η.Σ.Δ) γηα ηελ παξαρώξεζε ηεο πιαθέηα NetFPGA γηα ην ρξνληθό δηάζηεκα πνπ εθπόλεζα ηελ πηπρηαθή κνπ εξγαζία. Δπίζεο, ζα ήζεια λα επραξηζηήζσ ηνπο Υξηζηόθνξν Κάρξε Μηράιε Λπγεξάθε, Σζαιηαγθό Γεκήηξε θαη Αλησληάδε Γεκήηξε γηα ηελ πνιύηηκε βνήζεηα πνπ κνπ πξνζέθεξαλ. 3

Πεπιεσόμενα 1. Δηζαγσγή ---------------------------------------------------- 5 2. ρέδην θαη Τινπνίεζε ------------------------------------- 7 2.1 Καηεγνξηνπνίεζε Κπθινθνξίαο Γηαδηθηύνπ ------- 7 2.2 Δπεμήγεζε Πξσηνθόιισλ θαη Τινπνίεζε ---------- 8 2.2.1 http_get_filter ------------------------------------- 8 2.2.2 BitTorrent_filter ---------------------------------- 11 2.2.3 Gnutella_filter ------------------------------------- 17 3. Αμηνιόγεζε ------------------------------------------------- 21 3.1 Software --------------------------------------------------- 21 3.2 Γηαδηθαζία αμηνιόγεζεο -------------------------------- 21 3.3 ύγθξηζε NetFPGA APPMON ---------------------- 24 4. πκπεξάζκαηα Πεξίιεςε ------------------------------- 26 5. Βηβιηνγξαθία ------------------------------------------------ 27 4

1. Διζαγυγή θνπόο ηεο πηπρηαθήο εξγαζίαο είλαη ε δεκηνπξγία ελόο αλαιπηή δηθηύνπ (packet classifier). Με απηόλ ηνλ αλαιπηή ζα κπνξνύκε λα πξνζδηνξίζνπκε αλ έλα παθέην ππνζηεξίδεη έλα από ηα παξαθάησ πξσηόθνιια HTTP, BitTorrent ή Gnutella. Τπάξρνπλ αξθεηέο εθαξκνγέο δηαδηθηύνπ νη νπνίεο ρξεζηκνπνηνύλ αλαιπηή παθέησλ, όπσο firewalls, IP Routing, πνπ εκθαλίδνπλ δηαθνξεηηθέο ηδηόηεηεο ππεξεζίαο. ε θάζε κηα εθαξκνγή είλαη απαξαίηεην λα θαζνξίζνπκε ζε κηα ξνή ηα δηαθνξεηηθά παθέηα πνπ θηάλνπλ θαη λα ηα θαηεγνξηνπνηήζνπκε. Απηή ε θαηεγνξηνπνίεζε γίλεηαη κέζσ ηνπ αλαιπηή παθέησλ. Ο αλαιπηήο πεξηιακβάλεη κηα ζεηξά από θίιηξα, ηα νπνία ζα εθαξκόζεη ζηα παθέηα, πξνθεηκέλνπ λα αληρλεύζνπκε αλ πξόθεηηαη γηα θάπνην από απηά ηα ηξία πξσηόθνιια. Γηα λα ηαμηλνκήζνπκε ηα παθέηα βαζηδόκαζηε θπξίσο ζην πεξηερόκελν ηνπ packet header. Δπίζεο, έλα επηπιένλ βνεζεηηθό ζηνηρείν είλαη θαη ν αξηζκόο ηεο πόξηαο πνπ ρξεζηκνπνηνύλ. Ζ ηδέα θαηαζθεπήο ελόο αλαιπηή δηθηύνπ δελ είλαη πξσηόγλσξε. Οη πξώηνη αλαιπηέο ζηόρεπαλ ζε έλα απιό end-point θαη ν θύξηνο ζηόρνο ηνπο ήηαλ λα απνκνλώζνπλ παθέηα πνπ πξννξίδνληαλ γηα ζπγθεθξηκέλα πξσηόθνιια ή ζπγθεθξηκέλεο ζπλδέζεηο. Παξαδνζηαθά, ε αλαγλώξηζε ελόο πξσηνθόιινπ γηλόηαλ κε βάζε ηνλ αξηζκό ηεο πόξηαο πνπ ρξεζηκνπνηνύλ. Πνιιέο επξέσο ρξεζηκνπνηνύκελεο εθαξκνγέο, όπσο νη WEB, SSH, Telnet θαη άιιεο, έρνπλ θαζνξηζκέλν αξηζκό πόξηαο πνπ ρξεζηκνπνηνύλ. Όκσο, πνιιέο λέεο εθαξκνγέο, ζπκπεξηιακβαλνκέλσλ εθαξκνγώλ δηακνηξαζκνύ αξρείσλ, δελ έρνπλ θαζνξηζκέλν αξηζκό πόξηαο [12] θαη επίζεο ην ζεκείν ζηελ θεθαιή ή ζην payload ηνπ παθέηνπ (ρξεζηκνπνηείηαη ζπλήζσο ν όξνο ππνγξαθέο), πνπ κπνξεί λα καο νδεγήζεη ζηελ θαηεγνξηνπνίεζε ηεο θπθινθνξίαο δελ είλαη ζηαζεξό. Γηα παξάδεηγκα νη ππνγξαθέο κπνξεί λα κελ είλαη ζηα 100 πξώηα bytes. πγθεθξηκέλα, δεζκεύνπλ θαη ρξεζηκνπνηνύλ δπλακηθέο δηαπξαγκαηεύζηκεο πόξηεο. Δπηπιένλ, θάπνηεο εθαξκνγέο, «κεηακθηέδνπλ» ηελ θίλεζή ηνπο, ρξεζηκνπνηώληαο θηιηθά πξσηόθνιια, όπσο ην HTTP, πξνθεηκέλνπ λα μεπεξάζνπλ ην ηνίρνο πξνζηαζίαο θαη λα θάλνπλ ηελ αλαγλώξηζε ηεο θίλεζήο ηνπο πην δύζθνιε. Πξάγκαηη, πνιύ επξέσο ρξεζηκνπνηνύκελεο εθαξκνγέο όπσο ην Bit Torrent θαη ην Skype, κπνξνύλ λα ξπζκηζηνύλ αλ ιεηηνπξγνύλ κέζσ ηεο ζύξαο 80. Δίλαη μεθάζαξν από ηα παξαπάλσ, όηη νη παξαδνζηαθέο κέζνδνη αλαγλώξηζεο ηεο θίλεζεο δηθηύνπ δελ είλαη πιένλ αθξηβείο. Γλσξίδνληαο απηό ην ζέκα, έρνπλ γίλεη αξθεηέο πξνζπάζεηεο από εξεπλεηέο γηα ηε δεκηνπξγία ελαιιαθηηθώλ ηξόπσλ αλαγλώξηζεο ηεο θίλεζεο δηθηύνπ. Δπεηδή ζήκεξα, ηα πξνγξάκκαηα δηακνηξαζκνύ αξρείσλ γλσξίδνπλ κεγάιε απήρεζε, γίλεηαη κεγάιε πξνζπάζεηα γηα ηελ θαηεγνξηνπνίεζε ηεο θίλεζεο απηήο. Οη αξρηθέο πξνζεγγίζεηο ρξεζηκνπνηνύζαλ βαζηά επηζεώξεζε ηνπ παθέηνπ θαη ππνγξαθέο ησλ εθαξκνγώλ, ώζηε λα κπνξέζνπλ λα απνδώζνπλ ηελ θίλεζε ζε θάπνηα εθαξκνγή[1][2]. 5

Λόγσ ηεο ζεκαζίαο ηεο θαηεγνξηνπνίεζεο ηεο θίλεζεο δηθηύνπ, γηα ηελ θαιύηεξε δηαρείξηζε ηνπ δηθηύνπ, αλαπηύμακε ην πξόγξακκα ζηελ πιαθέηα NetFPGA. Με ην πξόγξακκά καο, πξνζπαζνύκε λα αλαγλσξίζνπκε αλ έλα παθέην αθνινπζεί έλα από ηα παξαθάησ ηξία πξσηόθνιια. Σα HTTP, BitTorrent θαη Gnutella. Αξρηθά ςάρλνπκε κέζα ζην παθέην γηα ζπγθεθξηκέλα κελύκαηα ππνγξαθέο - πνπ κπνξνύλ λα ραξαθηεξίζνπλ έλα παθέην. Γηα εθαξκνγέο πνπ δεζκεύνπλ δπλακηθά ζύξεο, ηόηε κε ην πξόγξακκά καο απνθσδηθνπνηνύκε ηα παθέηα πνπ θηάλνπλ σο είζνδνο ζην πξόγξακκα θαη αλαδεηνύκε πεξεηαίξσ πιεξνθνξίεο. Σν πξόγξακκα έρεη γξαθεί ζε Verilog θαη πεξηιακβάλνληαη ηξία modules, πνπ πεξηέρνπλ ην θώδηθα γηα ηελ αλαγλώξηζε ησλ ηξηώλ απηώλ πξσηνθόιισλ. Δπίζεο, έρνπκε ηξνπνπνηήζεη έλα πξόγξακκα ζε C γηα λα κπνξνύκε λα παξαθνινπζνύκε ζε γξαθηθό πεξηβάιινλ ηελ θίλεζε ηνπ δηθηύνπ. Υξεζηκνπνηήζακε αθόκε, ηε γιώζζα Perl γηα ηε δεκηνπξγία ηεζη, γηα λα κπνξέζνπκε λα πξνζνκνηώζνπκε ηε ιεηηνπξγία ηνπ θώδηθα θαη ζην ηέινο λα έρνπκε ηε δπλαηόηεηα λα θάλνπκε δνθηκέο ζε πξαγκαηηθό hardware, δνθηκάδνληαο κηα εηδηθή θαηεγνξία ηεζη πνπ νλνκάδνληαη regress tests. Πεξηζζόηεξεο πιεξνθνξίεο αθνινπζνύλ ζηα παξαθάησ θεθάιαηα. πγθεθξηκέλα, ζην θεθάιαην 2 αλαθέξνληαη αλαιπηηθέο πιεξνθνξίεο γηα ηα ηξία πξσηόθνιια θαη ν ηξόπνο κε ηνλ νπνίν έρεη γίλεη ε πινπνίεζή ηνπο. ην θεθάιαην 3 γίλεηαη ε αμηνιόγεζε ηνπ ζπζηήκαηνο. Σέινο, ζην θεθάιαην 4 ππάξρνπλ ηα ζπκπεξάζκαηα θαη ζην θεθάιαην 5 ε βηβιηνγξαθία. 6

2. Σσέδιο και Υλοποίηζη ε απηό ην θεθάιαην, ζα παξνπζηαζηεί κηα νινθιεξσηηθή αλαθνξά γηα ην πξόγξακκα, ζπκπεξηιακβάλνληαο κηα ιεπηνκεξή πεξηγξαθή ησλ αιγνξίζκσλ πνπ ρξεζηκνπνηήζεθαλ θαη ιεπηνκέξεηεο πινπνίεζεο. 2.1 Καηηγοπιοποίηζη κςκλοθοπίαρ διαδικηύος. Σν πξόγξακκα παξαθνινπζεί ηελ θίλεζε πνπ θηάλεη ζηε ζύξα ηεο πιαθέηαο θαη ηελ θαηεγνξηνπνηεί. Ζ θαηεγνξηνπνίεζε ζα γίλεη ρξεζηκνπνηώληαο πιεξνθνξίεο ηόζν από ην header ηνπ παθέηνπ, όζν θαη από ην payload, δηόηη ην BitTorrent θαη ην Gnutella δελ έρνπλ ζηάληαξ ζύξεο πξννξηζκνύ θαη ρξεζηκνπνηνύλ ζπλήζσο ηηο ζύξεο πνπ ρξεζηκνπνηνύλ ηα πξσηόθνιια http θαη ftp. Δπίζεο, ζεκαληηθόο ιόγνο πνπ γίλεηαη αλαδήηεζε θαη ζην πεξηερόκελν ηνπ παθέηνπ είλαη όηη ζηελ πιαθέηα θηάλνπλ ηαπηόρξνλα πνιιά παθέηα από ην αξρείν. ρεκαηηθή αλαπαξάζηαζε ηεο αξρηηεθηνληθήο ηνπ ζπζηήκαηνο θαίλεηαη ζηελ εηθόλα 1. Ο αιγόξηζκνο θαηεγνξηνπνίεζεο ιεηηνπξγεί σο εμήο: επεμεξγαδόκαζηε θάζε παθέην πνπ θηάλεη από ην δίθηπν αθνινπζηαθά. Γηα θάζε παθέην πνπ έρνπκε ιάβεη, ζηελ αξρή ςάρλσ ζην header ηνπ παθέηνπ γηα λα δσ αλ κπνξώ λα πάξσ πιεξνθνξίεο εύθνια. ηε ζπλέρεηα, αλ δε βξσ θάπνηα «ελδηαθέξνπζα» πιεξνθνξία, ηόηε ζα ζπλερίζσ ηελ αλαδήηεζε ζην payload ηνπ αξρείνπ, ώζηε λα βξσ ηηο απαξαίηεηεο πιεξνθνξίεο γηα ηελ αλαγλώξηζε ηνπ πξσηνθόιινπ[1][2]. Κάζε module είλαη ππεύζπλν γηα ηελ αλαγλώξηζε ελόο ζπγθεθξηκέλνπ πξσηνθόιινπ. ηα modules απηά ππάξρνπλ ηξείο δηαθνξεηηθνί αιγόξηζκνη έλαο γηα θάζε πξσηόθνιιν. Virtex II Pro FPGA 1GE 1GE 1GE 1GE MAC0-4 Input Arbiter Output Port Lookup Ethernet IP LPM IP ARP IP Checksum HTTP Get Filter BitTorrent Filter State Machine Output Queues Registers PCI GUI Δηθόλα 1. Αξρηηεθηνληθή ζπζηήκαηνο 7

2.2 Δπεξήγηζη ππυηοκόλλυν και Υλοποίηζη Γηα ηε δεκηνπξγία ηνπ ηαμηλνκεηή ρξεζηκνπνίεζα ηξία modules ηα http_get_filter, BitTorrent_filter, gnutella_filter, ηα νπνία πεξηέρνπλ ηνλ θώδηθα γηα ηελ αλαγλώξηζε ησλ ζπγθεθξηκέλσλ πξσηνθόιισλ. 2.2.1 Http_get_filter Σν http είλαη ην πξσηόθνιιν ηνπ δηαδηθηύνπ. Δίλαη ηαπηόρξνλα απιό θαη ηζρπξό. Δίλαη ην ζηάληαξ πξσηόθνιιν πνπ ρξεζηκνπνηείηαη γηα ηε κεηαθνξά εγγξάθσλ δηα κέζσ ηνπ δηαδηθηύνπ, αλ θαη έρεη ζρεδηαζηεί γηα λα ππνζηεξίδεη θαη άιινπο ηύπνπο αξρείσλ εθηόο από έγγξαθα.[15] Λεηηνπξγεί δηα κέζσ κηα ζύλδεζεο TCP/IP, ζπλήζσο ρξεζηκνπνηώληαο ηελ ζύξα 80, παξόιν πνπ ε ζπγθεθξηκέλε ζύξα κπνξεί λα παξαθακθζεί θαη λα ρξεζηκνπνηεζεί θάπνηα άιιε. Ύζηεξα από κηα επηηπρεκέλε ζύλδεζε, ν πειάηεο (client) κεηαδίδεη έλα κήλπκα εξσηήκαηνο ζε έλαλ δηαθνκηζηή (server), ν νπνίνο απαληά κε έλα κήλπκα. Σα κελύκαηα ΖΣΣP κπνξνύλ λα δηαβαζηνύλ από ηνλ άλζξσπν. Δπίζεο, έλαο δηαθνκηζηήο κπνξεί λα ιεηηνπξγήζεη ρεηξνθίλεηα, δίλνληαο ν ρξήζηεο ηελ εληνιή telnet server 80. H εηθόλα 1 δείρλεη ζρεκαηηθά ηνλ ηξόπν αιιειεπίδξαζεο ελόο πειάηε κε έλαλ δηαθνκηζηή, πξνθεηκέλνπ ν πξώηνο λα ιάβεη έλα αξρείν.. Εικόνα 1. Σχηματική αναπαράςταςη επικοινωνίασ client-server. To πξσηόθνιιν HTTP νξίδεη 9 κεζόδνπο, επηδεηθλύνληαο ηελ επηζπκεηή ελέξγεηα πνπ ζα δηεμαρζεί ζηνλ επηιεγκέλν αλαγλσξηζκέλν πόξν. Σν ηη ν ζπγθεθξηκέλνο πόξνο αλαπαξηζηά γηα ηα ππάξρνληα δεδνκέλα ή γηα δεδνκέλα πνπ δεκηνπξγνύληαη δπλακηθά, εμαξηάηαη από ηελ πινπνίεζε ηνπ server. πρλά, νη πόξνη αληηζηνηρνύλ ζε έλα αξρείν ή ζηελ έμνδν ελόο εθηειέζηκνπ αξρείνπ πνπ θηινμελείηαη ζην δηαθνκηζηή. Οη 9 κέζνδνη[15] είλαη νη παξαθάησ: 8

HEAD Ρσηά γηα κηα απάληεζε πνπ ζα είλαη παλνκνηόηππε ζε απηήλ πνπ ηαηξηάδεη ζε κηα εξώηεζε GET. Απηό είλαη ρξήζηκν γηα ηελ αλάθηεζε ζπλνδεπηηθώλ πιεξνθνξηώλ πνπ είλαη γξακκέλεο ζην header ησλ κελπκάησλ απάληεζεο, ρσξίο λα ρξεηάδεηαη λα κεηαθεξζεί νιόθιεξν ην πεξηερόκελν. GET Εεηά ηελ αλαπαξάζηαζε ηνπ ζπγθεθξηκέλνπ πόξνπ. Οη αηηήζεηο πνπ ρξεζηκνπνηνύλ GET, δελ πξέπεη λα έρνπλ ηε ζεκαζία ηεο αλάιεςεο κηαο ελέξγεηαο, εθηόο από ηελ αλάθηεζε. POST Τπνβάιεη δεδνκέλα γηα επεμεξγαζία, (γηα παξάδεηγκα κέζσ κηαο θόξκαο επεμεξγαζίαο HTML) γηα ηνπο πξνζδηνξηζκέλνπο πόξνπο. Σα δεδνκέλα πεξηιακβάλνληαη ζην ζώκα ηεο αίηεζεο. Απηό κπνξεί λα νδεγήζεη ζηε δεκηνπξγία ελόο λένπ πόξνπ, ή ηελ ελεκέξσζε ήδε ππαξρόλησλ πόξσλ ή θαη ηα δύν. PUT Φνξηώλεη κηα αλαπαξάζηαζε ηνπ ζπγθεθξηκέλνπ πόξνπ. DELETE Γηαγξάθεη ην ζπγθεθξηκέλν πόξν. TRACE ηέιλεηαη πίζσ ζηνλ πειάηε ην ιεθζέλ αίηεκα, έηζη ώζηε ν πειάηεο λα δηαπηζηώζεη εάλ έγηλαλ αιιαγέο ή πξνζζήθεο από ελδηάκεζνπο δηαθνκηζηέο. OPTIONS Δπηζηξέθεη ηελ κέζνδν HTTP ηελ νπνία ππνζηεξίδεη ν δηαθνκηζηήο γηα ην ζπγθεθξηκέλν URL. Απηό κπνξεί λα ρξεζηκνπνηεζεί γηα λα ειεγρζεί ε ιεηηνπξγηθόηεηα ηνπ δηαθνκηζηή, δεηώληαο «*», αληί γηα έλαο ζπγθεθξηκέλν πόξν. CONNECT Μεηαηξέπεη ην αίηεκα ζύλδεζεο γηα κηα δηαθαλή ζήξαγγα TCP/IP, ζπλήζσο γηα ηε δηεπθόιπλζε ηεο θξππηνγξαθεκέλεο επηθνηλσλίαο (HTTPS), κέζσ κηαο κε θξππηνγξαθεκέλεο κεζνιάβεζεο HTTP. PATCH Υξεζηκνπνηείηαη γηα λα εθαξκόζεη κεξηθέο ηξνπνπνηήζεηο ζε έλαλ πόξν. Σν module http_get_filter ιεηηνπξγεί σο έλα θαηλνύξην κπινθ πξνεπεμεξγαζηή (preprocessor block), κε ζθνπό λα αλαγλσξίζεη παθέηα πνπ πεξηέρνπλ ηε ιέμε GET. Σν πξσηόθνιιν HTTP ρξεζηκνπνηεί ηε κέζνδν GET request γηα λα ζηείιεη URL requests ζε έλαλ server. Σα παθέηα πνπ πεξηέρνπλ έλα GET request, μερσξίδνπλ, δηόηη πεξηέρνπλ ηε ιέμε GET ζηελ αξρή ηνπ payload. 9

Γηα ηελ πινπνίεζε ηνπ αιγνξίζκνπ, γηα ην πξσηόθνιιν HTTP δεκηνύξγεζα κηα FSM, ε νπνία πεξηιακβάλεη 7 θαηαζηάζεηο (εηθόλα 2). Ο αιγόξηζκνο ιεηηνπξγεί σο εμήο: ηελ αξρή ειέγρσ αλ ην κέγεζνο ηνπ παθέηνπ είλαη αξθεηά κεγάιν ώζηε λα πεξηέρεη ην STRING GET. Ύζηεξα, ειέγρσ γηα ην πξσηόθνιιν TCP, ην νπνίν ρξεζηκνπνηείηαη γηα λα κεηαθέξεη HTTP. ηε ζπλέρεηα, ν δεύηεξνο έιεγρνο πνπ γίλεηαη αλ ε ζύξα πξννξηζκνύ πνπ ρξεζηκνπνηεί ην ζπγθεθξηκέλν παθέην, είλαη ε ζύξα 80. Έπεηηα, ειέγρσ ην κέγεζνο ηνπ TCP header, δηόηη δηαθέξεη ζε κέγεζνο γηα παθέηα GET, πνπ πξνέξρνληαη από δηαθνξεηηθά ιεηηνπξγηθά ζπζηήκαηα. Γηα παξάδεηγκα TCP headers ζηα Linux ζπκπεξηιακβάλνπλ έλα πεδίν επηινγήο 12 bytes, ελώ ηα ην παξέρνπλ. Γηα απηόλ ινηπόλ ηνλ ηξόπν γίλεηαη έιεγρνο αλ πξόθεηηαη γηα παθέην από Linux ή γηα παθέην από Windows. Γηα λα ειέγμσ αλ ππάξρεη ην GET ζην παθέην, θάλσ αλαδήηεζε ζην payload ηνπ. ηα ζπζηήκαηα Linux, ην GET βξίζθεηαη ζηα bits 8 έσο 31 ηεο 9 εο ιέμεο. Αληίζεηα ζηα Windows πνπ δελ ππάξρεη απηή ε επηινγή ησλ 12 bits, ην GET, κπνξεί λα βξεζεί ζε πνιιαπιέο ιέμεηο. Σα γξάκκαηα GE, βξίζθνληαη ζηα πξώηα 2 bytes ηεο 7 εο ιέμεο θαη ην γξάκκα T, βξίζθεηαη ζην πξώην byte ηεο 8 εο. Με ηελ θαηάζηαζε WIN_GET, ειέγρσ κόλν γηα ηα γξάκκαηα GE, θαη κε ηελ θαηάζηαζε UNIX_GET, ειέγρσ γηα όιν ην STRING GET. Ζ αξρηθή θαηάζηαζε ηεο FSM είλαη ε WAIT_IP_PROTO_LEN, ε νπνία πεξηκέλεη γηα ην κήθνο ηνπ IP παθέηνπ θαη ην πξσηόθνιιν ηνπ IP header λα είλαη παξόληα ζην δίαπιν. Οη θαηαζηάζεηο WORD_3 θαη WORD_7 δελ επεμεξγάδνληαη δεδνκέλα, όκσο ρξεζηκνπνηνύληαη γηα λα παξαθάκςνπκε headers ησλ παθέησλ πνπ βξίζθνληαη πάλσ ζην δίαπιν. Αλ ζε θάπνηα θαηάζηαζε ζπκβεί θάπνην ιάζνο ζην λ έιεγρν ηνπ παθέηνπ, ηόηε ε επόκελε θαηάζηαζε ηεο FSM ζα είλαη ε αξρηθή, (WAIT_IP_PROTO_LEN) θαη ζα πεξηκέλνπκε γηα έλα λέν παθέην. Υξεζηκνπνηώ θαη κηα FIFO γηα λα απνζεθεύσ ηα απνηειέζκαηα από ηνλ έιεγρν ησλ παθέησλ, ηα νπνία ζηε ζπλέρεηα ρξεζηκνπνηνύληαη από ην module op_lut_process_sm. Ο ξόινο ηνπ op_lut_process_sm είλαη λα ρξεζηκνπνηεί ηα δεδνκέλα πνπ ζπιιέγνληαη από ηα κπινθ πξνεξγαζίαο (preprocess blocks), γηα λα θαζνξίζεη ηε ζσζηή πόξηα-εο εμόδνπ ηελ νπνία έλα παθέην ζα πξέπεη λα πάξεη θαη ζηε ζπλέρεηα λα πξνσζήζεη ην παθέην ζην module output_queues. ηελ εηθόλα 3 θαίλεηαη ε κεραλή πεπεξαζκέλσλ θαηαζηάζεσλ (FSM) ηνπ module op_lut_process_sm. Ζ αξρηθή θαηάζηαζε είλαη ε WAIT_PREPROCESS_RDY, ε νπνία πεξηκέλεη λα έσο όηνπ όια ηα κπινθ πξνεξγαζίαο, π.ρ. eth_parser, http_get_filter, θηι λα έρνπλ ηειεηώζεη ηνπο ξόινπο πξνεξγαζίαο γηα ην ζπγθεθξηκέλν παθέην πάλσ ζην δίαπιν (data bus). Ζ επόκελε θαηάζηαζε γηα ηα παθέηα πνπ δελ πεξηέρνπλ ιάζε είλαη ε MOVE_MODULE_HDRS. Απηή ε θαηάζηαζε ειέγρεη πνηά/εο ζύξα/εο εμόδνπ ζα ζηαιζεί έλα παθέην, ηξνπνπνηώληαο ην θσδηθνπνηεκέλν πεδίν ηεο ζύξαο, ζε one-hot θσδηθνπνίεζε, ζην IOQ packet header. 10

Δπίζεο, έρνπλ γίλεη αιιαγέο θαη ζηνλ θώδηθα ηεο θαηάζηαζεο WAIT_PREPROCESS_RDY, γηα λα ελεκεξώλεη ην πεδίν ηεο ζύξαο εμόδνπ ηνπ IOQ header, ώζηε ηα παθέηα πνπ πεξηέρνπλ ηε ιέμε GET λα αληηγξάθνληαη ζην ζύζηεκα ππνδνρήο (host system), δηακέζνπ κηαο CPU πνπ δηαβηβάδεη νπξέο. Οη ππόινηπεο θαηαζηάζεηο θξνληίδνπλ ώζηε λα ελεκεξώλνπλ ηηο ζσζηέο Ethernet MAC δηεπζύλζεηο, ην πεδίν ρξόλνπ δσήο (time to live), ην άζξνηζκα ειέγρνπ ηεο IP (IP checksum), θαζώο ηα παθέηα πεξλνύλ ζην module output_queues. Δηθόλα 2. FSM γηα HTTP πξσηόθνιιν. Δηθόλα 3. FSM γηα ην module op_lut_process_sm. 2.2.2 BitTorrent_filter Σν πξσηόθνιιν BitTorrent απνηειεί κηα θαηεγνξία κνληέινπ ε νπνία νλνκάδεηαη P2P(peer to peer) δηακνηξαζκόο αξρείσλ θαη δνπιεύεη ζην πξσηόθνιιν TCP. Σν δίθηπν ηνπ BitTorrent απνηειείηαη από πειάηεο (clients) θαη έλαλ θεληξηθό δηαθνκηζηή (server). Οη πειάηεο ζπλδένληαη κεηαμύ ηνπο άκεζα θαη ιακβάλνπλ κέξε ελόο απινύ αξρείνπ. Ο θεληξηθόο δηαθνκηζηήο, ν νπνίνο νλνκάδεηαη tracker, ζπληνλίδεη κόλν ηηο πξάμεηο ησλ πειαηώλ θαη δηαρεηξίδεηαη ηηο ζπλδέζεηο [3]. Έλαο BitTorrent δηαθνκηζηήο, δελ είλαη ππεύζπλνο γηα λα εληνπίζεη ηα αξρεία πνπ αλαδεηνύλ νη πειάηεο. Αληί απηνύ, έλαο BitTorrent πειάηεο, εληνπίδεη ην αξρείν torrent πνπ επηζπκεί κέζσ ηνπ δηαδηθηύνπ, θαη μεθηλά ην θαηέβαζκα ηνπ αξρείνπ, παηώληαο ηνλ ππεξζύλδεζκν. Σν πξσηόθνιιν BitTorrent είλαη έλα θεληξηθνπνηεκέλν 11

πξσηόθνιιν, ζην νπνίν θύξηα ζέζε θαηέρεη ν tracker, δηόηη απηόο είλαη ππεύζπλνο γηα λα ζπληνλίζεη ηνπο clients. ηελ εηθόλα 4 θαίλεηαη κηα ζρεκαηηθή αλαπαξάζηαζε ελόο δηθηύνπ BitTorrent. ηελ εηθόλα απηή θαίλεηαη όηη όινη νη πειάηεο ζπλδένληαη κε ην δηαθνκηζηή πξνθεηκέλνπ λα εληνπίζνπλ ην αξρείν πνπ επηζπκνύλ. Ο δηαθνκηζηήο ζπληνλίδεη ηηο ζπλδέζεηο κεηαμύ ησλ πειαηώλ ώζηε λα γίλεη ε ιήςε ησλ παθέησλ. Δπίζεο, θαίλεηαη θαη ε ηδηόηεηα ηνπ θάζε πειάηε. Γειαδή, εάλ είλαη Peer, Seeder, ή Leecher. Peer είλαη ν ρξήζηεο πνπ «θαηεβάδεη» έλα αξρείν αιιά θαη παξάιιεια «αλεβάδεη». Γειαδή, επηηξέπεη ζε άιινπο πειάηεο λα ιάβνπλ παθέηα από απηόλ. Seeder είλαη ν ρξήζηεο, ν νπνίνο κόλν δίλεη παθέηα ζε άιινπο πειάηεο θαη Leecher είλαη ν ρξήζηεο πνπ κόλν ιακβάλεη παθέηα. Γηα λα αλαγλσξίζνπκε ηελ θίλεζε ηνπ BitTorrent, δίλνπκε έκθαζε ζηε ιήςε παθέησλ κε δεδνκέλα κεηαμύ ησλ πειαηώλ, κόλν όηαλ ε επηθνηλσλία κεηαμύ ησλ πειαηώλ θαη ηνπ δηαθνκηζηή είλαη ακειεηέα. Εικόνα 4. Διάγραμμα δικτφου BitTorrent O tracker αθνινπζεί ην πξσηόθνιιν http, ην νπνίν αλαιύεηαη ζην module http_get_filter. Δπίζεο, έλα tracker request απνηειείηαη από ηα εμήο κέξε: info hash key, peer id, port, event.[16] Info hash key: Δίλαη κηα ιέμε (string) κεγέζνπο 20 bytes SHA1 hash ηεο ηηκήο ηνπ πιεξνθνξηαθνύ θιεηδηνύ από ην αξρείν Metainfo. Κάζε ρξήζηεο δεκηνπξγεί ην δηθό ηνπ info hash key ζηελ αξρή θάζε δηαδηθαζίαο ιήςεο ελόο αξρείνπ Torrent. Γηα θάζε αξρείν torrent είλαη κνλαδηθό θαη κπνξεί λα ρξεζηκνπνηεζεί σο αλαγλσξηζηηθό ηνπ αξρείνπ. Peer id: Δίλαη κηα ιέμε (string) κεγέζνπο 20 bytes, ην νπνίν ν ρξήζηεο ρξεζηκνπνηεί σο αλαγλσξηζηηθό. 12

Port: Δίλαη ν αξηζκόο ηεο ζύξαο πνπ ν πειάηεο ζπλήζσο αθνύεη. Σν πην ζπλεζηζκέλν εύξνο ζπξώλ πνπ είλαη δεζκεπκέλεο γηα ην BitTorrent είλαη κεηαμύ 6881 6999. Ο πειάηεο κπνξεί λα δηαιέμεη λα ηα παξαηήζεη αλ δε κπνξεί λα ρξεζηκνπνηήζεη κηα ζύξα από ην ζπγθεθξηκέλν εύξνο. Event: Δάλ είλαη θαζνξηζκέλν, ηόηε πξέπεη λα είλαη έλα από ηα: started, completed, stopped (ή κπνξεί λα είλαη θαη empty, ην νπνίν είλαη ην ίδην κε ην λα κελ είλαη θαζνξηζκέλν). Started: To πξώην request ζηνλ tracker, πξέπεη λα ζπκπεξηιακβάλεη ην event key θαζώο επίζεο θαη ηελ ηηκή ηνπ. Stopped: Πξέπεη λα ζηαιεί ζηνλ tracker, αλ ν πειάηεο θιείλεη ηε ζύλδεζε κε ην δηαθνκηζηή επγεληθά. Completed: Πξέπεη λα ζηαιεί ζηνλ tracker, όηαλ ηειεηώζεη ε ιήςε ηνπ αξρείνπ. Γελ πξέπεη λα απνζηαιεί αλ ε ιήςε ηνπ αξρείνπ ήηαλ ήδε νινθιεξσκέλε ζην 100%, όηαλ άξρηζε ν πειάηεο. Ο tracker απαληά κε ηα εμήο: failure reason, interval, complete, incomplete. Failure reason: Δάλ είλαη παξώλ ηόηε δε κπνξεί λα ππάξρεη θάπνην άιιν θιεηδί. Ζ ηηκή ηνπ (string) είλαη νξαηή ζηνλ άλζξσπν θαη πεξηγξάθεη ην ιόγν πνπ δε κπόξεζε λα γίλεη ε ιήςε ηνπ αξρείνπ. Interval: Πεξηγξάθεη ην ρξόλν ζε δεπηεξόιεπηα πνπ ζα πξέπεη λα πεξηκέλεη ν πειάηεο κεηαμύ ησλ απνζηνιώλ ζηνλ δηαθνκηζηή ησλ επηζπκηώλ (requests). Complete: Δίλαη έλαο αθέξαην αξηζκόο πνπ θαλεξώλεη ηνλ αξηζκό ησλ πειαηώλ πνπ έρνπλ νιόθιεξν ην αξρείν Torrent. Οη ρξήζηεο απηνί νλνκάδνληαη Peers. Incomplete: Δίλαη έλαο αθέξαηνο αξηζκόο ν νπνίνο θαλεξώλεη πόζν άηνκα δελ έρνπλ ην αξρείν νινθιεξσκέλν θαη ην θαηεβάδνπλ. Οη ρξήζηεο απηνί νλνκάδνληαη Leechers. Έλαο πειάηεο πξέπεη λα δηαηεξεί πιεξνθνξίεο θαηάζηαζεο γηα θάζε ζύλδεζε πνπ έρεη κε έλαλ Peer. Οη θαηαζηάζεηο απηέο είλαη: choked, interested. 13

Choked Δάλ ή όρη έλαο απνκαθξπζκέλνο Peer έρεη ηνλ πειάηε απνθιεηζκέλν. Όηαλ έλαο Peer εκπνδίδεη έλαλ πειάηε, ηόηε ζεκαίλεη όηη δελ ζα απαληεζεί θαλέλα εξώηεκα, κέρξηο όηνπ ν πειάηεο λα ζηακαηήζεη λα είλαη απνθιεηζκέλνο. Ο πειάηεο δελ πξέπεη λα πξνζπαζεί λα ζηέιλεη αηηήζεηο (requests), θαη πξέπεη λα ζεσξεζεί όηη όιεο ηηο εθθξεκείο αηηήζεηο ζα απνξξηθζνύλ ζηνλ Peer. Με απιά ιόγηα όηαλ έλαο πειάηεο εκπνδίδεηαη από έλαλ peer, ηόηε δε κπνξεί λα θαηεβάζεη ηκήκαηα ηνπ αξρείνπ torrent πνπ επηζπκεί, κέρξη λα αιιάμεη ε θαηάζηαζή ηνπ ζε unchoked. Interested Δάλ ή όρη έλαο απνκαθξπζκέλνο Peer, ελδηαθέξεηαη γηα θάηη πνπ κπνξεί λα πξνζθέξεη έλαο πειάηεο. Απηή είλαη κηα αλαθνίλσζε ηελ νπνία ν απνκαθξπζκέλνο Peer ζα αξρίζεη λα αηηείηαη όηαλ ν πειάηεο ζηακαηήζεη λα εκπνδίδεηαη (unchoked). Οη κεηαβιεηέο πνπ πεξηγξάθνπλ ηηο θαηαζηάζεηο ελόο πειάηεο θαη ελόο απνκαθξπζκέλνπ Peer είλαη: am_choking: Δάλ ν πειάηεο εκπνδίδεη ηνλ Peer. am_interested: Ο πειάηεο ελδηαθέξεηαη γηα ηνλ Peer. peer_choking: O peer εκπνδίδεη ην ζπγθεθξηκέλν πειάηε. peer_interested: Ο peer ελδηαθέξεηαη γηα ην ζπγθεθξηκέλν πειάηε. Όηαλ αξρίδεη ε ζύλδεζε, ηόηε ν πειάηεο έρεη ηηο ηηκέο choked θαη not interested. Γειαδή, am_ckoking =1, am_interested = 0, peer_choking = 1, peer_interested = 0. Έλα παθέην κπνξεί λα ιεθζεί από ηνλ πειάηε, όηαλ ν πειάηεο ελδηαθέξεηαη γηα έλαλ ζπγθεθξηκέλν peer θαη απηόο δελ εκπνδίδεη ηνλ πειάηε. Δίλαη ζεκαληηθό γηα ηνλ πειάηε λα θξαηά ηνπο peers ελεκεξσκέλνπο γηα ην αλ ελδηαθέξεηαη ή όρη γηα απηνύο. Απηέο νη πιεξνθνξίεο πξέπεη λα ελεκεξώλνληαη δηαξθώο γηα θάζε απνκαθξπζκέλν peer, αθόκα θαη αλ ν πειάηεο είλαη κπινθαξηζκέλνο. Απηό δίλεη ηε δπλαηόηεηα ζηνπο peers λα γλσξίδνπλ αλ έλαο πειάηεο ζα αξρίζεη λα θαηεβάδεη έλα αξρείν κόιηο βξεζεί ζε θαηάζηαζε unchoked. Γηα λα αξρίζεη ε επηθνηλσλία κεηαμύ ελόο πειάηε θαη ηνπ δηαθνκηζηή πξέπεη λα απνζηαιεί έλα κήλπκα από ηνλ πειάηε ζην δηαθνκηζηή, ην νπνίν νλνκάδεηαη handshake. Μεηά από ην handshake αθνινπζνύλ άιια κελύκαηα κε πξνθαζνξηζκέλν κέγεζνο. Έλα κήλπκα ηύπνπ handshake έρεη ηελ αθόινπζε κνξθή: Handshake: <pstrlen><pstr><reserved><info_hash_key><peer_id> psrt: Δίλαη κία ιέμε (string) αλαγλσξηζηηθή ηνπ πξσηνθόιινπ. Γειαδή, έρεη ηελ ηηκή BitTorrent protocol. 14

pstrlen: Δίλαη κία ιέμε(string)κεγέζνπο όζν ην psrt, σο κηα απιή ζεηξά από bytes. Γειαδή έρεη ηελ ηηκή 19. reserved: Δίλαη 8 δεζκεπκέλα bytes. Όιεο νη ηξέρνπζεο εθαξκνγέο έρνπλ κεδεληθά ζε απηά ηα bytes. Κάζε bit από απηά ηα bytes κπνξεί λα ρξεζηκνπνηεζεί γηα λα αιιάμεη ηε ζπκπεξηθνξά ηνπ πξσηνθόιινπ. info_hash: Δίλαη κία ιέμε (string) κεγέζνπο 20 bytes, ηύπνπ SHA1 hash ηνπ info θιεηδηνύ ζην αξρείν Metafile. Γηα θάζε αξρείν torrent είλαη κνλαδηθό θαη κπνξεί λα ρξεζηκνπνηεζεί σο αλαγλσξηζηηθό ηνπ αξρείνπ. Δίλαη ην ίδην info hash πνπ κεηαδίδεηαη ζηα tracker requests. peer_id: Δίλαη κηα ιέμε (string) κεγέζνπο 20 bytes, ην νπνίν ρξεζηκνπνηείηαη σο κνλαδηθό αλαγλσξηζηηθό γηα ηνλ πειάηε. Δίλαη ζπλήζσο ην ίδην κε ην peer id πνπ κεηαδίδεηαη ζην tracker request. (δελ ζπκβαίλεη πάληα απηό όκσο π.ρ. ζην πξόγξακκα Azureus ππάξρεη ε δπλαηόηεηα αλσλπκίαο ηνπ πειάηε.) Καηά ηελ πξαγκαηνπνίεζε ηεο ζύλδεζεο κεηαμύ ηνπ πειάηε θαη ηνπ δηαθνκηζηή ην πξώην κήλπκα πνπ ζηέιλεηαη είλαη ην handshake. O ιήπηεο, κπνξεί λα πεξηκέλεη γηα ην handshake ηνπ πειάηε, αλ είλαη ηθαλόο λα δηακνηξάδεη πνιιαπιά αξρεία torrents ηαπηόρξνλα. Παξόια απηά, ν ιήπηεο πξέπεη λα απαληήζεη ην ζπληνκόηεξν δπλαηόλ, όηαλ δεη ην info_hash ηκήκα ηνπ handshake. Σν peer id πηζαλώο λα κεηαδνζεί όηαλ ν ιήπηεο ζηείιεη ην δηθό ηνπ handshake. Σν ζηνηρείν ειέγρνπ ΝΑΣ ηνπ δηαθνκηζηή (NAT-checking feature), δελ ζηέιλεη ην πεδίν ηνπ peer id ηνπ handshake. Δάλ ν ηδξπηήο κηαο ζύλδεζεο ιάβεη έλα κήλπκα handshake κε info_hash θιεηδί ην νπνίν δελ είλαη ηε ζπγθεθξηκέλε ρξνληθή ζηηγκή δηαζέζηκν, ηόηε αλαγθαζηηθά ν πειάηεο ζα πξέπεη λα θιείζεη ηε ζύλδεζε. Δάλ ν ηδξπηήο, ιάβεη έλα handshake ζην νπνίν ην peer id δελ ηαηξηάδεη κε ην αλακελόκελν peer id, ηόηε ν ηδξπηήο αλακέλεηαη λα θιείζεη ηε ζύλδεζε. πλήζσο, ν ηδξπηήο ιακβάλεη ηηο πιεξνθνξίεο ηνπ peer - ρξήζηε πνπ έρεη νινθιεξσκέλν ην αξρείν torrent κέζσ ηνπ δηαθνκηζηή, ν νπνίνο πεξηέρεη ην peer id πνπ είρε θαηαγξαθεί από ηνλ peer. To peer id από ην δηαθνκηζηή θαη από ην κήλπκα handshake αλακέλεηαη λα ηαηξηάδνπλ. Γηα λα αλαγλσξίζνπκε ην πξσηόθνιιν BitTorrent, πξώηα εμεηάδνπκε αλ ππάξρεη ην αίηεκα HTTP GET. Αθνινύζσο, εμεηάδνπκε αλ ππάξρεη κέζα ζην παθέην ε ιέμε BitTorrent protocol. Ύζηεξα, εάλ ην κέγεζνο ηεο ιέμεο είλαη 19 bytes. Έπεηηα, ν επόκελνο έιεγρνο πνπ πξέπεη λα γίλεη λα ζπγθξίλνπκε ηo peer_id κε ην tracker_id θαη ην tracker_hash_key κε ην peer_hash_key θαη λα δηαπηζηώζνπκε αλ έρνπλ ηηο ίδηεο ηηκέο. Αθνύ αλαγλσξίζνπκε όηη πξόθεηηαη γηα παθέην BitTorrent, ηόηε ην απνζεθεύνπκε ζε έλαλ hash table, o νπνίνο βαζίδεηαη ζηε κέζνδν cuckoo hashing.[10] Ζ κέζνδνο cuckoo hashing ιεηηνπξγεί σο εμήο: Υξεζηκνπνηνύκε δύν κεζόδνπο hash functions, αληί γηα κηα. Με απηόλ ηνλ ηξόπν παξέρνληαη δύν πηζαλέο ζέζεηο ζηνλ hash table γηα θάζε θιεηδί. ηε δηθηά καο πεξίπησζε ην θιεηδί είλαη ην 15

hash key, επεηδή είλαη κνλαδηθό γηα θάζε ρξήζηε, θαη γηα θάζε αξρείν. Όηαλ πξνζηίζεηαη έλα θαηλνύξην θιεηδί, ηόηε ρξεζηκνπνηείηαη έλαο άπιεζηνο αιγόξηζκνο. Γειαδή, ην λέν θιεηδί ηνπνζεηείηε ζε κία από ηηο δύν πηζαλέο ηνπνζεζίεο, δηώρλνληαο θάζε θιεηδί ην νπνίν κπνξεί λα βξίζθεηαη ζε απηή ηε ζέζε. Σν εθηνπηζκέλν θιεηδί ηνπνζεηείηαη ζηελ ελαιιαθηηθή ζέζε, πάιη δηώρλνληαο ην θιεηδί πνπ κπνξεί λα βξίζθεηαη εθεί, έσο όηνπ βξεζεί κηα ειεύζεξε ζέζε ή ε δηαδηθαζία βξεζεί ζε έλαο αηέξκνλν βξόγρν. ηελ ηειεπηαία πεξίπησζε ν πίλαθαο μαλαρηίδεηαη ρξεζηκνπνηώληαο ηηο δύν ζπλαξηήζεηο hash functions. H δηαδηθαζία αλαδήηεζεο, απαηηεί αλαδήηεζε δύν κόλν ζεκείσλ ζηνλ πίλαθα hash table, ε νπνία ζηε ρεηξόηεξε πεξίπησζε απαηηεί ρξόλν γξακκηθό. Γειαδή, O(n). Γλσζηέο εθαξκνγέο πνπ ρξεζηκνπνηνύλ ην ζπγθεθξηκέλν πξσηόθνιιν είλαη νη utorrent, Azureus, KTorrent, Deluge. Γηα ηελ πινπνίεζε ηνπ αιγνξίζκνπ γηα ην πξσηόθνιιν BitTorrent, ρξεζηκνπνίεζα κηα FSM. (εηθόλα 5). H FSM δηεμάγεη 9 ζηάδηα επεμεξγαζίαο ζε έλα παθέην, πξνθεηκέλνπ λα αλαγλσξίζεη αλ πξόθεηηαη γηα παθέην BitTorrent. Ζ αξρηθή θαηάζηαζε ηεο FSM είλαη ε WAIT_IP_PROTO_LEN, ε νπνία πεξηκέλεη ην κήθνο ηνπ IP παθέηνπ θαη ηα πεδία ηνπ πξσηνθόιινπ λα είλαη παξόληα ζην δίαπιν. Ο πξνεπεμεξγαζηήο ειέγρνπ, εηδνπνηεί ην module BitTorrent_filter, όηαλ ηα δεδνκέλα βξίζθνληαη πάλσ ζην δίαπιν, θαη ε δηαδηθαζία μεθηλά. Οη ππόινηπεο θαηαζηάζεηο κέρξη θαη ηελ έθηε, ηελ θαηάζηαζε UNIX_GET, είλαη ίδηεο κε ην module http_get_filter, δηόηη ν δηαθνκηζηήο ρξεζηκνπνηεί ην πξσηόθνιιν HTTP. Ζ έβδνκε θαηάζηαζε είλαη ε TRACKER_EVENT. ε απηήλ ηελ θαηάζηαζε, ειέγρνπκε αλ ε δηαδηθαζία ιήςεο ελόο παθέηνπ torrent έρεη αξρίζεη, είλαη ζηακαηεκέλε ή ε ιήςε έρεη νινθιεξσζεί. Έπεηηα, αθνινπζεί ε θαηάζηαζε HANDSHAKE. ηελ θαηάζηαζε απηή ειέγρνπκε αλ ην tracker_id είλαη ίδην κε ην peer_id θαη εάλ ην tracker_hash_key είλαη ίδην κε ην peer_hash_key. Σέινο, αθνύ έρεη δηαπηζησζεί όηη ην παθέην είλαη ηύπνπ BitTorrent, ην απνζεθεύνπκε ζηνλ hash table θαη ζε κία FIFO. Wait IP_pro_to_Len Unix GET Word_3 Tracker event Check DST_port Handshake Win GET Save packet Word_7 Εικόνα 5. FSM για BitTorrent πρωτόκολλο. 16

Ζ εηθόλα 6 δείρλεη ζρεκαηηθά ηνλ ηξόπν ιεηηνπξγίαο γηα ηελ αλαγλώξηζε ελόο παθέηνπ πνπ ρξεζηκνπνηεί ην πξσηόθνιιν BitTorrent. Tracker Client LAN Switch NetFPGA as Application Monitoring Router Internet Peers Torrent ID Torrent File Packets Traffic ID1 File1 ID2 File2 ID3 File3 Εικόνα 6. Συνδζςεισ BitTorrent. 2.2.3 Gnutella_filter Σν πξσηόθνιιν gnutella είλαη έλα απνθεληξσπνηεκέλν πξσηόθνιιν δηαλνκήο, ην νπνίν αλαπηύρζεθε ζηηο αξρέο ηνπ 2000 από ηνλ Justin Frankel. Αλήθεη θαη απηό ζηελ θαηεγνξία P2P δηαλνκή αξρείσλ. ε έλα δίθηπν gnutella, έλαο πειάηεο είλαη ηαπηόρξνλα θαη δηαθνκηζηήο θαη αληίζηξνθα. πλεπώο, ν πειάηεο θαη ν δηαθνκηζηήο πινπνηνύληαη ζε έλα απιό ζύζηεκα ην νπνίν νλνκάδεηαη servent (SERVer θαη έλαο client). Έλα servent ζπλδέεηαη κε έλα δίθηπν gnutella κέζσ κηα ζύλδεζεο TCP ζε έλαλ άιιν servant κέζα ζην δίθηπν (γηα παξάδεηγκα θόκβνο B). Σόηε ν αξρηθόο servant (έζησ Α) ζα αλαγγείιεη ηελ ύπαξμή ηνπ ζηνλ Β. Ο servant Β, κε ηε ζεηξά ηνπ ζα αλαγγείιεη ζηνπο γείηνλέο ηνπ όηη ν Α είλαη «δσληαλόο» (alive). To κνηίβν απηό ζα ζπλερηζηεί αλαδξνκηθά γηα θάζε λέν επίπεδν servant αλαγγέιινληαο όηη ν servant είλαη «δσληαλόο». Όηαλ ν servant Α αλαγγείιεη ηελ παξνπζία ηνπ ζην ππόινηπν δίθηπν, ν ρξήζηεο ηνπ ζπγθεθξηκέλνπ servant κπνξεί λα εξσηήζεη γηα δεδνκέλα πνπ ππάξρνπλ κέζα ζην δίθηπν. (εηθόλα 7).[13] Απηή ε αλαθνίλσζε κεηάδνζεο ζα ηειεηώζεη όηαλ ν ρξόλνο δσήο ηνπ παθέηνπ (Time To Live) ιήμεη. Απηό ζπκβαίλεη ζε θάζε επίπεδν όηαλ ν κεηξεηήο ηνπ ρξόλνπ δσήο ζα κεηώλεηαη θαηά έλα από ηελ αξρηθή ηηκή, κέρξη λα θηάζεη ζην κεδέλ όπνπ ζην ζεκείν απηό ζα ζηακαηήζεη ε κεηάδνζε ηεο αλαθνίλσζεο. Γηα λα πξνζηαηεύζνπκε ηνπο πειάηεο λα ζέηνπλ πςειό ρξόλν δσήο, ε πιεηνςεθία ησλ gnutella servents απνξξίπηεη παθέηα κε πςειή ηηκή TTL. Παξόια απηά, από ηελ άπνςε ησλ ρξεζηώλ, κεγηζηνπνηώληαο ηηο πηζαλόηεηεο λα βξεζεί έλα δεηνύκελν 17

αξρείν ζεκαίλεη όηη πξέπεη λα ρξεζηκνπνηεζεί όζν ην δπλαηόλ κεγαιύηεξνο ρξόλνο δσήο. πλεπώο, δεκηνπξγείηαη έλα ζεκείν αληαιιαγήο ζην δίθηπν. Όηαλ ν ρξόλνο δσήο ηνπ παθέηνπ είλαη κηθξόο, ζεκαίλεη όηη ειαρηζηνπνηνύληαη νη πόξνη ηνπ δηθηύνπ. Μεγάινο ρξόλνο δσήο ζεκαίλεη όηη κεγηζηνπνηνύληαη νη πόξνη ηνπ δηθηύνπ. Ο θαηαιιειόηεξνο ρξόλνο δσήο πξέπεη λα εμαξηάηαη από ηελ ηνπνινγία ηνπ δηθηύνπ θαη ηα ραξαθηεξηζηηθά ηεο θίλεζεο, γηα κία ζπγθεθξηκέλε ζέζε θαη έλα ζπγθεθξηκέλν ρξόλν πνπ ζα γίλεη ε αλαδήηεζε ηνπ αξρείνπ από έλαλ servent. Εικόνα 7. Gnutella decentralized Model Μόιηο ζπλδεζεί επηηπρώο ζε έλα δίθηπν, ηόηε επηθνηλσλεί κε άιινπο servents ρξεζηκνπνηώληαο πεξηγξαθείο ηνπ πξσηνθόιινπ gnutella γηα λα αλαδεηήζεη αξρεία ζην δίθηπν απηή είλαη ε θάζε πνπ ζεκαηνδνηεί ην πξσηόθνιιν. Ζ ηειηθή δηαδηθαζία ιήςεο ελόο αξρείνπ γίλεηαη ρξεζηκνπνηώληαο έλα πξσηόθνιιν πνπ κνηάδεη κε ην HTTP, κεηαμύ ελόο δεηνύκελνπ servent θαη ελόο άιινπ πνπ επεμεξγάδεηαη ην δεηνύκελν αξρείν. Όηαλ εγθαηαζηαζεί κηα ζύλδεζε TCP/IP κεηαμύ δύν servents, ηόηε ζα ζηαιεί ην string GNUTELLA CONNECT/<protocol version string>\n\n από έλαο από ηνπο πειάηεο (clients). Ζ πξόζθαηε έθδνζε ηνπ πξσηνθόιινπ πνπ ρξεζηκνπνηείηαη είλαη «0.4». Ο servent κόιηο αλαγλσξίζεη ην παξαπάλσ string,ηόηε ζα απαληήζεη κε ην παξαθάησ κήλπκα: GNUTELLA OK\n\n. Έηζη εγθαζηδξύεηαη κηα έγθπξε ζύλδεζε Gnutella κεηαμύ ησλ δύν servents. Κάζε άιιε απάληεζε ζην αξρηθό κήλπκα δελ είλαη έγθπξε θαη ην αίηεκα γηα δεκηνπξγία ζύλδεζεο ζα απνξξηθζεί από ηνλ εθθηλεηή servent.[13][17] 18

Αθνύ εγθαηαζηαζεί ε ζύλδεζε, νη δύν servents επηθνηλσλνύλ κεηαμύ ηνπο αληαιιάζζνληαο πεξηγξαθείο ηνπ πξσηνθόιινπ gnutella. Δπίζεο, ην ζπγθεθξηκέλν πξσηόθνιιν νξίδεη θαλόλεο γηα ην πώο νη ζπγθεθξηκέλνη πεξηγξαθείο αληαιιάζζνληαη κεηαμύ ησλ servents. Οη πεξηγξαθείο απηνί είλαη νη παξαθάησ:[13][14] Ping Υξεζηκνπνηείηαη γηα λα αλαθαιύςεη ελεξγά ηνπο θόκβνπο ζην δίθηπν. Έλαο servent όηαλ ιακβάλεη έλαλ Ping πεξηγξαθέα αλακέλεηαη λα απαληήζεη κε έλαλ ή πεξηζζόηεξνπο Pong πεξηγξαθείο. Pong Ζ απάληεζε ζε έλα Ping. Πεξηιακβάλεη ηε δηεύζπλζε ηνπ ζπλδεδεκέλνπ servent θαη πιεξνθνξίεο κεηαμύ ησλ δεδνκέλσλ πνπ είλαη δηαζέζηκα ζην δίθηπν. Query Ο πξσηαξρηθόο κεραληζκόο γηα ηελ αλαδήηεζε ελόο αξρείνπ κέζα ζην δίθηπν. Έλαο servent όηαλ ιακβάλεη έλα Query πεξηγξαθέα, ζα απαληήζεη κε έλα QueryHit, εάλ ηαηξηάδεη ην αξρείν πνπ πεξηγξάθεη ην Query κε ηα δεδνκέλα πνπ έρεη ν ζπγθξηκέλνο servent. QueryHit H απάληεζε ζε έλα Query. Ο ζπγθεθξηκέλνο πεξηγξαθέαο παξέρεη ζην ιήπηε ζεκαληηθέο πιεξνθνξίεο γηα λα απνθηήζεη ηα δεδνκέλα πνπ ηαηξηάδνπλ ζην Query. Push Έλαο κεραληζκόο πνπ επηηξέπεη ζε έλαο servent ν νπνίνο εκπνδίδεηαη από θάπνην firewall, λα ζπλεηζθέξεη δεδνκέλα ζην δίθηπν. Δπηπιένλ, νη πεξηγξαθείο ηνπ πξσηνθόιινπ Gnutella, ππνδεηθλύνπλ όηη κηα ζπγθεθξηκέλε απάληεζε κελύκαηνο, πξέπεη λα ζηαιεί κέζα ζην ίδην κνλνπάηη ζην νπνίν ζηάιζεθε ζην αξρηθό κήλπκα. Γηα παξάδεηγκα, ν πεξηγξαθέαο ηνπ Pong πξέπεη λα απνζηαιεί ζην ίδην κνλνπάηη πνπ ζηάιζεθε ην Ping. Σν ίδην ηζρύεη θαη γηα ην Query θαη ην QueryHit. Οη πεξηγξαθείο γηα ην Query θαη ην Ping, κεηαδίδνληαη ζε όινπο ηνπο γείηνλεο, θαη ν servent, ν νπνίνο αλαγλσξίδεηαη σο ν ζηόρνο ελόο ζπγθεθξηκέλνπ πεξηγξαθέα, δελ ζα ηνλ κεηαδώζεη πεξηζζόηεξν. Γηα λα έρεη θάπνηνο πξόζβαζε ζε έλα δίθηπν Gnutella, ζα πξέπεη θάπνηνο λα ρξεζηκνπνηήζεη κηα εθαξκνγή Gnutella. Δπεηδή ην πξσηόθνιιν απηό εκθαλίδεη κεγάιε δεκνηηθόηεηα θαη επεηδή είλαη ηύπνπ αλνηρηνύ θώδηθα, ππάξρνπλ αξθεηέο εθαξκνγέο πνπ ην ππνζηεξίδνπλ. Οη πην γλσζηέο είλαη ην gtkgnutella, ην Morpheus, ην BearShare, ην Shareaza. Γηα ηελ πινπνίεζε ηνπ αιγνξίζκνπ ρξεζηκνπνίεζα κηα FSM κε ηέζζεξηο θαηαζηάζεηο (εηθόλα 8). 19

Εικόνα 8. FSM για Gnutella Ζ αξρηθή θαηάζηαζε ηεο FSM είλαη ε CONNECT_STATE. Αλ ζηελ θαηάζηαζε απηή ζπλαληήζνπκε ην string GNUTELLA CONNECT, ηόηε ε επόκελε θαηάζηαζε ζα είλαη ε OK_STATE. ε απηήλ ηελ θαηάζηαζε ειέγρνπκε αλ ππάξρεη ην string GNUTELLA OK. ην ζεκείν απηό έρεη εγθαηαζηαζεί κηα ζύλδεζε gnutella κεηαμύ 2 servents. Ζ επόκελε θαηάζηαζε είλαη ε GET_STATE. ηελ θαηάζηαζε απηή, ειέγρνπκε αλ ππάξρεη ην string GET /get. To string απηό ζεκαίλεη όηη έλαο servent ζηέιλεη έλα αίηεκα γηα λα ιάβεη έλα αξρείν από έλαλ άιιν servent. H επόκελε θαηάζηαζε είλαη ε HTTP_STATE. ε απηήλ ηελ θαηάζηαζε, εάλ έξζεη ην string HTTP 200 OK, ηόηε ν servent ζα κπνξέζεη λα αξρίζεη ηε ιήςε ηνπ αξρείνπ. Tέινο, αθνύ αλαγλσξηζηεί επηηπρώο έλα παθέην όηη ρξεζηκνπνηεί ην πξσηόθνιιν Gnutella θαη έρεη αξρίζεη ε ιήςε ηνπ αξρείνπ, ηόηε ηα απνζεθεύζνπκε ζε κηα FIFO. Δάλ ζε θάζε θαηάζηαζε έξζεη νηηδήπνηε άιιν εθηόο από ηα αλακελόκελα strings, ηόηε ε επόκελε θαηάζηαζε ζα είλαη ε αξρηθή. Γειαδή, ε θαηάζηαζε, CONNETCT_STATE. 20

3. Αξιολόγηζη ε απηό ην θεθάιαην ζα παξνπζηαζηνύλ ηα απνηειέζκαηα ηεο αμηνιόγεζεο ηνπ ζπζηήκαηνο. Σα απνηειέζκαηα πξνέθπςαλ από κηα εθηελή δηεμαγσγή ζεηξά πεηξακάησλ. 3.1 Software Αλαπηύμακε επίζεο έλα πξόγξακκα ην νπνίν είλαη γξακκέλν ζηε γιώζζα C, ην νπνίν έρεη σο ζηόρν λα αιιειεπηδξά απεπζείαο κε ηε NetFPGA. Γηαβάδεη παθέηα ηα νπνία πξνέξρνληαη από ηε ζύξα PCI ηεο NetFPGA ρξεζηκνπνηώληαο raw sockets. Υξεζηκνπνηήζακε raw sockets, δηόηη επηηξέπνπλ ζηα παθέηα λα δηαπεξάζνπλ ηε Linux TCP/IP ζηνίβα θαη κπνξνύλ λα ρεηξηζηνύλ απεπζείαο ζηελ εθαξκνγή καο ζηελ ίδηα κνξθή, όπσο όηαλ ζηάιζεθαλ από ην hardware ηεο NetFPGA. 3.2 Γιαδικαζία Αξιολόγηζηρ Ζ παξνύζα εθαξκνγή πινπνηήζεθε ζηελ πιαθέηα NetFPGA, ε νπνία βαζίδεηαη ζηελ Virtex 2 pro [8]. Αξρηθά, δνθηκάζακε πξνζνκνηώζεηο ηεο εθαξκνγήο ρξεζηκνπνηώληαο ηε γιώζζα Perl. Ζ ζπγθεθξηκέλε γιώζζα καο επηηξέπεη λα δεκηνπξγνύκε παθέηα κε ζπγθεθξηκέλν TCP payload. Γηα λα δεκηνπξγήζνπκε ηα ζπγθεθξηκέλα tests, ρξεζηκνπνηήζακε ην πξόγξακκα Wireshark, γηα λα δηαπηζηώζνπκε ηελ πξαγκαηηθή δνκή ελόο παθέηνπ θαη γηα ηα ηξία είδε πξσηνθόιισλ [4][9]. ηε ζπλέρεηα, ην Wireshark, καο δίλεη ηε δπλαηόηεηα λα εμάγνπκε ηα παθέηα κε ηε κνξθή πηλάθσλ C. Tνπο πίλαθεο απηνύο ηνπο πξνζαξκόζακε ζηα δηθά αξρεία Perl θαη κε απηόλ ηνλ ηξόπν δηεμήγακε πεηξάκαηα (verification tests) γηα λα δηαπηζηώζνπκε ηελ νξζόηεηα ηνπ πξνγξάκκαηόο καο. Έπεηηα, πξνρσξήζακε ζηε δεκηνπξγία κηαο άιιεο θαηεγνξίαο ηεζη. Σα ηεζη απηά νλνκάδνληαη regression tests. Δίλαη θαη απηά γξακκέλα ζηε γιώζζα Perl, θαη καο δίλνπλ ηε δπλαηόηεηα λα δνθηκάζνπκε ησλ θώδηθά καο ζε πξαγκαηηθό hardware. Έρνληαο εμεηάζεη ηελ νξζόηεηα ηνπ θώδηθά καο πξνρσξήζακε κε ηεζη ζε πξαγκαηηθό ρξόλν. Σα πεηξάκαηα έγηλαλ ζε έλαο ππνινγηζηή ν νπνίνο έρεη ιεηηνπξγηθό ζύζηεκα Fedora 12, κε επεμεξγαζηή AMD δύν ππξήλσλ ζην 1GHz, δηαζέηεη κλήκε RAM 4GHz θαη έλα Intel Pro/1000 Dual-port NIC. Σα πεηξάκαηα έγηλαλ ζε θίλεζε πξαγκαηηθνύ ρξόλνπ, κε ζθνπό λα δεζκεύζνπκε παθέηα πνπ ρξεζηκνπνηνύλ ηα πξσηόθνιια HTPP ή BitTorrent ή Gnutella. Ζ θίλεζε πνπ έξρεηαη ζηελ πιαθέηα NetFPGA είλαη 1Gbps. Όηαλ ε θίλεζε ηνπ δηθηύνπ είλαη ζηαζεξή, ηόηε ν ξπζκόο άθημεο ησλ παθέησλ είλαη ζηαζεξόο. (εηθόλα 9). 21

Εικόνα 9. Σταθερή κίνηςη -> ςταθερόσ ρυθμόσ πακζτων. Μεηξώληαο παθέηα πνπ ρξεζηκνπνηνύλ ην πξσηόθνιιν http έρνπκε ηα απνηειέζκαηα πνπ θαίλνληαη ζηελ εηθόλα 10. Εικόνα 10. Αποτελζςματα για HTTP protocol. ηελ εηθόλα απηή παξαηεξνύκε όηη ζηάιζεθαλ 40 παθέηα ηύπνπ HTPP, ηα νπνία θαη απνζεθεύζεθαλ επηηπρώο ζηελ FIFO. Ζ εηθόλα 11 παξνπζηάδεη απνηειέζκαηα γηα ην πξσηόθνιιν BitTorrent. 22

Εικόνα 11. Αποτελζςματα για BitTorrent protocol ηελ εηθόλα απηή παξαηεξνύκε όηη όια ηα παθέηα πνπ ζηέιλνληαη ζηελ πιαθέηα NetFPGA θαη αλαγλσξίδνληαη σο ηύπνπ BitTorrent απνζεθεύνληαη ζε έλαλ hash table, o νπνίνο είλαη θηηαγκέλνο κε βάζε ηε κέζνδν cuckoo hashing, θαη ζηελ ζπλέρεηα απνζεθεύνληαη θαη ζε κία FIFO. H εηθόλα 12 παξνπζηάδεη απνηειέζκαηα γηα παθέηα πνπ αθνινπζνύλ ην πξσηόθνιιν Gnutella. Εικόνα 12. Αποτελζςματα για το Gnutella protocol. 23

3.3 Σύγκπιζη NetFPGA με APPMON Έλα κέξνο ηεο πηπρηαθήο εξγαζίαο ήηαλ ε ζύγθξηζε ηνπ δηθνύ κνπ ζπζηήκαηνο ζηελ πιαθέηα NetFPGA κε έλα πξόγξακκα πνπ νλνκάδεηαη APPMON[6]. To Appmon είλαη έλα ινγηζκηθό, ην νπνίν κπνξεί λα θαηεγνξηνπνηήζεη ηελ θίλεζε ηνπ δηθηύνπ ζε πξαγκαηηθό ρξόλν. Αλαπηύρζεθε θαηά ηε δηάξθεηα ηνπ έξγνπ LOBSTER EU[7]. Ο θύξηνο ζηόρνο ηνπ ζπγθεθξηκέλνπ έξγνπ είλαη λα αληηκεησπίζεη ηε δπζθνιία ηεο αλαγλώξηζεο ηεο θίλεζεο ηνπ δηθηύνπ, πνπ ρξεζηκνπνηεί δπλακηθέο ζύξεο. Παξάιιεια, πιεξνθνξίεο ζρεηηθά κε ηε ζπκβνιή ησλ δηαθόξσλ δηθηπαθώλ εθαξκνγώλ θαη ππεξεζηώλ ζηε αλακεηγκέλε θίλεζε, είλαη ηδηαίηεξα ζεκαληηθέο από ηνπο δηαρεηξηζηέο ηνπ δηθηύνπ, έηζη ώζηε λα δηεπθνιπλζεί ηθαλνπνηεηηθά ε δηαρείξηζε ηεο θίλεζεο. Σν Appmon είλαη κηα εθαξκνγή ε νπνία παξαθνινπζεί παζεηηθά ηελ θίλεζε ηνπ δηαδηθηύνπ, πξνθεηκέλνπ λα ηελ θαηεγνξηνπνηήζεη αλάινγα κε ηελ εθαξκνγή. Υξεζηκνπνηεί βαζεηά αλαδήηεζε ζην παθέην (deep packet inspection), ώζηε λα απνδώζεη κε αθξίβεηα ηηο ξνέο θπθινθνξίαο ζηηο εθαξκνγέο πνπ ηηο παξάγνπλ, θαη αλαθέξεη ζε πξαγκαηηθό ρξόλν θίλεζεο ηεο θπθινθνξίαο κέζσ ελόο γξαθηθνύ πεξηβάιινληνο (GUI). Δίλαη εύθνιν λα δηακνξθσζεί θαη λα αλαπηπρζεί ζε θάπνηνλ ππνινγηζηή. Δπίζεο, είλαη ινγηζκηθό αλνηρηνύ θώδηθα. Γηεμήγακε πεηξάκαηα ζε πξαγκαηηθή θίλεζε δηθηύνπ, πξνθεηκέλνπ λα δεζκεύζνπκε παθέηα πνπ ρξεζηκνπνηνύλ ην πξσηόθνιιν BitTorrent. H εηθόλα 13 πεξηγξάθεη ηελ ρξήζε ηεο CPU, όηαλ ηα παθέηα αλαιύνληαη από ηε NetFPGA θαη από ην APPMON. Εικόνα 13. Σφγκριςη CPU μεταξφ NetFPGA και APPMON. Όπσο θαίλεηαη ζηελ παξαπάλσ εηθόλα ε ρξήζε ηεο CPU ηνπ APPMON είλαη έρεη ηηκέο ζρεδόλ πάληνηε κεηαμύ 80% 100%. Από ηελ άιιε πιεπξά, ην ινγηζκηθό ζηελ πιαθέηα NetFPGA είλαη πάληνηε ρακειόηεξν θαηά 20%. (ε ρξήζε ηεο CPU βαζίδεηαη θπξίσο ζηελ απαηηήζεηο επεμεξγαζίαο γηα επηθνηλσλία κε ηε NetFPGA 24

ρξεζηκνπνηώληαο ηε ζύξα PCI θαη ην γξαθηθό πεξηβάιινλ.) Όπσο πεξηγξάθεηαη ζην ην APPMON κπνξεί λα επεμεξγαζηεί θίλεζε δηθηύνπ κέρξη θαη 1 Gbps, ρξεζηκνπνηώληαο έλα θνηλό NIC[5][7]. O πίλαθαο 1 δείρλεη ηελ ελέξγεηα πνπ θαηαλαιώλεη ε NetFPGA. Υξεζηκνπνηώληαο ην APPMON, θαηαλαιώλνπκε πεξίπνπ 59W (ζπκπεξηιακβάλνληαο ηε κεηξηθή πιαθέηα, ηε CPU, ηε κλήκε, ηνπο δίζθνπο) γηα λα επεμεξγαζηνύκε 500Mbps. Αληίζεηα, ρξεζηκνπνηώληαο ηε NetFPGA,κπνξνύκε λα πεηύρνπκε 30% εμνηθνλόκεζε ελέξγεηαο(mw/mbps) από ην APPMON. Πίνακασ 1. Σφγκριςη ενεργειακήσ ικανότητασ. Implementation Throughput (Mbps) Power (W) Power per BW (mw/mbps) APPMON 1000 59 118 NetFPGA 4000 15.7 3.91 O πίλαθαο 2 δείρλεη ηνπο πόξνπο πνπ ρξεηάδεηαη ην ινγηζκηθό πνπ είλαη βαζηζκέλν ζηελ πιαθέηα NetFPGA. H Διάρηζηε πεξίνδνο ηνπ ξνινγηνύ είλαη 5,512ns (δειαδή, 117,48ΜΖz). O δίαπινο (databus) ηεο πξνηεηλόκελεο αξρηηεθηνληθήο έρεη πιάηνο 64bits. Δπνκέλσο, κπνξνύκε λα πεηύρνπκε εύξνο 7,51Gbps. (ν απαηηνύκελνο ζηόρνο ήηαλ ηα 4Gbps: 4x1Gbps) Πίνακασ 2. Πόροι του λογιςμικοφ ςτην NetFPGA. Type Number Percentage Number of slices 11131 47% Number of Slice FF 9378 19% Number of 4-input LUT 16547 35% Number of BRAM 27 11% 25

4. Σςμπεπάζμαηα Πεπίλητη ε απηό ην έγγξαθν παξνπζηάζακε έλα ινγηζκηθό, ην νπνίν βαζίδεηαη ζηελ πιαηθόξκα NetFPGA, θαη έρεη σο ζηόρν λα θαηεγνξηνπνηήζεη ηελ θίλεζε ηνπ δηαδηθηύνπ ζε πξαγκαηηθό ρξόλν. Σα πξσηόθνιια πνπ πξέπεη λα θαηεγνξηνπνηήζεη είλαη ην HTTP, ην BitTorrent θαη ην Gnutella. Με ην ζπγθεθξηκέλν ινγηζκηθό κπνξνύκε λα θαηεγνξηνπνηήζνπκε πξσηόθνιια πνπ έρνπλ ζπγθεθξηκέλν αξηζκό ζύξαο όπσο ην HTTP πνπ έρεη ζηάληαξ ζύξα 80, ελώ παξάιιεια κπνξνύκε λα θαηεγνξηνπνηήζνπκε θαη πξσηόθνιια όπσο ην Gnutella θαη ην BitTorrent πνπ ρξεζηκνπνηνύλ δπλακηθέο ζύξεο. ε θάζε παθέην αλαδεηνύκε κέζα ζην payload γηα θαηάιιειεο ππνγξαθέο ώζηε λα πεηύρνπκε ηελ θαηεγνξηνπνίεζε. Γηα ην πξσηόθνιιν HTTP αλαδεηνύκε ην string GET. Γηα ην πξσηόθνιιν BitTorrent αλαδεηνύκε ην peer id θαη ην tracker id όπσο θαη ην peer hash key θαη ην tracker hash key. Γηα ην πξσηόθνιιν Gnutella αλαδεηνύκε ην string GNUTELLA CONNECT θαη GNUTELLA ΟΚ. Κάζε παθέην ην απνζεθεύνπκε ζε κηα FIFO. Ηδηαίηεξα ζην πξσηόθνιιν BitTorrent, ηα παθέηα εθηόο από ηε FIFO, ηα απνζεθεύνπκε θαη ζε έλαλ hash table, ν νπνίνο είλαη δεκηνπξγεκέλνο κε βάζε ηε κέζνδν cuckoo hashing. Έλα κέξνο ηεο πηπρηαθήο εξγαζίαο ήηαλ ε ζύγθξηζε ηνπ δηθνύ κνπ ινγηζκηθνύ ζηε NetFPGA κε ην APPMON. Mε ην ινγηζκηθό ζηε NetFPGA, κπνξνύκε λα πεηύρνπκε θαηεγνξηνπνίεζε ηεο θίλεζεο ηνπ δηθηύνπ κε ηαρύηεηα κέρξη θαη 7,5 Gbps, ελώ αληίζεηα κε ην APPMON κπνξνύκε λα θαηεγνξηνπνηήζνπκε θίλεζε κέρξη θαη 1 Gbps. Παξάιιεια, κε ην δηθό καο ζύζηεκα θαηαλαιώλνπκε 30% ιηγόηεξε ελέξγεηα θαη ρξεζηκνπνηνύκε ιηγόηεξν ηε CPU πνπ θηάλεη έσο θαη 20% ρακειόηεξα. 26

5. Βιβλιογπαθία [1] A. Moore and K. Papagiannaki. Toward the Accurate Identification of Network Applications. In PAM, March, 2005. [2] S. Sen. O. Spatscheck and D. Wang. Accurate, Scalable In-Network Identification of P2P Traffic Using Applications Signatures. Proceedings of the 13th international conference on World Wide Web, 2004 [3] The BitTorrent protocol. http://www.bittorent.org. [4] The Packet Capture Library http://www.tcpdump.org. [5] Internet Assigned Numbers Authority.,http://www.iana.org/. [6] Appmeeon User Manual http://www.ipworx.com/product/appmon/manual.pdf [7] D. Antoniades et al., Appmon: An Application for Accurate per Application Network Traffic Characterization, Broadband, 2006 [8] Netfpga wiki. www.netfpga.org [9] Wireshark. http://www.wireshark.org/ [10] R. Pagh, F. F. Rodler, Flemming Friche, Cuckoo Hashing. doi:10.1.1.25.4189. [11] James W. Hong,1 Sung-Uk Park,1 Young-Min Kang,1 and Jong-Tae Park, Enterprise Network Traffic Monitoring, Analysis, and Reporting Using Web Technology, Journal of Network and Systems Management, March 2001 [12] M. Ciesla, V. Sivaraman, A. Seneviratne, URL Extraction on the NetFPGA Reference Router. [13] Igor Ivkovic. Improving Gnutella Protocol: Protocol Analysis And Research Prosoposals. [14] Clip2 Distributed Search Services. The Gnutella Protocol Specification. [15] http://en.wikipedia.org/wiki/hypertext_transfer_protocol. [16] http://wiki.theory.org/bittorrentspecification [17] http://en.wikipedia.org/wiki/gnutella 27