HY-335a Project: microtcp 1, μία lightweight TCP βιβλιοθήκη

Σχετικά έγγραφα
HY-335a Project: microtcp *, μία lightweight TCP βιβλιοθήκη

HY-335a Project: microtcp, μία lightweight TCP βιβλιοθήκη. Deadline πρώτης ϕάσης : 19/11/ :59

Άσκηση 2. Αν συμβούν 2 duplicate ACKs αντί για timeout τι γίνεται σε αυτή την περίπτωσή;

ΗΥ335 - Δίκτυα Υπολογιστών Χειμερινό εξάμηνο Φροντιστήριο Ασκήσεις στο TCP

Τρίτη Πρόοδος [110 μονάδες] Απαντήσεις

Improving the performance of TCP in the case of packet reordering. Στρατάκη Μαρία

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΙΚΤΥΩΝ

4.1.1 Πρωτόκολλο TCP - Δομή πακέτου

Πρωτόκολλο TCP Διάλεξη ΙΙI

Σχήμα 1: TCP αποστολέας με παράθυρο αποστολέα = 1

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

Δίκτυα Υπολογιστών Επίπεδο Μεταφοράς Ιωάννης Κορίνθιος Δρ. Ηλεκτρολόγος Μηχανικός ΕΜΠ

Σχήμα 1: TCP αποστολέας με παράθυρο αποστολέα = 1

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

Δίκτυα Απευθείας Ζεύξης. Επικοινωνία µεταξύ δύο υπολογιστών οι οποίοι είναι απευθείας συνδεδεµένοι.

Πρωτόκολλα Διαδικτύου

Υπολογιστές και ίκτυα Η/Υ.

Έλεγχος συµφόρησης µε το Πρωτόκολλο TCP

Δίκτυα Επικοινωνιών ΙΙ: Transmission Control Protocol

Αξιόπιστη μεταφορά δεδομένων πάνω από αναξιόπιστο δίκτυο. Κατανεμημένα Συστήματα 1

Δίκτυα και Internet στο επιχειρηµατικό περιβάλον

Transmission Control Protocol. Transmission Control Protocol

Δίκτυα Επικοινωνίας Υπολογιστών

Αξιόπιστη μεταφορά δεδομένων πάνω από αναξιόπιστο δίκτυο. Κατανεμημένα Συστήματα 1

Κεφάλαιο 7.3. Πρωτόκολλο TCP

Λουκάς Ελευθέριος

ΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ. Έλεγχος και Αποφυγή Συμφόρησης στο TCP. Δίκτυα Υπολογιστών

Κεφάλαιο 1 Το Πρωτόκολλο TCP (Transmission Control Protocol)

Πρωτόκολλο TCP Διάλεξη Ι

Ιόνιο Πανεπιστήµιο Τµήµα Πληροφορικής Συστήµατα Επικοινωνίας. Μοντέλο TCP/IP. Ενότητα E. Πόσοι εµπλέκονται σε ένα Σύστηµα Επικοινωνίας

Επίπεδο Μεταφοράς (Transport Layer)

ΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ. Έλεγχος και Αποφυγή Συμφόρησης στο TCP. Δίκτυα Υπολογιστών

Πρωτόκολλα Διαδικτύου

Δίκτυα Επικοινωνίας Υπολογιστών Ενότητα 13: Στρώμα μεταφοράς

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή σε Έννοιες των Δικτύων Υπολογιστών Κεφάλαιο 2 Αξιοπιστία Κεφάλαιο 3 Αλγόριθμοι Πολλαπλής Πρόσβασης...

2η Προγραµµατιστική Εργασία

Τι είναι το πρωτόκολλο Διαδικτύου (Internet Protocol, IP);

3.2 Το αυτοδύναμο πακέτο IP (datagram) Δομή πακέτου

Δίκτυα Θεωρία

ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ. Έλεγχος και Αποφυγή Συμφόρησης στο TCP. Δίκτυα Υπολογιστών

Δίκτυα Επικοινωνίας και Υπολογιστών

Δίκτυα Υπολογιστών Εμβάθυνση και Ασκήσεις στο Επίπεδο Μεταφοράς και στο Επίπεδο Εφαρμογής Ιωάννης Κορίνθιος Δρ. Ηλεκτρολόγος Μηχανικός ΕΜΠ

