Κεφάλαιο 3 Επίπεδο Μεταφοράς Cmputer Netwrking: A Tp Dwn Apprach 4 th editin. Jim Kurse, Keith Rss Addisn-Wesley, sl July 2007. 3-1 Κεφάλαιο 3: Επίπεδο Μεταφοράς Οι στόχοι μας: Κατανόηση των αρχών πίσω από τις υπηρεσίες του επιπέδου : Πολύπλεξη/αποπολύ / πλεξη(multiplexing/de multiplexing) Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής (flw cntrl) Έλεγχος συμφόρησης (cngestin cntrl) Να μάθουμε για τα πρωτόκολλα επιπέδου του ιαδικτύου: UDP: ασυνδεσμική μεταφορά TCP: συνδεσμική μεταφορά Έλεγχος συμφόρησης τουtcp 3-2
Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-3 Υπηρεσίες και πρωτόκολλα παρέχουν λογική επικοινωνία μεταξύ διεργασιών εφαρμογών που τρέχουν σε διαφορετικά τερματικά συστήματα τα πρωτόκολλα τρέχουν στα τερματικά συστήματα πλευρά αποστολής: σπάει τα μηνύματα της εφαρμογής σε τμήματα, τα δίνει στο επίπεδο δικτύου πλευρά λήψης: ανασύνθεση των τμημάτων σε μηνύματα, τα δίνει στο επίπεδο εφαρμογής Περισσότερα από ένα πρωτόκολλα διαθέσιμα στις εφαρμογές ιαδίκτυο: TCP και UDP applicatin transprt netwrk data link physical applicatin transprt netwrk data link physical 3-4
Επίπεδο vs επίπεδο δικτύου επίπεδο δικτύου: λογική επικοινωνία μεταξύ υπολογιστών επίπεδο : λογική επικοινωνία μεταξύ διεργασιών στηρίζεται, συμπληρώνει τις υπηρεσίες του επιπέδου δικτύου Αναλογία νοικοκυριού: 12 παιδιά στέλνουν γράμματα σε 12 παιδιά διεργασίες = παιδιά δά μηνύματα εφαρμογών = γράμματα σε φακέλους υπολογιστές = σπίτια πρωτόκολλο = Ann και Bill (παιδί που αναλαμβάνει το μοίρασμα της αλληλογραφίας σε κάθε σπίτι) πρωτόκολλο επιπέδου δικτύου = ταχυδρομική υπηρεσία 3-5 Πρωτόκολλα επιπέδου του ιαδικτύου αξιόπιστη, σε ορθή σειρά μεταφορά (TCP) έλεγχος συμφόρησης (cngestin cntrl) έλεγχος ροής (flw cntrl) εγκαθίδρυση σύνδεσης μη αξιόπιστη, εκτός σειράς παράδοση: UDP καμία επέκταση της βέλτιστης προσπάθειας (best effrt) του IP υπηρεσίες που δεν είναι διαθέσιμες: εγγυήσεις ως προς την καθυστέρηση εγγυήσεις ως προς το εύρος ζώνης applicatin transprt netwrk data link physical netwrk data link physical netwrk data link physical netwrk data link physical netwrk data link physical netwrk data link physical netwrk data link physical applicatin transprt netwrk data link physical 3-6
Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-7 Πολύπλεξη/Αποπολύπλεξη Αποπολύπλεξη στον υπολογιστή λήψης: παράδοση των τμημάτων που λαμβάνονται στη σωστή scket Πολύπλεξη στον υπολογιστή αποστολής: Συ πολλαπλές sckets, προσθήκη κεφαλίδας (που αργότερα χρησιμοποιείται για αποπολύπλεξη) = scket = prcess applicatin P3 P1 P1 applicatin P2 P4 applicatin transprt transprt transprt netwrk netwrk netwrk link link link physical physical physical hst 1 hst 2 hst 3 3-8
Πώς δουλεύει η αποπολύπλεξη Ο υπολογιστής λαμβάνει IP datagrams (δεδομενογράμματα) μ μμ κάθε datagram έχει διεύθυνση IP προέλευσης, διεύθυνση IP προορισμού κάθε datagram μεταφέρει ένα τμήμα επιπέδου κάθε τμήμα έχει αριθμό θύρας προέλευσης, προορισμού Ο υπολογιστής υπηρεσίας χρησιμοποιεί διευθύνσεις IP & αριθμούς θύρας για να κατευθύνει το τμήμα στην κατάλληλη scket 32 bits surce prt # dest prt # ther header fields applicatin data (message) TCP/UDP segment frmat 3-9 Ασυνδεσμική αποπολύπλεξη ημιουργία sckets με αριθμούς θύρας: DatagramScket myscket1 = new DatagramScket(99111); DatagramScket myscket2 = new DatagramScket(99222); UDP scket ταυτοποιείται από: (διεύθυνση IP προορισμού, αριθμός θύρας προορισμού) Όταν ο υπολογιστής λαμβάνει τμήμα UDP: ελέγχει τον αριθμό θύρας προορισμού στο τμήμα κατευθύνει το τμήμα UDP στη scket με αυτό τον αριθμό θύρας Τα IP datagrams με διαφορετική διεύθυνση IP προέλευσης ή/και αριθμό θύρας προέλευσης κατευθύνονται στην ίδια scket 3-10
Ασυνδεσμική αποπολύπλεξη (συν.) DatagramScket serverscket = new DatagramScket(6428); P2 P3 P1P1 SP: 6428 DP: 9157 SP: 6428 DP: 5775 client IP: A SP: 9157 DP: 6428 server IP: C SP: 5775 DP: 6428 Client IP:B Το SP δίνει τη διεύθυνση επιστροφής 3-11 Συνδεσμική αποπολύπλεξη Η TCP scket ταυτοποιείται Ένας υπολογιστής εξυπηρέτης από την τετράδα: μπορεί να υποστηρίξει πολλές διεύθυνση IP προέλευσης ταυτόχρονες TCP sckets: αριθμός θύρας προέλευσης κάθε scket αναγνωρίζεται διεύθυνση IP προορισμού από τη δική της τετράδα αριθμός θύρας προορισμού Οι εξυπηρέτες web έχουν Ο υπολογιστής λήψης διαφορετικές sckets για κάθε χρησιμοποιεί και τις τέσσερις συνδεδεμένο πελάτη τιμές για να κατευθύνει το το μη-παραμένον HTTP έχει τμήμα στην κατάλληλη scket διαφορετική scket για κάθε αίτηση HTTP 3-12
Συνδεσμική αποπολύπλεξη (συν.) P1 P4 P5 P6 P2 P1 P3 SP: 5775 DP: 80 S-IP: B D-IP:C client IP: A SP: 9157 DP: 80 server SP: 9157 DP: 80 Client S-IP: A S-IP: B IP:B IP: C D-IP:C D-IP:C 3-13 Συνδεσμική αποπολύπλεξη : Web Server με νήματα P1 P4 P2 P1 P3 SP: 5775 DP: 80 S-IP: B D-IP:C client IP: A SP: 9157 DP: 80 server SP: 9157 DP: 80 Client S-IP: A S-IP: B IP:B IP: C D-IP:C D-IP:C 3-14
Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-15 UDP: User Datagram Prtcl [RFC 768] Το απλούστερο πρωτόκολλο του διαδικτύου Υπηρεσία παράδοσης βέλτιστης προσπάθειας ( best effrt ) τα τμήματα UDP μπορεί να: χαθούν παραδοθούν εκτός σειράς στις εφαρμογές Ασυνδεσμική: δεν γίνεται χειραψία μεταξύ του UDP αποστολέα και δέκτη Η διαχείριση κάθε UDP τμήματος γίνεται ξεχωριστά Γιατί υπάρχει το UDP; Χωρίς αποκατάσταση σύνδεσης (που εισάγει καθυστέρηση) απλό: χωρίς κατάσταση σύνδεσης στον αποστολέα, δέκτη μικρή κεφαλίδα τμήματος Χωρίς έλεγχο συμφόρησης: το UDP μπορεί να εκραγεί όσο γρήγορα θέλουμε 3-16
UDP: περισσότερα συχνά χρησιμοποιείται για εφαρμογές πολυμέσων συνεχούς ροής (streaming) ανοχή ως προς τις απώλειες ευαισθησία ως προς το ρυθμό άλλες χρήσεις του UDP π.χ. Μήκος του τμήματος UDP σε bytes, συμπεριλαμβανομένης της κεφαλίδας 32 bits surce prt # dest prt # length checksum DNS SNMP Applicatin αξιόπιστη μεταφορά πάνω από data το UDP: προσθήκη αξιοπιστίας (message) στο επίπεδο εφαρμογής ανάνηψη από τα λάθη ανά εφαρμογή ομή τμήματος UDP 3-17 UDP checksum (άθροισμα ελέγχου) Σκοπός: ανίχνευση σφαλμάτων (π.χ. χ ανεστραμμένων bits) στο μεταδιδόμενο τμήμα Αποστολέας: χειρίζεται το περιεχόμενο του τμήματος ως ακολουθία 16 bits ακεραίων checksum: συμπλήρωμα ως προς το 1 του αθροίσματος του περιεχομένου (εκφρασμένου σε 16-bit λέξεις) ο αποστολέας τοποθετεί την τιμή του checksum στο πεδίο checksum του τμήματος UDP έκτης: υπολογισμός του checksum του λαμβανομένου μηνύματος έλεγχος αν το υπολογισμένο checksum ισούται με την τιμή του πεδίου checksum: Όχι ανίχνευση σφάλματος Ναι μη ανίχνευση σφάλματος Αλλά παρόλα αυτά ενδέχεται να γίνουν λάθη? (περισσότερα στη συνέχεια) 3-18
Παράδειγμα Checksum ιαδικτύου Σημείωση Κατά την πρόσθεση των αριθμών, το κρατούμενο από την πιο σημαντική θέση πρέπει να προστεθεί στο αποτέλεσμα Παράδειγμα: πρόσθεση δύο ακεραίων 16-bit 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 wraparund 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 sum checksum 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 3-19 Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-20
Αρχές της αξιόπιστης δεδομένων Σημαντική στα επίπεδα εφαρμογής,, ζεύξης Στο tp-10 των σημαντικών θεμάτων της δικτύωσης! Τα χαρακτηριστικά του αναξιόπιστου καναλιού θα καθορίσουν την πολυπλοκότητα του πρωτοκόλλου αξιόπιστης ξό δεδομένων δ (reliable data transfer prtcl- rdt) 3-21 Αρχές της αξιόπιστης δεδομένων Σημαντική στα επίπεδα εφαρμογής,, ζεύξης Στο tp-10 των σημαντικών θεμάτων της δικτύωσης! Τα χαρακτηριστικά του αναξιόπιστου καναλιού θα καθορίσουν την πολυπλοκότητα του πρωτοκόλλου αξιόπιστης ξό δεδομένων δ (reliable data transfer prtcl- rdt) 3-22
Αρχές της αξιόπιστης δεδομένων Σημαντική στα επίπεδα εφαρμογής,, ζεύξης Στο tp-10 των σημαντικών θεμάτων της δικτύωσης! Τα χαρακτηριστικά του αναξιόπιστου καναλιού θα καθορίσουν την πολυπλοκότητα του πρωτοκόλλου αξιόπιστης ξό δεδομένων δ (reliable data transfer prtcl- rdt) 3-23 Αξιόπιστη μεταφορά δεδομένων: ξεκινώντας rdt_send(): καλείται από πάνω, (π.χ., από την εφαρμογή). ίνονται δεδομένα για παράδοση στο ανώτερο επίπεδο του δέκτη deliver_data(): καλείται από την rdt για να παραδώσει δεδομένα στο ανώτερο επίπεδο send side receive side udt_send(): καλείται από την rdt, για τη μεταφορά πακέτου πάνω από αναξιόπιστο κανάλι στον δέκτη rdt_rcv(): καλείται όταν το πακέτο φτάσει στην πλευρά του καναλιού του δέκτη 3-24
Αξιόπιστη μεταφορά δεδομένων: ξεκινώντας Θα: αναπτύξουμε σταδιακά τις πλευρές του αποστολέα και του δέκτη ενός πρωτοκόλλου αξιόπιστης δεδομένων [reliable data transfer (rdt) prtcl ] θεωρήσουμε μόνο μονόδρομη μεταφορά δεδομένων Αλλά η κίνηση ελέγχου θα ρέει και προς τις δύο κατευθύνσεις! Χρήση μηχανών πεπερασμένων καταστάσεων [finite state machines (FSM)] για την περιγραφή του αποστολέα και του δέκτη Συμβάν που προκαλεί τη μετάβαση μεταξύ των καταστάσεων Ενέργειες που λαμβάνουν χώρα κατά τη μετάβαση Κατάσταση (state): όντας στην «κατάσταση» η επόμενη κατάσταση καθορίζεται μοναδικά από το επόμενο συμβάν state 1 event actins state 2 3-25 Rdt1.0: αξιόπιστη μεταφορά επάνω σε αξιόπιστο κανάλι Το υποκείμενο κανάλι είναι πλήρως αξιόπιστο Χωρίς λάθη bit Χωρίς απώλειες πακέτων Ξεχωριστές FSMs για τον αποστολέα, δέκτη: Ο αποστολέας στέλνει δεδομένα στο υποκείμενο κανάλι Ο δέκτης διαβάζει δεδομέναδ από το υποκείμενο κανάλι Wait fr call frm abve rdt_send(data) packet = make_pkt(data) udt_send(packet) Wait fr call frm belw rdt_rcv(packet) extract (packet,data) deliver_data(data) Αποστολέας (sender) έκτης (receiver) 3-26
Rdt2.0: κανάλι με σφάλματα bit Το υποκείμενο κανάλι ενδέχεται να αντιστρέψει bits στο πακέτο Άθροισμα ελέγχου για την ανίχνευση σφαλμάτων bit Ερώτημα: πώς να γίνεται η ανάνηψη από λάθη: Θετικές επιβεβαιώσεις [acknwledgements (ACKs)]: ο δέκτης λέει ρητά στον αποστολέα ότι το πακέτο λήφθηκε σωστά Αρνητικές επιβεβαιώσεις [negative acknwledgements (NAKs)]: ο δέκτης λέει ρητά στον αποστολέα ότι το πακέτο είχε λάθη Ο δέκτης αναμεταδίδει το πακέτο μόλις λάβει NAK Νέοι μηχανισμοί στο rdt2.0 (πέρα από το rdt1.0): Ανίχνευση σφάλματος (errr detectin) Ανάδραση δέκτη (receiver feedback): μηνύματα ελέγχου (ACK,NAK) δέκτης->αποστολέας 3-27 rdt2.0: περιγραφή FSM rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isnak(rcvpkt) Wait fr Wait fr call frm ACK r udt_send(sndpkt) abve NAK rdt_rcv(rcvpkt) && isack(rcvpkt) Λ sender receiver rdt_rcv(rcvpkt) rcv(rcvpkt) && crrupt(rcvpkt) udt_send(nak) Wait fr call frm belw rdt_rcv(rcvpkt) && ntcrrupt(rcvpkt) t( extract(rcvpkt,data) deliver_data(data) udt_send(ack) 3-28
rdt2.0: λειτουργίa χωρίς σφάλματα rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isnak(rcvpkt) Wait fr Wait fr call frm ACK r udt_send(sndpkt) abve NAK rdt_rcv(rcvpkt) && isack(rcvpkt) Λ rdt_rcv(rcvpkt) rcv(rcvpkt) && crrupt(rcvpkt) udt_send(nak) Wait fr call frm belw rdt_rcv(rcvpkt) && ntcrrupt(rcvpkt) t( extract(rcvpkt,data) deliver_data(data) udt_send(ack) 3-29 rdt2.0: σενάριο σφάλματος rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isnak(rcvpkt) Wait fr Wait fr call frm ACK r udt_send(sndpkt) abve NAK rdt_rcv(rcvpkt) && isack(rcvpkt) Λ rdt_rcv(rcvpkt) rcv(rcvpkt) && crrupt(rcvpkt) udt_send(nak) Wait fr call frm belw rdt_rcv(rcvpkt) && ntcrrupt(rcvpkt) t( extract(rcvpkt,data) deliver_data(data) udt_send(ack) 3-30
Το rdt2.0 έχει ένα μοιραίο σφάλμα! Τι συμβαίνει αν ί δ ώ έ καταστραφεί το ACK/NAK? ιαχείριση διπλών πακέτων: Ο αποστολέας αναμεταδίδει το τρέχον πακέτο αν αλλοιωθεί το ACK/NAK Ο αποστολέας δεν γνωρίζει Ο αποστολέας προσθέτει τι συνέβη στο δέκτη! αριθμό ακολουθίας (sequence εν μπορεί απλά να number) σε κάθε πακέτο αναμεταδώσει: ενδεχομένως Ο δέκτης απορρίπτει (δεν διπλά (duplicate) πακέτα προωθεί προς τα πάνω) ) τα διπλά πακέτα ιακοπή και αναμονή (stp and wait) Ο αποστολέας στέλνει ένα πακέτο και μετά περιμένει για την απόκριση του δέκτη 3-31 rdt2.1: αποστολέας, διαχειρίζεται αλλοιωμένα ACK/NAKs rdt_rcv(rcvpkt) && ntcrrupt(rcvpkt) && isack(rcvpkt) Λ rdt_rcv(rcvpkt) && ( crrupt(rcvpkt) p isnak(rcvpkt) ) udt_send(sndpkt) rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( crrupt(rcvpkt) Wait fr Wait fr isnak(rcvpkt) ) call 0 frm ACK r abve NAK 0 udt_send(sndpkt) Wait fr ACK r NAK 1 rdt_send(data) d(d t Wait fr call 1 frm abve rdt_ rcv(rcvpkt) && ntcrrupt(rcvpkt) && isack(rcvpkt) Λ sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) 3-32
rdt2.1: δέκτης, διαχειρίζεται αλλοιωμένα ACK/NAKs rdt_rcv(rcvpkt) && (crrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && nt crrupt(rcvpkt) && has_seq1(rcvpkt) seq1(rcvpkt) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ntcrrupt(rcvpkt) && has_seq0(rcvpkt) seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) d( d Wait fr 0 frm belw Wait fr 1 frm belw rdt_rcv(rcvpkt) && ntcrrupt(rcvpkt) && has_seq1(rcvpkt) seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (crrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && nt crrupt(rcvpkt) && has_seq0(rcvpkt) seq0(rcvpkt) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) 3-33 rdt2.1: συζήτηση Αποστολέας: έκτης: Στο πακέτο προστίθεται # ακολουθίας ύο # ακολουθίας (0,1) αρκούν. Γιατί? Πρέπει να ελέγξει αν το ACK/NAK που έλαβε είναι κατεστραμμένο ιπλάσιες καταστάσεις Η κατάσταση πρέπει να «θυμάται» αν το «τρέχον» πακέτο έχει # ακολουθίας 0 ή 1 πρέπει να ελέγξει αν το λαμβανόμενο μ πακέτο είναι διπλό Η κατάσταση δείχνει αν αναμένεται 0 ή 1 ως # ακολουθίας πακέτου σημείωση: ο δέκτης δεν μπορεί να γνωρίζει αν το τελευταίο του ACK/NAK ελήφθη σωστά στον αποστολέα 3-34
rdt2.2: 2: Ένα πρωτόκολλο χωρίς NAK Ίδια λειτουργικότητα με το rdt2.1, χρησιμοποιώντας μόνοacks Αντί για NAK, ο δέκτης στέλνει ACK για το τελευταίο πακέτο που έλαβε σωστά Ο δέκτης πρέπει ρητά να συμπεριλάβει τον # ακολουθίας του πακέτου για το οποίο γίνεται η θετική επιβεβαίωση (ACK) ιπλό (duplicate) ACK στον αποστολέα έχει σαν αποτέλεσμα την ίδια ενέργεια όπως το NAK: αναμεταδίδει το τρέχον πακέτο 3-35 rdt2.2:αποσπάσματα αποστολέα, δέκτη rdt_rcv(rcvpkt) && (crrupt(rcvpkt) has_seq1(rcvpkt)) udt_send(sndpkt) rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( crrupt(rcvpkt) Wait fr Wait fr call 0 frm ACK isack(rcvpkt,1) ) abve 0 udt_send(sndpkt) Wait fr 0 frm belw sender FSM fragment receiver FSM fragment rdt_rcv(rcvpkt) rcv(rcvpkt) && ntcrrupt(rcvpkt) && isack(rcvpkt,0) Λ rdt_rcv(rcvpkt) && ntcrrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack1, chksum) udt_send(sndpkt) 3-36
rdt3.0: κανάλια με λάθη και απώλειες Νέα υπόθεση: το Π έ υποκείμενο κανάλι μπορεί επίσης να χάσει πακέτα (δεδομένα ή ACKs) Άθροισμα ελέγχου, # ακολουθίας, ACKs, αναμεταδόσεις βοηθούν αλλά δεν αρκούν Προσέγγιση: ο αποστολέας περιμένει για «εύλογο» χρονικό διάστημα για το ACK Αναμεταδίδει αν δεν ληφθεί ACK σε αυτό το διάστημα Αν το πακέτο (ή το ACK) απλά καθυστέρησε (δεν χάθηκε): Οι αναμεταδώσεις θα είναι διπλές (duplicate), αλλά η χρήση # ακολουθίας το αντιμετωπίζει ήδη αυτό Ο δέκτης πρέπει να καθορίσει # ακολουθίας του πακέτου για το οποίο είναι το ACK Απαιτεί χρονομετρητή αντίστροφης μέτρησης 3-37 rdt3.0 αποστολέας rdt_send(data) rdt_rcv(rcvpkt) && sndpkt = make_pkt(0, data, checksum) ( crrupt(rcvpkt) rdt_rcv(rcvpkt) udt_send(sndpkt) d( d start_timer isack(rcvpkt,1) ) Λ Λ Wait fr Wait timeut call 0frm fr ACK0 udt_send(sndpkt) abve start_timer rdt_rcv(rcvpkt) && ntcrrupt(rcvpkt) && isack(rcvpkt,1) stp_timer rdt_rcv(rcvpkt) && ntcrrupt(rcvpkt) t( && isack(rcvpkt,0) stp_timer Wait fr ACK1 Wait fr call 1 frm abve timeut udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( crrupt(rcvpkt) isack(rcvpkt,0) ) Λ rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) Λ 3-38
rdt3.0 εν δράσει 3-39 rdt3.0 εν δράσει 3-40
Απόδοση του rdt3.0 Το rdt3.0 d30 δουλεύει, αλλά η απόδοσή του είναι χαμηλή Π.χ.: ζεύξη 1 Gbps, καθυστ. διαδ. 15 ms,πακ. 8000 bit: d trans L = R = 8000bits 10 bps 9 = 8micrsecnds U sender : βαθμός χρήσης (utilizatin) ποσοστό του χρόνου που ο αποστολέας είναι απασχολημένος στέλνοντας U L / R.008 = = 0.00027 sender RTT + L / R = 30.008 Πακέτο 1KB κάθε 30 msec -> 33kB/sec thrughput σε ζεύξη 1 Gbps Το δικτυακό πρωτόκολλο περιορίζει τη χρήση των φυσικών πόρων! 3-41 rdt3.0: Λειτουργία διακοπής και αναμονής (stp-and-wait) first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R sender receiver RTT first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R U sender = L / R RTT + L / R =.008 30.008 = 0.00027 3-42
Πρωτόκολλα με διοχέτευση (Pipelined prtcls) ιοχέτευση (Pipelining): ο αποστολέας επιτρέπει πολλαπλά, εν πτήσει, προς επιβεβαίωση πακέτα Το εύρος του αριθμού ακολουθίας πρέπει να αυξηθεί Ενταμίευση (buffering) στον αποστολέα ή/και στο δέκτη ύο γενικές μορφές των πρωτοκόλλων διοχέτευσης: g- Back-N, επιλεκτική επανάληψη (selective repeat) 3-43 ιοχέτευση (pipelining): αύξηση βαθμού χρήσης (utilizatin) first packet bit transmitted, t = 0 last bit transmitted, t = L / R sender receiver RTT ACK arrives, send next packet, t = RTT + L / R first packet bit arrives last packet bit arrives, send ACK last bit f 2 nd packet arrives, send ACK last bit f 3 rd packet arrives, send ACK Αύξηση βαθμού χρήσης Κατά ένα παράγοντα 3! U sender = 3 * L / R RTT + L / R =.024 30.008 = 0.0008 3-44
Πρωτόκολλα διοχέτευσης G-back-N: γενική εικόνα: Επιλεκτική επανάληψη Ο αποστολέας μπορεί να έχει έως και Ν μη επιβεβαιωμένα (Selective Repeat): γενική εικόνα πακέτα στη διοχέτευση Ο αποστολέας μπορεί να Ο δέκτης μόνο στέλνει έχει έως και Ν μη συσσωρευτικά (cumulative) acks επιβεβαιωμένα πακέτα στη διοχέτευση εν επιβεβαιώνει πακέτο αν υπάρχει κάποιο κενό Ο αποστολέας έχει χρονομετρητή για το πιο παλιό μη επιβεβαιωμένο πακέτο Αν ο χρονομετρητής λήξει, αναμεταδίδει όλα τα μη επιβεβαιωμένα πακέτα Ο δέκτης επιβεβαιώνει μεμονωμένα πακέτα Ο αποστολέας διατηρεί χρονομετρητή ρη για κάθε μη επιβεβαιωμένο πακέτο Όταν ο χρονομετρητής λήγει, αναμεταδίδει μόνο το μη επιβεβαιωμένο πακέτο 3-45 Επιλεκτική επανάληψη: γενική εικόνα Ο αποστολέας μπορεί να έχει έως και Ν μη επιβεβαιωμένα πακέτα στη διοχέτευση Ο δέκτης επιβεβαιώνει μεμονωμένα πακέτα Ο αποστολέας διατηρεί χρονομετρητή για κάθε μη επιβεβαιωμένο πακέτο Όταν ο χρονομετρητής λήγει, αναμεταδίδει μόνο το μη επιβεβαιωμένο πακέτο 3-46
G-Back-N Αποστολέας: k-bit # ακολουθίας στην κεφαλίδα του πακέτου Επιτρέπεται «παράθυρο» ( windw ) έως και N, συνεχόμενων μη επιβεβαιωμένων πακέτων ACK(n): επιβεβαιώνει όλα τα πακέτα έως και αυτό με # ακολουθίας n «συσσωρευτικό ACK» ( cumulative ACK ) Ενδέχεται να λάβει διπλά ACKs (βλέπε δέκτη) χρονομετρητής για κάθε «εν πτήσει» πακέτο timeut(n)(λήξη χρόνου(n) ( ) ): αναμεταδίδει το πακέτο n και όλα τα πακέτα με υψηλότερο # ακολουθίας στο παράθυρο 3-47 GBN: Επεκτεταμένη FSM αποστολέα rdt_send(data) Λ base=1 nextseqnum=1 rdt_rcv(rcvpkt) && crrupt(rcvpkt) if (nextseqnum < base+n) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) Wait timeut start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) udt_send(sndpkt[nextseqnum-1]) rdt_rcv(rcvpkt) rcv(rcvpkt) && ntcrrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stp_timer else start_timer 3-48
GBN: Επεκτεταμένη FSM δέκτη default udt_send(sndpkt) Λ expectedseqnum=1 Wait sndpkt = make_pkt(expectedseqnum,ack,chksum) rdt_rcv(rcvpkt) rcv(rcvpkt) && ntcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ack,chksum) udt_send(sndpkt) expectedseqnum++ Μόνο ACK: πάντα στέλνει ACK για το πακέτο με το μέγιστο σε (ορθή) σειρά # ακολουθίας που έχει ληφθεί σωστά Ενδεχομένως δημιουργήσει διπλά ACKs Χρειάζεται να θυμάται μόνο το expectedseqnum Εκτός σειράς πακέτα: Απέρριψε (μην ενταμιεύεις) -> χωρίς ενταμίευση δέκτη! Επανα-επιβεβαίωσε το πακέτο με το μέγιστο σε σειρά # ακολουθίας 3-49 GBN «εν δράσει» 3-50
Επιλεκτική Επανάληψη (Selective Repeat) Ο δέκτης επιβεβαιώνει μεμονωμένα όλα τα σωστά ληφθέντα πακέτα Ενταμιεύει πακέτα,, αν χρειάζεται,, ώστε τελικά να παραδώσει τα πακέτα σε σωστή σειρά στο ανώτερο επίπεδο Ο αποστολέας ξαναστέλνει μόνο τα πακέτα για τα οποία δεν έχει ληφθεί θί ACK Χρονομετρητής στον αποστολέα για κάθε μη επιβεβαιωμένο πακέτο Παράθυρο αποστολέα N συνεχόμενοι # ακολουθίας Και πάλι περιορίζει τους # ακολουθίας των σταλμένων, μη επιβεβαιωμένων πακέτων 3-51 Επιλεκτική επανάληψη: παράθυρα αποστολέα και δέκτη 3-52
Επιλεκτική επανάληψη αάηψη αποστολέας δ εδομένα από πάνω: Αν είναι διαθέσιμος ο επόμενος #ακολουθίας στο παράθυρο, στείλε πακέτο timeut(n)(λήξη χρόνου (n)): Ξαναστείλε το πακέτο n, επανεκκίνησε το χρονομετρητή ACK(n) σε [sendbase,sendbase+n]: Σημείωσε το πακέτο n ως ληφθέν Αν το n είναι το μικρότερο μη επιβεβαιωμένο πακέτο, μετακίνησε τη βάση του παραθύρου στον επόμενο μη επιβεβαιωμένο # ακολουθίας δέκτης πακέτο n στο [rcvbase, rcvbase+n-1] στείλε ACK(n) Εκτός σειράς: ενταμίευσε Σε σειρά: παρέδωσε (επίσης παρέδωσε τα ενταμιευμένα, σε σειρά πακέτα), μετακίνησε το παράθυρο στο επόμενο πακέτο που δεν έχει ληφθεί ακόμα πακέτο n στο [rcvbase-n N,rcvbase-1] ACK(n) διαφορετικά: αγνόησε 3-53 Επιλεκτική επανάληψη «εν δράσει» 3-54
Επιλεκτική επανάληψη: δίλημμα Παράδειγμα: # ακολουθίας: 0, 1, 2, 3 Μέγεθος παραθύρου=3 3 Ο δέκτης δε βλέπει διαφορά στα δύο σενάρια! Λανθασμένα περνάει τα διπλά (duplicate) δεδομένα σαν νέα στο (a) Ε: Ποια η σχέση μεταξύ μεγέθους #ακολουθίας και μεγέθους παραθύρου? 3-55 Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-56
TCP: Επισκόπηση RFCs: 793, 1122, 1323, 2018, 2581 scket dr Από σημείο προς σημείο: Ένας αποστολέας, ένας δέκτης αξιόπιστη, σε σειρά ροή byte: Χωρίς όρια μηνυμάτων Με διοχέτευση: Ο έλεγχοι συμφόρησης και ροής τουtcp καθορίζουν το μέγεθος του παραθύρου Ενταμιευτές αποστολής και λήψης applicatin writes data TCP send buffer segment applicatin reads data TCP receive buffer scket dr Πλήρως αμφίδρομα δεδομένα: ικατευθυντική ροή δεδομένων στην ίδια σύνδεση MSS: maximum segment size (μέγιστο μέγεθος τμήματος) συνδεσμική: Η χειραψία (handshaking) (ανταλλαγή μηνυμάτων ελέγχου) ) αρχικοποιεί την κατάσταση του αποστολέα και του δέκτη πριν την ανταλλαγή δεδομένων Ροή υπό έλεγχο: Ο αποστολέας δεν θα υπερφορτώσει το δέκτη 3-57 ομή τμήματος TCP URG: επείγοντα δεδομένα (δε χρησιμοποιείται, γενικά) ) ACK: ACK # έγκυρο PSH: προώθησε τα δεδομένα τώρα (δε χρησιμοποιείται, γενικά) RST, SYN, FIN: Αποκατάσταση σύνδεσης (εντολές καθορισμού, τερματισμού) Άθροισμα ελέγχου (όπως στο UDP) 32 bits surce prt # dest prt # head len sequence number acknwledgement number nt used UAP R S F checksum Receive windw Urg data pnter Optins (variable length) applicatin data (variable length) Μετριέται σε bytes (όχι τμήματα!) # bytes που ο δέκτης είναι πρόθυμος να δεχτεί 3-58
TCP: αριθμοί ακολουθίας και ACKs Αριθμοί ακολουθίας (Seq. # s): #s): Αριθμός ροής bytes του πρώτου byte των δδ δεδομένων του τμήματος ACKs: seq # του επόμενου byte που αναμένεται από την άλλη πλευρά συσσωρευτικά ACK Ε: πως διαχειρίζεται ο δέκτης τα τμήματα εκτός σειράς; A: Η προδιαγραφή τουtcp δεν καθορίζει (εναπόκειται στην υλοποίηση) User types C hst ACKs receipt f eched C Hst A Hst B simple telnet scenari hst ACKs receipt f C, eches back C time 3-59 Χρόνος ιαδρομής Μετ επιστροφής (Rund Trip Time) και Λήξη Χρόνου (Timeut) του TPC Ε: Πώς καθορίζεται η τιμή του timeut (λήξη χρόνου) του TPC; Μεγαλύτερο από RTT αλλά το RTT μεταβάλλεται Πολύ σύντομο: πρώιμο timeut μη απαραίτητες αναμεταδόσεις αμ μεγάλης διάρκειας: αργή αντίδραση σε απώλεια τμήματος Ε: Πώς εκτιμάται το RTT? SampleRTT: χρόνος που μετριέται από τη μετάδοση του τμήματος ως την παραλαβή του ACK αγνοούνται οι αναμεταδόσεις Το SampleRTT θα μεταβάλλεται,, θέλουμε το εκτιμώμενο RTT πιο ομαλό μέσος όρος αρκετών πρόσφατων μετρήσεων, όχι μόνο του τρέχοντος SampleRTT 3-60
Χρόνος ιαδρομής Μετ επιστροφής (Rund Trip Time) και Λήξη Χρόνου (Timeut) του TPC EstimatedRTT = (1- α)*estimatedrtt + α*samplertt Εκθετική σταθμισμένη κινητή μέση τιμή (Expnential weighted mving average) η επίδραση των παλαιών δειγμάτων μειώνεται εκθετικά τυπική τιμή: α = 0.125 3-61 Παράδειγμα εκτίμησης του RTT: RTT: gaia.cs.umass.edu t fantasia.eurecm.fr 350 300 nds) RTT (millisec 250 200 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (secnnds) SampleRTT Estimated RTT 3-62
Χρόνος ιαδρομής Μετ επιστροφής (Rund Trip Time) και Λήξη Χρόνου (Timeut) του TPC Καθορισμός του timeut EstimatedRTT συν περιθώριο ασφαλείας μεγάλη μεταβολή στο EstimatedRTT -> μεγαλύτερο περιθώριο ασφαλείας πρώτα εκτιμάται πόσο αποκλίνει το SampleRTT από το EstimatedRTT: DevRTT = (1-β)*DevRTT + β* SampleRTT-EstimatedRTT (τυπικά, β = 0.25) Μετά καθορίζεται η τιμή του timeut: TimeutInterval = EstimatedRTT + 4*DevRTT 3-63 Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-64
Αξιόπιστη μεταφορά δεδομένων (αμδ) του TCP Το TCP δημιουργεί υπηρεσία Αναμεταδόσεις προκαλούνται αμδ πάνω από την από: αναξιόπιστη υπηρεσία του IP Συμβάντα λήξης χρόνου Τμήματα σε διοχέτευση (timeuts) Συσσωρευτικά acks διπλές επιβεβαιώσεις (duplicate ACKs) Το TCP χρησιμοποιεί ένα μόνο χρονομετρητή Αρχικά θεωρείται αναμεταδόσεων απλοποιημένος αποστολέας TCP: αγνοούνται διπλά ACKS αγνοείται έλεγχος ροής, έλεγχος συμφόρησης 3-65 Γεγονότα του αποστολέα TCP: λήψη δεδομένων από εφαρμογή: δημιουργία τμήματος με # ακολουθίας # ακολουθίας είναι ο αριθμός του ρεύματος από bytes του πρώτου byte δεδομένων στο τμήμα εκκίνηση χρονομετρητή αν δεν τρέχει ήδη (ο χρονομετρητής ομ είναι σαν το χρονομετρητή του πιο παλιού μη επιβεβαιωμένου τμήματος) διάστημα λήψης: TimeOutInterval Λήξη χρόνου (timeut): επαναμετάδοση του τμήματος που προκάλεσε το timeut επανεκκίνηση χρονομετρητή Λήψη ACK: Αν επιβεβαιώνει τμήματα που δεν έχουν ήδη επιβεβαιωθεί ανανέωση του τι είναι γνωστό ότι έχει επιβεβαιωθεί εκκίνηση χρονομετρητή αν εξακολουθούν να υπάρχουν τμήματα 3-66
NextSeqNum = InitialSeqNum SendBase = InitialSeqNum lp (frever) { switch(event) event: data received frm applicatin abve create TCP segment with sequence number NextSeqNum if (timer currently nt running) start timer pass segment t IP NextSeqNum = NextSeqNum + length(data) event: timer timeutt retransmit nt-yet-acknwledged segment with smallest sequence number start timer event: ACK received, with ACK field value f y if (y > SendBase) { SendBase = y if (there are currently nt-yet-acknwledged segments) start timer } Αποστολέας TCP (απλοποιημένος) Σχόλιο: SendBase-1: τελευταίο συσσωρευτικά επιβεβαιωμένο byte Παράδειγμα: SendBase-1 = 71; y= 73, ο δέκτης θέλει 73+ ; y > SendBase, τα νέα δεδομένα επιβεβαιώνονται } /* end f lp frever */ 3-67 Σενάρια αναμεταδόσεων TCP Hst A Hst B Hst A Hst B timeut SendBase = 100 time X lss Σενάριο χαμένου ACK Sendbase = 100 SendBase = 120 SendBase = 120 eut eq=92 time Se =92 timeu ut Seq time Πρώιμη λήξη χρόνου (premature timeut) 3-68
Σενάρια αναμεταδόσεων TCP (συν.) Hst A Hst B timeut X lss SendBase = 120 time Σενάριο συσσωρευτικού ACK 3-69 Παραγωγή TCP ACK [RFC 1122, RFC 2581] Συμβάν στο δέκτη Ενέργεια δέκτηtcp Άφιξη τμήματος σε σειρά με αναμενόμενο # ακολουθίας. Όλα τα δεδομένα μέχρι τον αναμενόμενο # ακολουθίας έχουν επιβεβαιωθεί Άφιξη τμήματος σε σειρά με αναμενόμενο # ακολουθίας. Ένα άλλο τμήμα με σωστή σειρά περιμένει για μετάδοση ACK Άφιξη τμήματος εκτός σειράς με μεγαλύτερο του αναμενόμενου # ακολουθίας. Ανίχνευση κενού Άφιξη τμήματος που μερικώς ή πλήρως συμπληρώνει κενό στα ληφθέντα δεδομένα Καθυστερημένο ACK. Αναμονή 500ms για το επόμενο τμήμα. Αν όχι επόμενο τμήμα στείλε ACK Άμεση αποστολή ολή ενός συσσωρευτικού σσ ACK που κάνει επιβεβαίωση και για τα δύο τμήματα που έφτασαν σε σειρά Άμεση αποστολή διπλού ACK που δηλώνει # ακολουθίας επόμενου αναμενόμενου byte Άμεση αποστολή ACK, αρκεί το τμήμα αυτό να αρχίζει στο κάτω άκρο του κενού 3-70
Ταχεία αναμετάδοση (Fast retransmit) Το διάστημα λήξης χρόνου Εάν ο αποστολέας λάβει 3 δίπλα είναι συχνά σχετικά μεγάλο: ACK για τα ίδια δεδομένα, υποθέτει ότι το τμήμα μετά τα μεγάλη καθυστέρηση πριν δεδομένα που έχουν ξανασταλεί το χαμένο επιβεβαιωθεί χάθηκε: πακέτο Ταχεία αναμετάδοση: Ανίχνευση χαμένων αναμετάδοση του τμήματος πριν τμημάτων με διπλά ACK. τη λήξη του χρονομετρητή Ο αποστολέας συχνά στέλνει πολλά τμήματα το ένα πίσω από το άλλο Αν ένα τμήμα χαθεί, θα υπάρξουν πιθανώς πολλά διπλά ACKs. 3-71 Hst A Hst B X timeut time Εικόνα 3.37 Αναμετάδοση ενός τμήματος μετά από τρία ίδια ACK (triple duplicate ACK) 3-72
Αλγόριθμος ταχείας αναμετάδοσης: event: ACK received, with ACK field value f y if (y > SendBase) { SendBase = y } else { if (there are currently nt-yet-acknwledged segments) start timer increment cunt f dup ACKs received fr y if (cunt f dup ACKs received fr y = 3) { resend segment with sequence number y } Ένα διπλό ACK για ένα ήδη Επιβεβαιωμένο τμήμα Ταχεία αναμετάδοση 3-73 Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-74
Έλεγχος ροής του TCP Η πλευρά του δέκτη της TPC σύνδεσης έχει έναν ενταμιευτή (buffer) λήψης: Έλεγχος ροής ο αποστολέας δεν υπερχειλίζει τον ενταμιευτή του δέκτη στέλνοντας πολλά σε μικρό διάστημα Η διεργασία της εφαρμογής ενδέχεται να είναι αργή στην ανάγνωση από τον ενταμιευτή υπηρεσία ταιριάσματος α ταχύτητας: ταίριασμα του ρυθμού αποστολής με το ρυθμό που η εφαρμογή αντλεί τα δεδομένα 3-75 Έλεγχος ροής του TCP: πως λειτουργεί (Υποθέστε ότι ο δέκτης του TPC απορρίπτει τα εκτός σειράς τμήματα) ελεύθερος χώρος στον ενταμιευτή = RcvWindw = RcvBuffer-[LastByteRcvd - LastByteRead] Ο δέκτης κοινοποιεί τον ελεύθερο χώρο στον ενταμιευτή περιλαμβάνοντας την τιμή του RcvWindw στα τμήματα Ο αποστολέας περιορίζει τα μη επιβεβαιωμένα δεδομένα σε RcvWindw εγγυάται ότι στο δέκτη ο ενταμιευτής δεν υπερχειλίζει 3-76
Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-77 ιαχείριση σύνδεσης TCP Θυμηθείτε: αποστολέας, δέκτης του TCP αποκαθιστούν «σύνδεση» πριν ανταλλάξουν τμήματα δεδομένων Αρχικοποίηση μεταβλητών TCP: αριθμοί ακολουθίας ενταμιευτές, πληροφορία ελέγχου ροής (π.χ. RcvWindw) ) Πελάτης(client): αυτός που εκκινά τη σύνδεση Scket clientscket = new Scket("hstname","prt number"); Εξυπηρέτης (server): έρχεται σε επαφή μαζί του ο πελάτης Scket cnnectinscket = welcmescket.accept(); Τριμερής Χειραψία (Three way handshake): Βήμα 1: Ο υπολογιστής πελάτης του TCP στέλνει τμήμα SYN στον εξυπηρέτη Καθορίζει αρχικό # ακολουθίας Χωρίς δεδομένα Βήμα 2: Ο υπολογιστής εξυπηρέτης ης λαμβάνει SYN, απαντά με τμήμα SYNACK Ο εξυπηρέτης δεσμεύει ενταμιευτές Καθορίζει αρχικό # ακολουθίας εξυπηρέτη Βήμα 3: Ο πελάτης λαμβάνει SYNACK, απαντά με τμήμα ACK που μπορεί να περιέχει δεδομένα 3-78
ιαχείριση σύνδεσης ύδ TCP (συν.) Κλείσιμο μιας σύνδεσης: client server Ο πελάτης κλείνει τη scket: clientscket.clse(); clse Βήμα 1: Το τερματικό σύστημα πελάτης στέλνει τμήμα ελέγχου του TCP FIN στον εξυπηρέτη Βήμα 2: Ο εξυπηρέτης λαμβάνει FIN, απαντά με ACK. Κλείνει τη σύνδεση, στέλνει FIN. time ed wait clsed clse 3-79 ιαχείριση σύνδεσης ύδ TCP (συν.) Βήμα 3: ο πελάτης λαμβάνει FIN, απαντά με ACK. Εισέρχεται σε πεπερασμένη αναμονή ( timed wait ) θα απαντήσει με ACK σε λαμβανόμενα FINs clsing client server clsing Βήμα 4: Ο εξυπηρέτης, λαμβάνει ACK. Κλειστή σύνδεση. Σημείωση: με μικρή τροποποίηση, μπορεί να διαχειριστεί ταυτόχρονα FINs. time ed wait clsed clsed 3-80
ιαχείριση σύνδεσης TCP (συν) TCP server lifecycle TCP client lifecycle 3-81 Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-82
Αρχές του Ελέγχου Συμφόρησης Συμφόρηση: ανεπίσημα: πολλές πηγές που στέλνουν πολλά δεδομένα πολύ γρήγορα για να τα χειριστεί το δίκτυο διαφορετικό από τον έλεγχο ροής! συμπτώματα: χαμένα πακέτα (υπερχείλιση ενταμιευτών στους δρομολογητές) ) μεγάλες καθυστερήσεις (αποθήκευση στους ενταμιευτές των δρομολογητών) σημαντικό πρόβλημα! 3-83 Αίτια/κόστη συμφόρησης: σενάριο 1 δύο αποστολείς, δύο δέκτες Ένας δρομολογητής, απεριόριστοι ενταμιευτές Χωρίς αναμεταδόσεις Hst B Hst A λ in : riginal data unlimited shared utput link buffers λ ut μεγάλες καθυστερήσεις όταν υπάρχει συμφόρηση μέγιστο επιτεύξιμο thrughput 3-84
Αίτια/κόστη συμφόρησης: σενάριο 2 ένας δρομολογητής, πεπερασμένοι ενταμιευτές ο αποστολέας αναμεταδίδει τα χαμένα πακέτα Hst A λ in : riginal data λ' in : riginal data, plus retransmitted data λ ut Hst B finite shared utput link buffers 3-85 Αίτια/κόστη συμφόρησης: σενάριο 2 πάντα: λ = λ (gdput) in ut τέλεια αναμετάδοση μόνο όταν υπάρχει απώλεια: λ > λ in ut αναμετάδοση καθυστερημένων (όχι χαμένων) πακέτων κάνει το λin μεγαλύτερο (από ότι στην τέλεια περίπτωση) για το ίδιο λ ut R/2 R/2 R/2 R/3 λ ut λ ut λ ut R/4 λ in R/2 λ in R/2 λ in R/2 a. b. c. κόστη της συμφόρησης: περισσότερη δουλειά (αναμεταδόσεις) για δεδομένο gdput αναμεταδόσεις που δεν είναι αναγκαίες: η ζεύξη μεταφέρει πολλαπλά αντίγραφα πακέτων 3-86
Αίτια/κόστη της συμφόρησης: σενάριο 3 Τέσσερεις αποστολείς ιαδρομές πολλαπλών τμημάτων Λήξη χρόνου/αναμετάδοση Ε: τι συμβαίνει καθώς το και το αυξάνουν? λ in λ in Hst A λ in : riginal data λ' in : riginal data, plus retransmitted data finite shared utput link buffers λ ut Hst B 3-87 Αίτια/κόστη της συμφόρησης: σενάριο 3 H s t A λ u t H s t B Ένα άλλο κόστος της συμφόρησης: όταν ένα πακέτο χάνεται, η upstream (αντιρευματική) χωρητικότητα που χρησιμοποιήθηκε για τη μετάδοσή του έχει σπαταληθεί! 3-88
Προσεγγίσεις στον έλεγχο συμφόρησης ύο ευρείες προσεγγίσεις στον έλεγχο συμφόρησης: Από άκρο σε άκρο έλεγχος συμφόρησης: Έλεγχος συμφόρησης επιβοηθούμενος από το Καμιά άμεση ανάδραση από το δίκτυο: δίκτυο οι δρομολογητές παρέχουν Η συμφόρηση συνάγεται από ανάδραση στα τερματικά τις απώλειες, καθυστερήσεις συστήματα που παρατηρούν τα τερματικά ένα bit που υποδεικνύει συστήματα συμφόρηση (SNA, DECbit, προσέγγιση που ακολουθεί το TCP/IP ECN, ATM) TCP Σαφής ρυθμός με τον οποίο ο αποστολέας θα πρέπει να στέλνει 3-89 Μελέτη περίπτωσης:έλεγχος συμφόρησης ATM ABR ABR: available bit rate RM (resurce management) cells (διαθέσιμος ρυθμός bit): (κελιά διαχείρισης πόρων): ελαστική υπηρεσιά Αν η διαδρομή του αποστολέα είναι υποφορτωμένη ( underladed ): Ο αποστολέας θα πρέπει να χρησιμοποιήσει το διαθέσιμο δαθέσμο εύρος ζώνης Αν η διαδρομή του αποστολέα είναι σε συμφόρηση: Ο αποστολέας ρυθμίζει το ρυθμό μετάδοσης στον ελάχιστο εγγυημένο ρυθμό Στέλνονται από τον αποστολέα, διεσπαρμένα σε κελιά δεδομένων Κάποια bits στο RM cell τίθενται από τους μεταγωγούς γ (επιβοηθούμενο από το δίκτυο) NI bit: όχι αύξηση στο ρυθμό (μέτρια α συμφόρηση) CI bit: ένδειξη συμφόρησης Τα RM cells επιστρέφονται στον αποστολέα από το δέκτη, με τα bits άθικτα 3-90
Μελέτη περίπτωσης:έλεγχος συμφόρησης ATM ABR πεδίο ER (explicit rate) δύο bytes στο κελί RM Μεταγωγός με συμφόρηση μπορεί να θέσει χαμηλότερη τιμή του ER στο κελί Έτσι ο ρυθμός αποστολής του αποστολέα ισούται με το μέγιστο υποστηριζόμενο ρυθμό στη διαδρομή EFCI bit στα κελιά δεδομένων: δ τίθεται 1 σε μεταγωγό με συμφόρηση Αν το κελί δεδομένων που προηγείται του κελιού RM έχει το EFCI ίσο με 1, ο αποστολέας θέτει 1 το CI bit στο κελί RM που στέλνει πίσω 3-91 Κεφάλαιο 3: περίγραμμα 31 3.1 Υπηρεσίες επιπέδου 35 3.5 Συνδεσμική μεταφορά: TCP 32 3.2 Πολύπλεξη λ και αποπολύπλεξη 33 3.3 Ασυνδεσμική μεταφορά: UDP 34 3.4 Αρχές της αξιόπιστης δεδομένων ομή τμήματος Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής ιαχείριση σύνδεσης 36 3.6 Αρχές ελέγχου συμφόρησης 37 3.7 Έλεγχος συμφόρησης του TCP 3-92
Έλεγχος συμφόρησης TCP: προσθετική αύξηση, πολλαπλασιαστική μείωση Προσέγγιση: αύξηση ρυθμού μετάδοσης (μέγεθος παραθύρου), ανίχνευση του χρησιμοποιήσιμου εύρους ζώνης, μέχρι να εμφανιστεί απώλεια προσθετική αύξηση (additive increase): αύξηση του CngWin κατά 1 MSS κάθε RTT μέχρι να εμφανιστεί απώλεια Πολλαπλασιαστική μείωση (multiplicative decrease): μείωση του CngWin στο μισό μετά από απώλεια cngestin windw Πριονωτή συμπεριφορά: ανιχνεύοντας το εύρος ζώνης cn ngestin windw siz ze 24 Kbytes 16 Kbytes 8 Kbytes time 3-93 Έλεγχος συμφόρησης TCP: λεπτομέρειες Ο αποστολέας περιορίζει τη μετάδοση: Πως παρατηρεί ο αποστολέας LastByteSent-LastByteAcked τη συμφόρηση? CngWin Γεγονός απώλειας = Λήξη Χοντρικά, χρόνου (timeut) ή 3 ίδια acks CngWin Ο αποστολέας TCP μειώνει rate = Bytes/sec RTT το ρυθμό (CngWin) μετά το γεγονός της απώλειας Το CngWin είναι δυναμικό, Τρεις μηχανισμοί: συνάρτηση της παρατηρούμενης AIMD συμφόρησης του δικτύου Αργή εκκίνηση Συντηρητισμός μετά από γεγονότα timeut 3-94
Αργή εκκίνηση του TCP Όταν ξεκινά η σύνδεση, ύδ Όταν ξεκινά η σύνδεση, ύδ CngWin = 1 MSS εκθετική αύξηση του Π.Χ.: : MSS = 500 bytes & ρυθμού μέχρι το πρώτο RTT = 200 msec γεγονός απώλειας Αρχικός ρυθμός = 20 kbps Το διαθέσιμο εύρος ζώνης ενδέχεται να είναι >> MSS/RTT Είναι επιθυμητή η γρήγορη επίτευξη ενός σεβαστού ρυθμού 3-95 Αργή εκκίνηση του TCP Όταν ξεκινά η σύνδεση, ύδ εκθετική αύξηση του ρυθμού μέχρι μχρτο πρώτο γεγονός απώλειας διπλασιασμός του CngWin κάθε RTT γίνεται με την αύξηση του CngWin με κάθε ACK που λαμβάνεται Σύνοψη: ο αρχικός ρυθμός είναι αργός αλλά αυξάνει εκθετικά γρήγορα RTT T Hst A Hst B time 3-96
Βελτίωση: συνάγοντας απώλειες Μετά από 3 ίδια ACK: Το CngWin μειώνεται στο μισό μετά το παράθυρο αυξάνεται γραμμικά Αλλά μετά από γεγονός timeut: Το CngWin τίθεται στο 1 MSS στη συνέχεια το παράθυρο αυξάνεται εκθετικά μέχρι μχρένα κατώφλι (Threshld), μετά αυξάνεται γραμμικά Φιλοσοφία: 3 ίδια ACK υποδεικνύουν δίκτυο ικανό να παραδώσει μερικά τμήματα timeut πριν από 3 ίδια ACK είναι «πιο ανησυχητικό» 3-97 Βελτίωση Ε: Πότε θα πρέπει να γίνει η αλλαγή από εκθετική σε γραμμική αύξηση; A: Όταν το CngWin γίνει το 1/2 της τιμής του πριν το timeut. Υλοποίηση: Μεταβλητό κατώφλι (Threshld) Σε γεγονός απώλειας, το Threshld τίθεται στο ½ του CngWin πριν το γεγονός της απώλειας 3-98
Σύνοψη: Έλεγχος Συμφόρησης του TCP Όταν το CngWin είναι κάτω από το Threshld, ο αποστολέας είναι στη φάση αργής εκκίνησης, το παράθυρο αυξάνεται εκθετικά. Όταν το CngWin είναι πάνω από το Threshld, ο αποστολέας είναι στη φάση αποφυγής συμφόρησης, το παράθυρο αυξάνεται γραμμικά. Όταν εμφανιστεί τριπλό ίδιο ACK, το Threshld τίθεται σε CngWin/2 και το CngWin τίθεται σε Threshld. Όταν εμφανιστεί timeut, το Threshld τίθεται σε CngWin/2 και το CngWin τίθεται σε 1 MSS. 3-99 Έλεγχος συμφόρησης του αποστολέα TCP Κατάσταση Συμβάν Ενέργεια αποστολέα TCP Σχόλια Αργή εκκίνηση Λήψη ACK για CngWin = CngWin + MSS, Έχει ως αποτέλεσμα α Slw Start (SS) δεδομένα που δεν έχουν επιβεβαιωθεί προηγουμένως If (CngWin > Threshld) θέσε κατάσταση σε Αποφυγή Συμφόρησης διπλασιασμό του CngWin σε κάθε RTT Αποφυγή συμφόρησης Cngestin Avidance (CA) SS ή CA Λήψη ACK για δεδομένα που δεν έχουν επιβεβαιωθεί προηγουμένως Ανίχνευση συμβάντος απώλειας από τρία ίδια ACK CngWin = CngWin+MSS * (MSS/CngWin) Threshld = CngWin/2, CngWin = Threshld, θέσε κατάσταση σε Αποφυγή Συμφόρησης Προσθετική αύξηση που έχει ως αποτέλεσμα αύξηση του CngWin κατά 1 MSS σε κάθε RTT Ταχεία επαναφορά, υλοποιώντας πολλαπλασιαστική μείωση. Το CngWin δεν θα πέσει κάτω από1 MSS τρία ίδια ACK Συμφόρησης πέσει κάτω από1 MSS. SS ή CA Λήξη χρόνου (Timeut) Threshld = CngWin/2, CngWin = 1 MSS, Θέσε κατάσταση σε Αργή εκκίνηση Είσοδος σε αργή εκκίνηση SS ή CA Ίδια (Duplicate) ACK Αύξηση του μετρητή ίδιων ACK για το τμήμα η λήψη του οποίου επιβεβαιώθηκε Τα CngWin και Threshld δεν αλλάζουν 3-100
TCP thrughput Ποιο είναι το μέσο thrughut h του TCP σα συνάρτηση του μεγέθους παραθύρου και του RTT? Αγνοώντας την αργή εκκίνηση Έστω W το μέγεθος παραθύρου ρ όταν εμφανίζεται απώλεια. Όταν το παράθυρο είναι W, το thrughput είναι W/RTT Αμέσως μετά την απώλεια, το παράθυρο πέφτει στο W/2, το thrughput στο W/2RTT. Μέσο thrughut:.75 W/RTT 3-101 Μέλλον του TCP: TCP πάνω από «μεγάλου μήκους, χοντρές σωληνώσεις» ( lng, fat pipes ) Παράδειγμα: τμήματα 1500 bytes, 100ms RTT, επιθυμητό thrughput 10 Gbps Απαιτούμενο μέγεθος παραθύρου W = 83,333333 «εν πτήσει» τμήματα Thrughput σα συνάρτηση του ρυθμού απωλειών: L = 2 10-10 Ww 1.22 MSS RTT Νέες εκδόσεις του TCP για υψηλές ταχύτητες L 3-102
ικαισύνη του TCP Στόχος της δικαιοσύνης: αν K συνδέσεις TCP μοιράζονται την ίδια μποτιλιαρισμένη ζεύξη (bttleneck link) εύρους ζώνης R, καθεμία θα έπρεπε να έχει μέσο ρυθμό R/K TCP cnnectin 1 TCP cnnectin 2 bttleneck ruter capacity R 3-103 Γιατί είναι το TCP δίκαιο? ύο ανταγωνιζόμενες συνδέσεις: Η προσθετική αύξηση δίνει κλίση 1, καθώς αυξάνει το thrughut Η πολλαπλασιαστική μείωση μειώνει αναλογικά το thrughput R ίσο μερίδιο εύρους ζώνης απώλεια: μείωση παραθύρου κατά παράγοντα 2 αποφυγή συμφόρησης: προσθετική αύξηση απώλεια: μείωση παραθύρου κατά παράγοντα 2 αποφυγή συμφόρησης: προσθετική αύξηση Τhrughputhp tσύνδεσης ύδ 1 R 3-104
ικαιοσύνη (συνέχεια) ικαιοσύνη και UDP Οι εφαρμογές πολυμέσων συχνά δε χρησιμοποιούν TCP εν θέλουν έλεγχο του ρυθμού από τον έλεγχο συμφόρησης Αντί αυτού, UDP: άντληση audi/vide με σταθερό ρυθμό, ανοχή σε απώλειες πακέτων Ερευνητική περιοχή: Φιλικό ως προς το TCP (TCP friendly) ικαιοσύνη και παράλληλες συνδέσεις TCP Τίποτα δεν εμποδίζει την εφαρμογή από το να ανοίξει 2 παράλληλες συνδέσεις μεταξύ δύο υπολογιστών. Οι Web brwsers το κάνουν Παράδειγμα: ζεύξη ρυθμού R που υποστηρίζει 9 συνδέσεις; Νέα εφαρμογή ζητά 1 σύνδεση TCP, παίρνει ρυθμό R/10 Νέα εφαρμογή ζητά 11 συνδέσεις TCP, παίρνει ρυθμό R/2! 3-105 Κεφάλαιο 3: Σύνοψη Αρχές πίσω από τις υπηρεσίες του επιπέδου : πολύπλεξη, αποπολύπλεξη Αξιόπιστη μεταφορά δεδομένων Έλεγχος ροής Έλεγχος συμφόρησης Πραγμάτωση και υλοποίηση στο ιαδίκτυο UDP TCP Στη συνέχεια: Αφήνοντας το άκρο του δικτύου (επίπεδα ί δ εφαρμογής, ) Στον πυρήνα ρ του δικτύου 3-106