Δίκτυα Επικοινωνιών Δίκτυα Υπολογιστών Στρώμα Μεταφοράς (2) Διδάσκοντες: Δρ. Ευγενία Αδαμοπούλου, Δρ. Κώστας Δεμέστιχας ΔΠΜΣ «Τεχνο- Οικονομικά Συστήματα» Τεχνολογία Πληροφορίας και Τηλεπικοινωνιών
TCP - Αξιόπιστη μετάδοση 2 Ρύθμιση της τιμής του Timeout q Αρχική τιμή του RTO: q Ο πομπός θέτει την αρχική τιμή του RTO: RTO 0 = 3 sec Υπολογισμός του RTO μετά την πρώτη μέτρηση του RTT: srtt 1 = SampleRTT rttvar 1 = SampleRTT / 2 RTO 1 = srtt 1 + 4 rttvar 1
TCP - Αξιόπιστη μετάδοση 3 Ρύθμιση της τιμής του Timeout Αν ληφθεί ACK για τεµάχιο που επαναµεταδόθηκε, ο ποµπός δεν µπορεί να ξέρει αν η ACK ανήκει στο αρχικό ή στο τεµάχιο που επαναµεταδόθηκε. RTT? RTT? Timeout! segment retransmission of segment ACK q Αλγόριθμος του Karn: q Μην ενημερώνεις την RTT για τεμάχια που επαναμεταδόθηκαν. q Ξαναξεκίνα τις μετρήσεις RTT μόνο μετά τη λήψη ACK που αφορά κανονικό τεμάχιο. q Όταν εμφανιστεί ένα timeout, η τιμή του RTO διπλασιάζεται (εκθετική οπισθοχώρηση) q RTO n+1 = min ( 2 RTO n, 64) seconds.
TCP Διαχείριση συνδέσεων 4 Εγκατάσταση σύνδεσης Απόλυση σύνδεσης Ειδικά σενάρια Διαγράμματα καταστάσεων
TCP Εγκατάσταση σύνδεσης 5 Πριν ανταλλάξουν δεδομένα, ο πομπός και ο δέκτης πραγματοποιούν τριμερή χειραψία. q q Συμφωνούν για την εγκατάσταση της σύνδεσης (καθένας γνωρίζει ότι ο άλλος επιθυμεί την εγκατάσταση σύνδεσης). Συμφωνούν για τις παραμέτρους σύνδεσης. application connection state: ESTAB connection variables: seq # client-to-server server-to-client rcvbuffer size at server,client network application connection state: ESTAB connection Variables: seq # client-to-server server-to-client rcvbuffer size at server,client network
TCP Εγκατάσταση συνδέσεων 6 Τριμερής χειραψία Κατάσταση client LISTEN επιλογή αύξ. αριθμ. x αποστολή μηνύματος TCP SYN SYNSENT ESTAB αποστολή ACK για SYNACK; αυτό το τεμάχιο μπορεί να έχει και δεδομένα προς τον server SYNbit=1, Seq=x SYNbit=1, Seq=y ACKbit=1; ACKnum=x+1 ACKbit=1, ACKnum=y+1 επιλογή αύξ. αριθμ. y αποστολή μηνύματος TCP SYNACK Κατάσταση server LISTEN SYN RCVD λήψη ACK(y) ESTAB
TCP Απόλυση σύνδεσης 7 q Κάθε άκρο της ροής δεδομένων πρέπει να τερματίσει ανεξάρτητα ( half-close ): q αποστολή τεμαχίου TCP με το FIN bit = 1. q Απάντηση στο λαμβανόμενο FIN με ACK. q μετά τη λήψη FIN, το αποστελλόμενο ACK μπορεί να συνδυάζεται με αποστολή FIN. q Οι ταυτόχρονες ανταλλαγές FIN πρέπει να αντιμετωπίζονται
TCP Απόλυση σύνδεσης 8 Κατάσταση client ESTAB clientsocket.close() Κατάσταση server ESTAB FIN_WAIT_1 FIN_WAIT_2 δεν μπορεί να στείλει άλλα data, αλλά μπορεί να λάβει wait for server close FINbit=1, seq=x ACKbit=1; ACKnum=x+1 μπορεί ακόμη να στείλει data CLOSE_WAIT TIMED_WAIT FINbit=1, seq=y δεν μπορεί πλέον να στείλει data LAST_ACK timed wait 2*max segment lifetime ACKbit=1; ACKnum=y+1 CLOSED CLOSED
TCP Παράδειγμα εγκατάστασης 9 σύνδεσης Εγκατάστασης σύνδεσης: Βήμα 1 Seq:i SYN Win 34278 80 A SYN_SENT B LISTEN
TCP Παράδειγμα εγκατάστασης 10 σύνδεσης Εγκατάστασης σύνδεσης: Βήμα 2 34278 80 A SYN_SENT Seq:j ACK:i+1 SYN,ACK Win B SYN_RCVD
TCP Παράδειγμα εγκατάστασης 11 σύνδεσης Εγκατάστασης σύνδεσης: Βήμα 3 Seq:i+1 ACK:j+1 ACK Win 34278 80 A B ESTABLISHED SYN_RCVD
TCP Παράδειγμα εγκατάστασης 12 σύνδεσης Και οι δύο στην κατάσταση ESTABLISHED, ανταλλαγή δεδομένων... 34278 80 A B ESTABLISHED ESTABLISHED
TCP - Απόλυση σύνδεσης 13 Απόλυση σύνδεσης: Βήμα 1 Seq:t ACK:q FIN Win 34278 80 A B FIN_WAIT_1 ESTABLISHED
TCP - Απόλυση σύνδεσης 14 Απόλυση σύνδεσης: Βήμα 2 34278 80 A FIN_WAIT_1 Seq:q ACK:t+1 ACK Win B CLOSE_WAIT
TCP - Απόλυση σύνδεσης 15 Η εφαρμογή στον Β πρέπει να κλείσει 34278 80 A B FIN_WAIT_2 CLOSE_WAIT
TCP - Απόλυση σύνδεσης 16 Απόλυση σύνδεσης: Βήμα 3 34278 80 A FIN_WAIT_2 Seq:p ACK:t+1 FIN Win B LAST_ACK
TCP - Απόλυση σύνδεσης 17 Απόλυση σύνδεσης: Βήμα 4 Seq:t+1 ACK:p+1 ACK Win 34278 80 A B TIME_WAIT LAST_ACK
TCP - Απόλυση σύνδεσης 18 Ο Client περιμένει 2*MSL πριν μεταβεί στην κατάσταση CLOSED (ο B μπορεί να ξαναστείλει ένα FIN) 34278 80 A TIME_WAIT B CLOSED
TCP Διαχείριση συνδέσεων 19 Κατάσταση αναμονής 2MSL = TIME_WAIT Όταν το TCP κάνει active close, και στέλνει την τελική ACK, η σύνδεση πρέπει να παραμείνει στην κατάσταση TIME_WAIT για διπλάσιο χρόνο από τη μέγιστη ζωή τεμαχίων (maximum segment lifetime, MSL) 2MSL= 2 * Maximum Segment LifeXme Γιατί; Δίνεται στον TCP client μια ευκαιρία επαναποστολής της τελικής ACK. (Ο server θα κάνει timeout αφού στείλει το τεμάχιο FIN και θα ξαναστείλει το FIN) Το MSL τίθεται στα 2 min ή 1 min ή 30 sec
TCP Διαχείριση συνδέσεων 20 TIME_WAIT active close passive close application close( ) FIN, j CLOSE_WAIT FIN_WAIT1 FIN_WAIT2 2MSL TIME_WAIT ACK, j+1 FIN, k FIN, k ACK, k+1 EOF to application LAST_ACK timeout αναµένοντας ACK
TCP Επαναφορά συνδέσεων 21 Η επαναφορά (reset) συνδέσεων γίνεται με την ενεργοποίηση της σημαίας RST Πότε ενεργοποιείται η σημαία RST; Όταν φθάνει η αίτηση σύνδεσης και δεν αναμένει καμία διαδικασία server στο σημείο προορισμού. Όταν αποσταλεί τεμάχιο που δεν αναμένεται καθόλου σε υπάρχουσα σύνδεση, π.χ. ο αύξων αριθμός είναι εκτός περιοχής. Η επαναφορά μιας σύνδεσης αναγκάζει τον δέκτη του RST να πετάξει τα αποθηκευμένα δεδομένα. Ο δέκτης δεν επαληθεύει το τεμάχιο RST.
TCP Μεταφορά δεδομένων 22 Η µεταφορά δεδοµένων µέσω TCP µπορεί να χαρακτηριστεί ως: αλληλοδραστική µεταφορά - telnet, rlogin µαζική µεταφορά - ftp, mail, http Το TCP έχει ευριστικές µεθόδους για να χειρίζεται αυτούς τους τύπους µεταφοράς δεδοµένων. Για αλληλοδραστική µεταφορά δεδοµένων: Ø Επιχειρεί να περιορίσει τον αριθµό των πακέτων Για µαζική µεταφορά δεδοµένων: Ø Επιχειρεί να ελέγξει τη ροή δεδοµένων
TCP Μεταφορά δεδομένων 23 Αλληλοδραστικές εφαρμογές Telnet q Οι εφαρµογές αποµακρυσµένου τερµατικού (π.χ., Telnet) στέλνουν χαρακτήρες σε έναν server. Ο server επεξεργάζεται τον χαρακτήρα και στέλνει την έξοδό του στον client. Για κάθε πληκτρολογούµενο χαρακτήρα, βλέπουµε 3 πακέτα: 1. Client à Server: Αποστολή πληκτρολογούµενου χαρακτήρα 2. Server à Client: Επαλήθευση του πρώτου πακέτου και ηχώ του χαρακτήρα 3. Client à Server: Επαλήθευση του δεύτερου πακέτου 3. αποστολή ηχούς του χαρακτήρα και/ή της εξόδου 1. Αποστολή χαρακτήρα 2. επεξήγηση χαρακτήρα Telnet client Telnet server
TCP Μεταφορά δεδομένων 24 Αλληλοδραστικές εφαρμογές Telnet q Θα αναμέναμε 4 πακέτα ανά χαρακτήρα: character ACK of character echo of character ACK of echoed character q Ωστόσο, εμφανίζεται η παραπλεύρως απεικονιζόμενη μορφή: character ACK and echo of character q Το TCP έχει καθυστερήσει την αποστολή μιας ACK ACK of echoed character
TCP Μεταφορά δεδομένων 25 Σύνοδος Telnet σε απομακρυσμένο host Παρατήρηση: Η μετάδοση των τεμαχίων ακολουθεί διαφορετικό τρόπο, δηλ., υπάρχουν μόνο δύο πακέτα ανά πληκτρολογούμενο χαρακτήρα. char1 ACK of char 1 + echo of char1 ACK + char2 ACK + echo of char2 Η καθυστερημένη επαλήθευση δεν εμφανίζεται. Ο λόγος είναι ότι υπάρχουν πάντα δεδομένα έτοιμα προς αποστολή, όταν φθάνει η ACK
TCP Μεταφορά δεδομένων 26 Αλγόριθμος του Nagle Έχει ως στόχο την αποφυγή της μη αποτελεσματικής χρήσης του εύρους ζώνης Πομπός: Δέκτης: αποθηκεύει προσωρινά όλα τα δεδομένα χρήστη, αν εκκρεμούν ανεπαλήθευτα δεδομένα, στέλνει, όταν όλα έχουν επαληθευτεί ή έχει δεδομένα που συμπληρώνουν ένα τεμάχιο MSS. δίνει εντολή αποστολής, μόνο όταν μπορεί να αυξήσει επαρκώς το παράθυρο λήψης
TCP Μεταφορά δεδομένων 27 Αλγόριθμος του Nagle Μόνο ένα τεμάχιο ενός byte μπορεί να μεταδίδεται (Επειδή δεν υπάρχουν δεδομένα προς αποστολή από τον Β προς Α έχουμε καθυστερημένες ACK) Πληκτρολογούµενοι χαρακτήρες A SeqNo=0, 1 byte SeqNo=1, 4 byte SeqNo=5, 5 byte ACK 1 ACK 5 ACK 10 B καθυστερημένη ACK καθυστερημένη ACK καθυστερημένη ACK
TCP Μεταφορά δεδομένων 28 Ιδιότητες του αλγορίθμου του Nagle Εφαρμόζεται μόνο σε μικρά πακέτα. Στις μεταφορές μεγάλων αρχείων υπάρχουν πάντα πλήρη MSS για αποστολή. Ο αλγόριθμος είναι αυτοχρονιζόμενος: Βασικά εφαρμόζει Stop & Wait για μικρά τεμάχια. Σε LAN, το μικρό RTT δεν εισάγει μεγάλη αναμονή, οπότε ο αλγόριθμος δεν είναι αποτελεσματικός. Σε WAN, το μεγάλο RTT εισάγει περισσότερη αναμονή, αλλά ο αλγόριθμος είναι πιο αποτελεσματικός σε μακριές ζεύξεις. Όταν απαιτείται μικρή καθυστέρηση, ο αλγόριθμος προκαλεί ανεπιθύμητες καθυστερήσεις. Οι εφαρμογές μπορεί να απενεργοποιήσουν τον αλγόριθμο
TCP Έλεγχος ροής 29 Η πλευρά λήψης της σύνδεσης TCP έχει έναν καταχωρητή λήψης: Παράθυρο δέκτη Δεδοµένα από στρώµα ΙΡ Ελεύθερος χώρος Δεδομένα TCP Διαδικασία εφαρµογής Καταχωρητής λήψης Η διαδικασία εφαρμογής μπορεί να αργεί να διαβάσει από τον καταχωρητή λήψης Έλεγχος ροής: ο πομπός δεν πρέπει να υπερχειλίσει τον καταχωρητή του δέκτη μεταδίδοντας πολλά, πολύ γρήγορα. Προσαρμογή του ρυθμού αποστολής δεδομένων στον ρυθμό ανάγνωσης της λαμβάνουσας εφαρμογής
TCP Έλεγχος ροής 30 Το TCP χρησιμοποιεί έλεγχο ροής με ολισθαίνον παράθυρο: Ø δεν χρησιμοποιεί NACK Ø μόνο συσσωρευτικές ACK Ø Οι επαληθεύσεις δεν προκαλούν αυτόματα αλλαγές στο μέγεθος παραθύρου του πομπού. Ø Ο δέκτης επιστρέφει δύο παραμέτρους στον πομπό. AckNo window size (win) 32 bits 16 bits Ø Ο πομπός μπορεί να στείλει δεδομένα μέχρι το διαφημιζόμενο παράθυρο, δηλαδή, τα byte: AckNo, AckNo+1,, AckNo + win - 1 Ø Ο δέκτης μπορεί να επαληθεύσει χωρίς να αλλάξει το παράθυρο. Ø Ο δέκτης μπορεί να αλλάξει το παράθυρο χωρίς να επαληθεύσει.
TCP- Έλεγχος ροής 31 Ολισθαίνον παράθυρο Το πρωτόκολλο ολισθαίνοντος παραθύρου λειτουργεί σε επίπεδο byte: Αναγγελλόµενο παράθυρο 1 2 3 4 5 6 7 8 9 10 11 Σταλθέντα και επαληθευθέντα Σταλθέντα, µη επαληθευθέντα επιτρέπεται να σταλθούν χρήσιµο παράθυρο απαγορεύεται να σταλθούν Ο πομπός μπορεί να στείλει μόνο τους αύξοντες αριθμούς 6,7,8
TCP- Έλεγχος ροής 32 Ολισθαίνον παράθυρο: κλείσιμο Αποστολή ενός byte (με SeqNo = 6) και λήψη της επαλήθευσης (AckNo = 5, Win=4): 1 2 3 4 5 6 7 8 9 10 11 Μετάδοση του Byte 6 1 2 3 4 5 6 7 8 9 10 11 AckNo = 5, Win = 4 1 2 3 4 5 6 7 8 9 10 11
TCP- Έλεγχος ροής 33 Ολισθαίνον παράθυρο: άνοιγμα Λήψη επαλήθευσης που μεγαλώνει το παράθυρο προς τα δεξιά (AckNo = 5, Win=6): 1 2 3 4 5 6 7 8 9 10 11 AckNo = 5, Win = 6 1 2 3 4 5 6 7 8 9 10 11 Ο δέκτης ανοίγει το παράθυρο όταν ο καταχωρητής TCP αδειάζει (εννοώντας ότι τα δεδομένα παραδίδονται στην εφαρμογή)
TCP- Έλεγχος ροής 34 Ολισθαίνον παράθυρο: συρρίκνωση Λήψη επαλήθευσης που περιορίζει το παράθυρο από δεξιά (AckNo = 5, Win=3) 1 2 3 4 5 6 7 8 9 10 11 AckNo = 5, Win = 3 1 2 3 4 5 6 7 8 9 10 11 Η συρρίκνωση παραθύρου δεν πρέπει να χρησιμοποιείται
TCP- Έλεγχος ροής 35 Ολισθαίνον παράθυρο: παράδειγμα Ποµπός 2K 2K SEQ=0 Δέκτης Buffer 0 4K ACK=2048, WIN=2048 2K 2K SEQ=2048 µπλοκάρει ACK=4096, WIN=0 ACK=4096, WIN=2048 2K 1K 1K SEQ=4096
Άσκηση 36 Οι host A και B επικοινωνούν μέσω σύνδεσης TCP και ο B έχει ήδη λάβει από τον A όλα τα byte μέχρι το 144. Υποθέστε ότι ο A στέλνει στη συνέχεια δύο τεμάχια το ένα πίσω από το άλλο που περιέχουν 20 και 40 byte δεδομένων, αντίστοιχα. Στο πρώτο τεμάχιο η θύρα πηγής είναι 303 και η θύρα προορισμού είναι 80. Ο B στέλνει επαλήθευση όποτε λαμβάνει τεμάχιο από τον Α. 1. Στο δεύτερο τεμάχιο που εστάλη από τον Α στον Β, ποιος είναι ο αύξων αριθμός, η θύρα πηγής και η θύρα προορισμού; 2. Αν το πρώτο τεμάχιο αφιχθεί πριν από το δεύτερο, ποιος θα είναι ο αριθμός επαλήθευσης, η θύρα πηγής και η θύρα προορισμού στην επαλήθευση του πρώτου τεμαχίου; 3. Αν το δεύτερο τεμάχιο αφιχθεί πριν από το πρώτο, ποιος θα είναι ο αριθμός επαλήθευσης στην επαλήθευση του πρώτου αφικνούμενου τεμαχίου; 4. Υποθέστε ότι τα δύο τεμάχια του Α φθάνουν με τη σειρά στον Β. Η επαλήθευση για το πρώτο τεμάχιο χάνεται και η επαλήθευση για το δεύτερο τεμάχιο καταφθάνει μετά την εκπνοή χρονομέτρου του πρώτου τεμαχίου. Σχεδιάστε ένα διάγραμμα με όλα τα τεμάχια και τις επαληθεύσεις που στάλθηκαν. Για κάθε τεμάχιο δώστε τον αύξοντα αριθμό και τον αριθμό byte δεδομένων, ενώ για κάθε επαλήθευση δώστε τον αριθμό επαλήθευσης.