Διάρθρωση. Δίκτυα Υπολογιστών Επικοινωνία από άκρο σε άκρο. Επικοινωνία από άκρο σε άκρο. Διάρθρωση

ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ. Παράδοση Ασκήσεων Κεφάλαιο 2 Ασκήσεις 3,6,8,9,15,22,24,26. Γεωργόπουλος Άλκης Α.Μ.: 39 Κοντογιώργης Αναστάσιος A.M.

Δίκτυα Υπολογιστών Το επίπεδο μεταφοράς (transport layer)

Επίπεδο Μεταφοράς. (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών Τμήμα Μηχανικών Η/Υ και Πληροφορικής

Πρωτόκολλα Διαδικτύου

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap

ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ Γ Τάξη ΤΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΑ.Λ. ΤΕΤΡΑΔΙΟ ΜΑΘΗΤΗ Κωνσταντοπούλου Μ., Χρυσοστόμου Γ.

7.4 Πρωτόκολλο UDP. 3. Στη περίπτωση που ένα μήνυμα χωράει σε ένα τμήμα, χρησιμοποιούμε το πρωτόκολλο TCP.

2 η Σειρά Ασκήσεων Data Link Layer

Πρωτόκολλα Μεταφοράς: UDP και TCP. Άγγελος Ρούσκας

Ενημέρωση σε Windows 8.1 από τα Windows 8

Άσκηση 1. (σημειώστε πως 1KB = 2 10 bytes, 1Mbps = 10 6 bits/sec).

ΚΕΦΑΛΑΙΟ 11: Διαδικασία Μετάδοσης Δεδομένων Εισαγωγή

7.3 Πρωτόκολλο TCP. 1. Το TCP πρωτόκολλο παρέχει υπηρεσίες προσανατολισµένες σε σύνδεση. Σ Λ

ΤΕΙ Κρήτης, Παράρτηµα Χανίων

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Δίκτυα Υπολογιστών Ενότητα 4: Transmission Control Protocol - TCP

Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών

7.5 Πρωτόκολλο IP. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη 16 Νοεμβρίου 2013

ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ. Υλοποίηση Εφαρμογής Μεταφοράς Αρχείων Βασισμένη στο Πρωτόκολλο SCTP Πειράματα Αξιολόγησης Πρωτοκόλλου. Φλωρίδης Μ.

Δίκτυα Απευθείας Ζεύξης

Μελέτη του πρωτοκόλλου SCTP και ανάπτυξη σχετικών opensource προγραµµάτων

ΕΚΦΩΝΗΣΕΙΣ ΘΕΜΑ Α. α. Πριν εμφανιστεί η τεχνολογία ISDN οι υπηρεσίες φωνής, εικόνας και δεδομένων απαιτούσαν διαφορετικά δίκτυα.

ΗΜΥ 654: ίκτυα Υπολογιστών Τελική Εξέταση 8 εκεµβρίου 2004 Η εξέταση αποτελείται από δύο µέρη. Απαντήστε όλες τις ερωτήσεις του Μέρους Ι και 3 από

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Επίπεδο Μεταφοράς (Transport Layer)

Δίκτυα Υπολογιστών Λύσεις σειράς ασκήσεων επανάληψης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Δίκτυα Υπολογιστών. Ενότητα 4: Μετάδοση δεδομένων από το στρώμα μεταφοράς. Δρ. Χαράλαμπος Ζ. Πατρικάκης Τμήμα Ηλεκτρονικών Μηχανικών Τ.

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Λειτουργικά Συστήματα

Δίκτυα Υπολογιστών Ενότητα 7: Internet Control Message Protocol - ICMP

ΔΙΚΤΥΑ (23-26) Π. Φουληράς

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Βασικά Θέματα Επικοινωνίας. Κατανεμημένα Συστήματα 1

Τη φυσική (MAC) διεύθυνση που δίνει ο κατασκευαστής του δικτυακού υλικού στις συσκευές του (π.χ. στις κάρτες δικτύου). Η περιοχή διευθύνσεων που

Εργαστήριο Wireshark: TCP

Άσκηση 2 η Πρωτόκολλο επικοινωνίας TCP/IP

7.5 Πρωτόκολλο IP. & Ερωτήσεις

ΚΕΦΑΛΑΙΟ 4. Τεχνική Ανίχνευσης του. Πτυχιακή Εργασία Σελίδα 95

CSMA/CA στο Κατανεμημένα Ενσωματωμένα Συστήματα Πραγματικού Χρόνου

7.9 ροµολόγηση. Ερωτήσεις

Κατανεμημένα Συστήματα Ι

Δίκτυα Υπολογιστών Ενότητα 5: User Datagram Protocol - UDP

ΔΙΑΓΩΝΙΣΜΑ ΤΕΛΙΚΗΣ ΕΠΑΝΑΛΗΨΗΣ ΣΤΙΣ ΕΝΟΤΗΤΕΣ

Εργαστήριο Ethereal: TCP

Εργαστήριο «Δίκτυα Η/Υ ΙΙΙ» Άσκηση 7η : TCP

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Υποδοχείς (Sockets) Προγραμματισμός II 1

Δίκτυα Επικοινωνιών Δίκτυα Υπολογιστών και Στρώμα Μεταφοράς Διδάσκοντες: Δρ. Ευγενία Αδαμοπούλου, Δρ. Κώστας Δεμέστιχας

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΙΚΤΥΩΝ

ΑΝΑΛΥΣΗ TCP ΚΙΝΗΣΗΣ ΜΕ ΤΟ ΠΡΟΓΡΑΜΜΑ TCPTRACE.

T C P. (Transmission Control Protocol) Αβραάµ Κεβρεκίδης Μανώλης Μελάκης Μάριος Ιακώβου 1

Μέθοδοι Ελέγχου Σφαλμάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

TCP : Transmission Control Protocol

Transcript:

HY-335a Project: microtcp 1, μία lightweight TCP βιβλιοθήκη Deadline δεύτερης ϕάσης : 14 Ιανουαρίου 2017 1 Εμπνευσμένο και υλοποιημένο από το Μανώλη Σουρλίγκα

Γενική περιγραϕή Στο οικοσύστημα του Internet of Thinks (IoT) υπάρχει μια ευρεία γκάμα από δικτυακές συσκευές Πολλές από αυτές έχουν ελάχιστο μέγεθος και λειτουργούν με μπαταρίες Για αυτόν τον λόγο, οι υπολογιστικοί τους πόροι είναι αρκετά περιορισμένοι Στις περισσότερες περιπτώσεις, η υλοποίηση ολόκληρου του TCP πρωτοκόλλου είναι αδύνατη και η μεταϕορά της πληροϕορίας γίνεται με UDP Υπάρχουν όμως εϕαρμογές που απαιτούν αξιόπιστη επικοινωνία και μεταϕορά δεδομένων Ο σκοπός του project είναι η υλοποίηση μιας βιβλιοθήκης η οποία θα παρέχει μια απλή έκδοση του TCP Παρόλα αυτά, θα είναι ικανή να παρέχει αξιόπιστη επικοινωνία μεταξύ συσκευών με περιορισμένους υπολογιστικούς πόρους χρησιμοποιώντας το διαθέσιμο UDP πρωτόκολλο μεταϕοράς 1 Δομή του project - Προθεσμίες To project αποτελείται από 2 ϕάσεις Στην πρώτη ϕάση ζητείται να υλοποιήσετε την δομή των microtcp πακέτων, το 3- way handshake (χειραψία) και το finalize (τερματισμό) της microtcp σύνδεσης Επίσης, θα υλοποιήσετε ενα εργαλείο μεταϕοράς αρχείων με TCP το οποίο θα χρησιμοποιήσετε στο τέλος για την σύγκριση της απόδοσης της υλοποίησή σας, τόσο σε σχέση με την πλήρη υλοποίηση του TCP, όσο και με υλοποιήσεις άλλων ομάδων Στην δεύτερη ϕάση θα πρέπει να υλοποιήσετε την βασική λειτουργία του TCP η οποία περιλαμβάνει τους μηχανισμούς για acknowledgements, retransmissions, error checking, TCP windowing, Congestion control και Slow start Απαγορεύεται να αλλάξετε τα συμβόλαια των συναρτήσεων που σας έχουν δοθεί και το structure των headers που σας δίνονται Η αλλαγή τους θα σημαίνει και τον μηδενισμό του project Παρόλα αυτά είναι επιθυμητές οι αλλαγές/προσθήκες στα υπόλοιπα structs 2 Ζητούμενα Β Φάσης 21 Συναρτήσεις μεταϕοράς δεδομένων Σε αυτή την ϕάση, θα πρέπει να υλοποιήσετε τις συναρτήσεις microtcp_send() και microtcp_recv() οι οποίες παρέχουν παρόμοια λειτουργικότητα με τις αντίστοιχες send() και recv() του TCP 1

ssize_t microtcp_send( microtcp_sock_t *socket, const void *buffer, size_t length, int flags); Η συνάρτηση αυτή είναι υπεύθυνη για την αξιόπιστη αποστολή δεδομένων Οι παράμετροι είναι οι εξής : socket: Ο pointer του socket που διαχειρίζεται την microtcp σύνδεση Είναι pointer καθώς θα χρειαστεί να ανανεώσετε διάϕορα πεδία που περιγράϕουν την κατάσταση της σύνδεσης buffer: Τα δεδομένα που θέλει ο χρήστης να στείλει length: Ο αριθμός των bytes που θέλει να στείλει ο χρήστης flags: Flags που τυχόν επιθυμεί ο χρήστης να περάσει στο socket Η συνάρτηση θα πρέπει να επιστρέϕει τον αριθμό των bytes που επιτυχημένα και επιβεβαιωμένα έστειλε στον παραλήπτη Σε περίπτωση οποιουδήποτε λάθους θα πρέπει να επιστρέϕει -1 ssize_t microtcp_recv( microtcp_sock_t *socket, void *buffer, size_t length, int flags); Η συνάρτηση αυτή είναι υπεύθυνη για την αξιόπιστη λήψη δεδομένων Οι παράμετροι είναι οι εξής : socket: Ο pointer του socket που διαχειρίζεται την microtcp σύνδεση Είναι pointer καθώς θα χρειαστεί να ανανεώσετε διάϕορα πεδία που περιγράϕουν την κατάσταση της σύνδεσης buffer: Θέση μνήμης στην οποία τα δεδομένα από το δίκτυο θα αποθηκευτούν Είναι ευθύνη του χρήστη, να παρέχει αρκετό χώρο length: Ο αριθμός των bytes που θέλει να λάβει ο χρήστης flags: Flags που τυχόν επιθυμεί ο χρήστης να περάσει στο socket Η συνάρτηση θα πρέπει να επιστρέϕει τον αριθμό των bytes που επιτυχημένα λήϕθηκαν Σε περίπτωση οποιουδήποτε λάθους θα πρέπει να επιστρέϕει -1 Επιπλέον, καθώς η microtcp_recv() είναι μια κλήση που μπορεί να μπλοκάρει, υπάρχει η πιθανότητα να λάβει ένα μήνυμα τερματισμού της σύνδεσης (FIN, ACK) Σε αυτή την περίπτωση, θα πρέπει να επιστρέϕει -1 και να θέτει την κατάσταση της microtcp σύνδεσης ως CLOSING_BY_PEER Την πληροϕορία αυτή την εκμεταλλεύεται η microtcp_shutdown() για να συνεχίσει κατάλληλα τον τερματισμό της σύνδεσης 2

3 TCP Λειτουργίες Το microtcp θα πρέπει να παρέχει την λειτουργικότητα του TCP χρησιμοποιώντας κάποιους από τους βασικούς του μηχανισμούς 31 Error checking Αξιοποιώντας το πεδίο checksum του microtcp_header_t header θα πρέπει να γίνεται ο έλεγχος αν το πακέτο λήϕθηκε σωστά Σε περίπτωση που το checksum δεν είναι σωστό, το πακέτο πρέπει να θεωρείται κατεστραμμένο και μπορείτε να θεωρήσετε ότι δεν λήϕθηκε ποτέ, ενεργοποιώντας τους κατάλληλους μηχανισμούς 32 Λήψη πακέτων με την σωστή σειρά Στόχος του microtcp είναι η σωστή και ασϕαλής μεταϕορά δεδομένων Για αυτό τον λόγο θα πρέπει να εξασϕαλίζεται η λήψη των πακέτων με σωστή σειρά Κάθε πακέτο περιέχει ένα sequence number Χρησιμοποιώντας αυτό τον αριθμό κατάλληλα, μπορείτε να αποϕασίσετε αν ένα πακέτο λήϕθηκε ή όχι με την σωστή σειρά Η σωστή σειρά πακέτων θα πρέπει να ελέγχεται καθ όλη την διάρκεια της σύνδεσης, δηλαδή από το 3-way handshake έως και τον τερματισμό της σύνδεσης και για όλα τα πακέτα που ανταλλάσσονται 33 Retransmissions Για κάθε πακέτο που αποστέλλεται θα πρέπει να ληϕθεί το αντίστοιχο ACK Σε περίπτωση που το ACK δεν ληϕθεί σε MICROTCP_ACK_TIMEOUT_US microsecons (us) (ορίζεται στο microtcph), ο αποστολέας πρέπει να ξανα-στείλει το πακέτο Το πρόβλημα όμως είναι πως η recvfrom() που χρησιμοποιείται εσωτερικά είναι μια συνάρτηση που μπλοκάρει μέχρι να λάβει κάποιο πακέτο Μπορείτε παρόλα αυτά να της θέσετε ένα timeout χρησιμοποιώντας την setsockopt() και το όρισμα SO_RCVTIMEO Με αυτό τον τρόπο, αν η recvfrom() δεν λάβει κάποιο πακέτο μέσα στον χρόνο που ορίσατε, επιστρέϕει έναν αρνητικό αριθμό Τον timeout χρόνο μπορείτε να τον ορίσετε με τον παρακάτω τρόπο : struct timeval timeout; timeout tv_sec = 0; timeout tv_usec = MICROTCP_ACK_TIMEOUT_US; if ( setsockopt( receive_socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, 3

} sizeof( struct timeval)) < 0) { perror(" setsockopt"); Retransmission θα πρέπει να γίνει επίσης στην περίπτωση που ο αποστολέας λάβει 3 συνεχόμενα duplicate ACK Τι ακριβώς είναι το duplicate ACK περιγράϕεται παρακάτω 34 Duplicate Acknowledgements και Fast Retransmit Τα duplicate ACKs είναι ένας ιδιαίτερα σημαντικός μηχανισμός του TCP με την βοήθεια του οποίου ο αποστολέας μαθαίνει άμεσα την κατάσταση του πακέτου που έστειλε Αν το πακέτο λήϕθηκε με λάθη, ο παραλήπτης στέλνει πίσω ένα ACK που είναι το ίδιο με το ACK του τελευταίου πακέτου που λήϕθηκε σωστά Ο αποστολέας είναι σε θέση εύκολα να καταλάβει ότι το συγκεκριμένο ACK αϕορά προηγούμενο πακέτο, οπότε αναγνωρίζει πως το πακέτο δεν έϕτασε σωστά και ενεργοποιεί τον retransmission μηχανισμό Επίσης duplicate ACK στέλνεται στην περίπτωση που ο παραλήπτης λάβει ένα πακέτο με λάθος sequence number Χωρίς το duplicate ACK, ο αποστολέας θα έπρεπε να περιμένει μέχρι να κάνει timeout προτού κάνει retransmission Κάτι τέτοιο όμως θα μείωνε δραματικά την απόδοση, επειδή το timeout συμβαίνει σχετικά μετά από ένα μεγάλο διάστημα Λαμβάνοντας λοιπόν ο receiver 3 duplicate ACKs, ξεκινάει αμέσως το retransmission ο μηχανισμός αυτός είναι γνωστός ως Fast Retransmit, καθώς αντιδράει άμεσα σε μια πιθανή απώλεια δεδομένων Ένα ερώτημα που προκύπτει είναι ποιο πακέτο θα πρέπει να ξαναστείλει ο αποστολέας Το duplicate ACK περιέχει όμως τον αριθμό των bytes που έχουν ληϕθεί σωστά από τον παραλήπτη Επομένως είναι εύκολο να βρεθεί ποια δεδομένα θα πρέπει να ξανασταλθούν 35 Flow Control To TCP εϕαρμόζει end-to-end έλεγχο ροής για να αποϕύγει απώλεια πακέτων Για παράδειγμα αν ένας host στέλνει σε ένα κινητό πακέτα πολύ γρήγορα, το κινητό με τις περιορισμένες υπολογιστικές δυνατότητες τα επεξεργάζεται πιο αργά Τελικά οι buffers του κινητού θα γεμίσουν και πακέτα μπορεί να χαθούν Σκοπός του flow control είναι να περιοριστεί η ταχύτητα αποστολής ανάλογα με τις δυνατότητες του παραλήπτη To TCP το επιτυγχάνει χρησιμοποιώντας τον αλγόριθμο του sliding window Αρχικά κατά το 3-way handshake ανταλλάσσεται το αρχικό window size Για την 4

περίπτωση του microtcp, αυτό ορίζεται με την σταθερά MICROTCP_WIN_SIZE Μόλις εγκαθιδρυθεί η σύνδεση και οι δύο πλευρές δεσμεύουν μνήμη για τον receive buffer τους Το μέγεθος του buffer θα πρέπει να είναι μεγαλύτερο ή ίσο του window Για την υλοποίησή μας το μέγεθος είναι ίσο με MICROTCP_RECVBUF_LEN Το window αναϕέρεται στον αριθμό των bytes που είναι σε θέση να δεχθεί ο παραλήπτης Όσο λαμβάνει πακέτα ο διαθέσιμος χώρος μικραίνει, άρα και το window Όταν τα δεδομένα, προωθηθούν προς τον χρήστη ο διαθέσιμος χώρος αυξάνεται ξανά, άρα το window μεγαλώνει Η κατάσταση του window αποθηκεύεται στο microtcp_sock_t Το curr_win_size αναϕέρεται στην τρέχουσα τιμή του window, ενώ το init_win_size στην αρχική τιμή που συμϕωνήθηκε κατά το handshake Ο αλγόριθμος δουλεύει ως εξής : Κατά την αποστολή του πρώτου πακέτου ο αποστολέας στέλνει ένα πακέτο μεγέθους X bytes To X δεν μπορεί να ξεπεράσει σε μέγεθος το Maximum Segment Size (MSS) Αν και υπάρχουν μηχανισμοί για τον αυτόματο εντοπισμό του MSS, το microtcp χρησιμοποιεί σταθερό MSS του οποίου το μέγεθος ορίζεται από την σταθερά MICROTCP_MSS Ο παραλήπτης δέχεται το πακέτο και το αποθηκεύει στον receive buffer Καθώς στέλνει πίσω το ACK, ενημερώνει κατάλληλα τον αποστολέα για το πόσα bytes είναι πρόθυμος να δεχθεί με το επόμενο πακέτο, τοποθετώντας την τιμή window X στο αντίστοιχο πεδίο του header Ο αποστολέας μπορεί να στείλει το πολύ όσα bytes αναϕέρονται στο πεδίο window του ACK header Προωθώντας bytes στον χρήστη, ο παραλήπτης αυξάνει το window του κατά Y Υπάρχει πιθανότητα το window κάποια στιγμή να γίνει 0 Σε μια τέτοια περίπτωση ο αποστολέας θα πρέπει να στέλνει επανειλημμένα ένα πακέτο χωρίς payload έως ότου πάρει ACK με μη-μηδενικό window Πριν την αποστολή αυτού του ειδικού σκοπού πακέτου, περιμένει random χρόνο μεταξύ 0 και MICROTCP_ACK_TIMEOUT_US microsecons Μόλις λάβει ACK με μημηδενικό window size συνεχίζει την αποστολή 36 Congestion Control Στο flow control μπορεί ο αποστολέας να συμμετέχει ενεργά αυξομειώνοντας τον όγκο των δεδομένων που στέλνει, όμως ο παραλήπτης είναι αυτός που καθορίζει τελικά τον αριθμό των bytes που θα στείλει ο αποστολέας βάση την πληρότητα των receive buffer του Για αυτό συνήθως θεωρείται πως το flow control υλοποιείται στον παραλήπτη 5

Αντίθετα το congestion control υλοποιείται στον αποστολέα, αντλώντας πληροϕορία για την κατάσταση του δικτύου κυρίως από τα ACKs Στόχος του είναι να αποϕύγει την συμϕόρηση στο δίκτυο εμποδίζοντας δυναμικά την ανεξέλεγκτη αποστολή δεδομένων, κρατώντας όμως την απόδοση σε υψηλά επίπεδα Το congestion control περιλαμβάνει τους αλγόριθμους slow start, congestion avoidance, fast retransmit και fast recovery Στο microtcp θα υλοποιήσετε τους μηχανισμούς slow start, congestion avoidance και τον προαναϕερθέν fast retransmit Παρόλο που το congestion avoidance και το slow start έχουν εντελώς διαϕορετικό στόχο, εντούτοις όταν μια TCP σύνδεση αντιμετωπίσει συμϕόρηση στο δίκτυο, θα πρέπει να περιοριστεί η ταχύτητα αποστολής δεδομένων και αργότερα να αποκατασταθεί Για αυτό τον λόγο συνήθως οι αλγόριθμοι congestion avoidance και slow start υλοποιούνται μαζί Για την υλοποίησή τους χρειάζονται δύο μεταβλητές για κάθε σύνδεση : cwnd: Congestion window O αριθμός των bytes που μπορεί να στείλει ο αποστολέας, χωρίς να περιμένει για τα αντίστοιχα ACKs ssthresh: Slow start threshold Το όριο αυτό ορίζει αν θα χρησιμοποιηθεί ο αλγόριθμος slow start ή congestion avoidance Αν cwnd ssthresh τότε χρησιμοποιείται ο slow start αλγόριθμος Διαϕορετικά ο congestion avoidance Αρχικά το cwnd τίθεται ίσο με 3 M SS χρησιμοποιώντας την σταθερά MICROTCP_INIT_CWND Αντίστοιχα το αρχικό ssthresh είναι ίσο με το window του flow control και ορίζεται με τη σταθερά MICROTCP_INIT_SSTHRESH 361 Slow start Κατά την διάρκεια του slow start, για κάθε σωστό ACK που λαμβάνεται, το congestion window αυξάνεται κατά MSS bytes Αυτό σημαίνει ότι για κάθε RTT (x πακέτα στάλθηκαν - x ACKs λήϕθηκαν) το congestion window διπλασιάζεται 362 Congestion avoidance Κατά την διάρκεια του congestion avoidance, για κάθε RTT (x πακέτα στάλθηκαν - x ACKs λήϕθηκαν) το congestion window αυξάνεται κατά MSS bytes To congestion window θα αυξάνεται μέχρι να αρχίσουν πακέτα να χάνονται Αν λη- ϕθούν 3 duplicate ACKs τότε θα πρέπει να γίνουν οι παρακάτω αλλαγές : ssthresh = cwnd/2; cwnd = cwnd/2 + 1; Στην περίπτωση που περιμένοντας για ACK συμβεί timeout, τότε : 6

ssthresh = cwnd/2; cwnd = min( MICROTCP_MSS, ssthresh); και ενεργοποιείται ο slow start αλγόριθμος 4 Λεπτομέρειες υλοποίησης Αρχικά θα πρέπει να κατεβάσετε τον ανανεωμένο κώδικα από το Github repository https://githubcom/surligas/microtcp Συστήνεται ιδιαίτερα να δείτε τις αλλαγές στο microtcp_sock_t καθώς και σε άλλα σημεία του κώδικα Παρακάτω ακολουθεί ένα roadmap για την πιο εύκολη και σταδιακή υλοποίηση της ϕάσης αυτής Roadmap: 1 Κάντε τις απαραίτητες αλλαγές στο 3-way handshake Οι δύο host θα πρέπει να ανταλλάσσουν το αρχικό flow control window μέσω του πεδίου window του header 2 Τροποποιείστε την microtcp_shutdown() κατάλληλα, ώστε να παίρνει υπόψιν αν το FIN λήϕθηκε ήδη από μια προηγούμενη κλήση της microtcp_recv() 3 Ξεκινήστε να υλοποιείτε τις microtcp_recv() και microtcp_send() Σε αυτό το σημείο οι συναρτήσεις αυτές απλά θα στέλνουν και θα λαμβάνουν δεδομένα, πραγματοποιώντας μόνο τυπικούς ελέγχους 4 Προσθέστε στις microtcp_recv() και microtcp_send() το error checking και τον έλεγχο των sequence και ack numbers για την διασϕάλιση της λήψης πακέτων με σωστή σειρά Σε οποιαδήποτε περίπτωση λάθους θα πρέπει να στέλνεται ένα duplicate ACK 5 Προσθέστε στην microtcp_send() των έλεγχο για το duplicate ACK Αν το ACK που λήϕθηκε ήταν duplicate ACK, η microtcp_send() θα πρέπει να στέλνει ξανά το τελευταίο πακέτο Αν καθώς περιμένει για ACK γίνει κάποιο timeout, ξαναστέλνει το τελευταίο πακέτο 6 Υλοποιήστε στις microtcp_recv() και microtcp_send() τον flow control μηχανισμό 7 Υλοποιήστε στην microtcp_send() τον congestion control μηχανισμό 8 Προσαρμόστε το bandwidth_test εργαλείο στη ανάγκες του microtcp Πλέον ο κώδικας για την TCP υλοποίηση σας δίνεται έτοιμος και μεταϕέρει το αρχείο σωστά στην άλλη πλευρά ΠΡΟΣΟΧΗ: Τα μεγέθη των buffers που επιθυμεί να στείλει ο client θα πρέπει να παραμείνουν ίδια Επίσης θα πρέπει να εκτυπώνετε το αποτέλεσμα με ακριβώς τον ίδιο τρόπο στην οθόνη 7

9 ΚΑΛΕΣ ΔΙΑΚΟΠΕΣ! 41 Διαδικασία αποστολής πακέτων Κάθε UDP πακέτο που αποστέλλεται με την microtcp_send() θα πρέπει να έχει μέγεθος μικρότερο ή ίσο με το MSS Αυτό γίνεται για να αποϕευχθεί το IP fragmentation Επομένως ο buffer του χρήστη, θα πρέπει να κατακερματιστεί σε πολλαπλά chunks των MSS bytes Επιπρόσθετα, πριν την αποστολή των πακέτων θα πρέπει να ελέγχεται και ο επιτρεπτός αριθμός bytes που μπορούν να σταλθούν βάσει των flow και congestion control μηχανισμών Γενικά ο αποστολέας μπορεί να στείλει το πολύ min(window, cwnd) bytes κάθε ϕορά ssize_t microtcp_send( microtcp_sock_t *socket, const void *buffer, size_t length, int flags) { remaining = length; while( data_sent < length){ bytes_to_send = min( flow_ctrl_win, cwnd, remaining); chunks = bytes_to_send / MICROTCP_MSS; for(i = 0; i < chunks; i++){ sendto (); } /* Check if there is a semi - filled chunk */ if( bytes_to_send % MICROTCP_MSS){ chunks ++; sendto (); } /* Get the ACKs */ for(i = 0; i < chunks; i++){ recvfrom (); } /* Retransmissions */ /* Update window */ /* Update congestion control */ remaining -= bytes_to_send; 8

} data_sent += bytes_to_send; 5 Τρόπος βαθμολογίας 51 Προϕορικός Βαθμός Παρά το γεγονός ότι το project είναι ομαδικό, κάθε μέλος της ομάδας θα πρέπει να είναι σε θέση να απαντήσει σε βασικές ερωτήσεις που αϕορούν κομβικά σημεία της υλοποίησης Οι απαντήσεις του κάθε μέλους θα συνεισϕέρουν κατά 30% επί της βαθμολογίας του project Επομένως κάθε μέλος μπορεί να πάρει διαϕορετικό βαθμό ανάλογα τις απαντήσεις 52 Βαθμός συστήματος Το microtcp θα αξιολογηθεί χρησιμοποιώντας το bandwidth_test εργαλείο Η βαθμολογία θα εξαρτηθεί από τους εξής παράγοντες : 1 Σωστή μορϕή πακέτου 2 Ορθή χρήση της πληροϕορίας που εμπεριέχεται στον header 3 Αξιόπιστη επικοινωνία σε ένα δίκτυο το οποίο χρησιμοποιούν τρίτοι έντονα 4 Σωστή υλοποίηση των μηχανισμών flow και congestion control 6 Παραδοτέα Κατά την παράδοση του project θα πρέπει να συμπεριλάβετε τον ϕάκελο microtcp Αν δεν χρησιμοποιήσετε το CMake build system θα πρέπει να παραδώσετε και ένα Makefile που κάνει build τον κώδικά σας Projects χωρίς Makefile ΔΕΝ θα διορθώνονται Επίσης θα πρέπει να παραδώσετε και μια αναϕορά Στην αναϕορά εκτός από μια σύντομη περιγραϕή της υλοποίησή σας θα πρέπει να συμπεριλάβετε και την απόδοση του συστήματος σας Αυτό μπορεί να γίνει χρησιμοποιώντας το bandwidth_test εργαλείο το οποίο θα το τρέξετε σε 2 διαϕορετικά μηχανήματα της σχολής Για την μέτρηση συστήνεται να χρησιμοποιήσετε ένα σχετικά μεγάλο αρχείο (> 500 ΜΒ) 9

Σαν μέτρο απόδοσης μπορείτε να χρησιμοποιήσετε τον λόγο της απόδοσης του TCP και της δικής σας υλοποίησης Δηλαδή : performance = Throughput microtcp Throughput TCP 10