ΤΟ ΠΡΩΤΟΚΟΛΛΟ TCP
Η Εξέλιξη του TCP
Γενική Περιγραφή Είναι πρωτόκολλο connection-oriented (σύνδεσης) Παρέχει μια αξιόπιστη unicast point-to-point δέσμη bytes από το ένα άκρο στο άλλο πάνω από ένα μη αξιόπιστο δίκτυο Byte Stream Byte Stream TCP TCP Connection-Oriented: Πριν ενα process μιας εφαρμογής αρχίσει να στέλνει δεδομένα σε κάποια άλλη που βρίσκεται σε κα΄ποιον άλλο host, οι δύο εφαρμογές πρέπει να εγκαταστήσουν κάποια σύνδεση αρχικοποιώντας τις παραμέτρους της σύνδεσης IP Internetwork
Connection-Oriented (Δημιουργία Σύνδεσης) Πριν την ανταλλαγή δεδομένων το πρωτόκολλο, TCP εγκαθιστά μια σύνδεση : Η μια TCP οντότητα αναμένει για τη σύνδεση (“server”) Η άλλη TCP οντότητα (“client”) επικοινωνεί με το server Κάθε σύνδεση είναι full duplex Full Duplex: Εάν υπάρχει μια TCP σύνδεση μεταξύ της διεργασίας Α στο host A και της διεργασίας Β σε άλλο host, υπάρχει ταυτόχρονη ροή δεδομένων από το σημείο Β στο σημείο Α.
Υπηρεσία Byte Stream Για τα χαμηλότερα επίπεδα, το TCP χειρίζεται τα δεδομένα σε blocks τα οποία ονομάζονται segments Για τα υψηλότερα επίπεδα,το TCP χειρίζεται τα δεδομένα σαν μια ακολουθία από bytes και δεν προσδιορίζει ‘σύνορα΄μεταξύ των bytes Tα υψηλότερα επίπεδα δεν γνωρίζουν για την αρχή και το τέλος των segments Επίπεδο Εφαρμογής Επίπεδο Εφαρμογής 1. read 40 bytes 1. write 100 bytes 2. read 40 bytes 2. write 20 bytes 3. read 40 bytes queue of queue of TCP bytes to be bytes that Segments TCP transmitted have been received
To Format του Πρωτοκόλλου TCP
Χαρακτηριστικά TCP Επικεφαλίδας Slide 7
Μήκος Επικεφαλίδας To μήκος του πεδίου length είναι 32-bit words Είναι σημαντικό να αναφερθεί οτι το TCP header έχει μεταβλητό μήκος (με ελάχιστο μήκος 20 bytes)
Port Number Το port number προσδιορίζει το τελικό σημείο μιας σύνδεσης Το ζευγάρι <IP address, port number> καθορίζει ένα συγκεκριμένο τελικό σημείο μιας σύνδεσης Δύο ζεύγη <client IP address, client port number> και <server IP address, server port number> προσδιορίζουν μια TCP σύνδεση. TCP IP Εφαρμογή 23 104 80 Ports: 7 16 Παράδειγμα TCP Εφαρμογών Telnet Email Ftp Internet
Sequence Number Έχει μήκος 32 bits Η κλίμακα της SeqNo είναι 0 <= SeqNo <= 232 -1 4.3 Gbyte Το SeqNo προσδιορίζει το πρώτο byte μέσα στο stream H αρχική τιμή του Sequence Number (Initial Sequence Number) καθορίζεται κατά την εγκατάσταση της σύνδεσης Παράδειγμα Μια διεργασία στον host A θέλει να στείλει ένα stream δεδομένων στον host Β δια μέσου μιας TCP σύνδεσης. Πρώτο segment 1000 bytes: Sequence Number= 0 Δεύτερο segment 1000 bytes: Sequence Number=1000 Τρίτο segment 2000 bytes: Sequence Number =2000 Τέταρτο segment 2000 bytes: Sequence Number =4000
Acknowledgment Number (1) Tα acknowledgements στέλνονται σαν piggybacked και είναι συσσωρευτικά (cumulative), Π.χ. ένα segment από το σημείο A στο B μπορεί να περιλαμβάνει ένα acknowledgement για δεδομένα που στάλθηκαν από το σημείο Β στο Α Ένας host ενεργοποιεί τη σημαία “ACK flag” για να στείλει ένα acknowledgement Το AckNo περιλαμβάνει το επόμενο SeqNo που ο host περιμένει να λάβει Παράδειγμα: Το acknowledgement για το segment με Sequence Numbers 0-1500 is AckNo=1501 Παράδειγμα Host Α=>Host Β: 0-535 bytes Host A=>Host B: 900-1000 bytes Host B δεν έχει λάβει τα bytes 536-899 To επόμενο ACK segment από το Host B-Host A: ACK 536
Acknowledgment Number (2) To TCP χρησιμοποιεί το μηχανισμό sliding window (επόμενα slides) για να ελέγξει την ροή της κίνησης από το αποστολέα στον παραλήπτη To TCP χρησιμοποιεί μια παραλλαγή της ολίσθησης παραθύρου Χωρίς χρήση NACKs (Negative ACKnowledgement) Αθροιστικά ACKs Παράδειγμα: Ας υποθέσουμε οτι ο αποστολέας στέλνει 2 segments “1..1500” και “1501..3000”, αλλά ο παραλήπτης λαμβάνει μόνο το δεύτερο segment. Σε αυτή τη περίπτωση, ο παραλήπτη δεν μπορεί να κάνει acknowledge το δεύτερο πακέτο. Μπορεί να στείλει AckNo=1
Μέγεθος Παραθύρου Κάθε πλευρά της σύνδεσης πρέπει να αποστείλει /’διαφημίσει’ το μέγεθος του παραθύρου Το μέγεθος παραθύρου είναι ο μέγιστος αριθμός bytes που ο παραλήπτης μπορεί να αποδεχθεί Το μέγιστο μέγεθος παραθύρου ισούται με 216-1= 65535 bytes
TCP Checksum To TCP checksum καλύπτει τόσο το TCP header όσο και το TCP data
TCP Εφαρμογές
Διαδραστική και Ογκώδη Μεταφορά Δεδομένων Οι εφαρμογές TCP μπορούν να ταξινομηθούν στις παρακάτω κατηγορίες Ογκώδης μεταφορά δεδομένων (bulk data transfer)- ftp, mail Διαδραστική μεταφορά δεδομένων (interactive data transfer) - telnet, rlogin Το πρωτόκολλο TCP έχει τους μηχανισμούς για να χειρισθεί τις εφαρμογές αυτές Για διαδραστική μεταφορά δεδομένων: Μείωση του συνολικού αριθμού των πακέτων Για ογκώδη μεταφορά δεδομένων : Μείωση του συνολικού χρόνου μεταφοράς
Διαδραστική Εφαρμογή: Telnet 1. send character 2. interpret character 3. send echo of character and/or output Host with Telnet client Telnet server Απομακρυσμένες εφαρμογές τερματικών στέλνουν χαρακτήρες σε ένα server. O server μεταφράζει τους χαρακτήρες που λαμβάνει και στέλνει μια απάντηση στο τερματικό. Για κάθε χαρακτήρα, χρησιμοποιούνται τρία πακέτα: Client Server: Αποστολή χαρακτήρα Server Client: Echo του χαρακτήρα (or user output) και acknowledgement για το πρώτο πακέτο Client Server: Το Acknowledgement για το δεύτερο πακέτο
Παράδειγμα Χρησιμοποιώντας το tcpdump λαμβάνουμε την ακολουθία Θα περιμέναμε να λάβουμε την ακολουθία Τι έχει συμβεί? Καθυστέρηση της μετάδοσης ενός ACK
Καθυστερημένα Acknowledgments To TCP μπορεί να καθυστερήσει τη μετάδοση των ACKs μέχρι 200ms Στην περίπτωση που υπάρχουν δεδομένα προς μετάδοση μέσα στο χρονικό αυτό περιορισμό, τα ACKs μπορεί να γίνουν piggybacked σε ένα data segment. Καθυστερημένα ACKs εξηγούν γιατί τα ACK καθώς επίσης και το ‘echo’ των χαρακτήρων αποστέλλονται στο ίδιο segment.
Παράδειγμα: Telnet Session σε Απομακρυσμένο Host pithon.cs.eap.gr dias.icsd.aegean.gr This is the output of typing 7 characters : Time 16.401963:Pithon Dias: Push, SeqNo 1:2(1), AckNo 2 Time 16.481929:Dias Pithon: Push, SeqNo 2:3(1), AckNo 2 Time 16.482154:Pithon Dias: Push, SeqNo 2:3(1), AckNo 3 Time 16.559447:Dias Pithon: Push, SeqNo 3:4(1), AckNo 3 Time 16.559684:Pithon Dias: Push, SeqNo 3:4(1), AckNo 4 Time 16.640508: Dias Pithon: Push, SeqNo 4:5(1), AckNo 4 Time 16.640761:Pithon Dias: Push, SeqNo 4:8(4), AckNo 5 Time 16.728402: Dias Pithon: Push, SeqNo 5:9(4), AckNo 8
Παρατηρήσεις (1) Η μετάδοση των segments ακολουθεί μια διαφορετική μορφή, π.χ., υπάρχουν μόλις 2 πακέτα ανα χαρακτήρα Τα καθυστερημένα acknowledgment δεν φαίνονται Ο λόγος είναι οτι υπάρχουν δεδομένα στο Pithon έτοιμα προς μετάδοση όταν το ACK φθάνει.
Παρατηρήσεις (2) Παρατήρηση: Ο Pithon δεν έχει ποτέ πολλαπλά segments που είναι σε εκκρεμότητα (unacknowledged) Υπάρχουν λιγότερες μεταδόσεις από τους χαρακτήρες. Αυτό συμβαίνει λόγω της χρήσης του Nagle’s Αλγόριθμου: Αντιμετώπιση του “small packet problem” Κάθε TCP σύνδεση μπορεί να έχει MONO ένα μικρό segment (1-byte) segment σε εκκρεμότητα για το οποίο δεν έχει αποσταλεί το acknowledgement Υλοποίηση: Αποστολή ενός byte και αποθήκευση σε buffer όλων των ακόλουθων bytes μέχρι τη λήψη του acknowledgement. Στη συνέχεια αποστέλλονται όλα τα bytes του buffer σε ένα απλό segment. Ο αλγόριθμος του Nagle’s ελαχιστοποιεί τον αριθμό segments μικρού μεγέθους. Ο αλγόριθμος αυτός μπορεί να απενεργοποιηθεί.
What is Flow/Congestion/Error Control ? Flow Control: Algorithms to prevent that the sender overruns the receiver with information? Congestion Control: Algorithms to prevent that the sender overloads the network Error Control: Algorithms to recover or conceal the effects from packet losses The goal of each of the control mechanisms are different. But the implementation is combined
TCP Flow Control
Μηχανισμός TCP Flow Control (1) Πρόβλημα: Ένας γρήγορος Αποστολέας μπορεί να υπερχειλίσει τον Παραλήπτη Απώλειες Πακέτων: Μη απαραίτητες αναμεταδόσεις Πιθανές Λύσεις: Ο Αποστολέας μεταδίδει σε ρυθμό που έχει γίνει μια ‘διαπραγμάτευση’ Ο Αποστολέας περιορίζεται σε ένα παράθυρο από τα πακέτα που δεν έχει γίνει acknowledged To TCP υλοποιεί μηχανισμό sliding window flow control Το Flow control διαφέρει από το congestion control
Μηχανισμός TCP Flow Control (2) window Αποστολέας Sent but not acked Not yet sent Sequence numbers Next to be sent Μεταβλητές Last Byte Sent και Last Byte Acked Last Byte Sent-Last Byte Acked ≤ RecvWindow
Παράδειγμα Μηχανισμού Sliding Window (1) Ο Αποστολέας μπορεί να στείλει τα Sequence Numbers 6, 7, 8
Διαχείριση του TCP Παραθύρου Ο Παραλήπτης στέλνει δύο παραμέτρους στον αποστολέα Η ερμηνεία των δύο παραμέτρων Είμαι έτοιμος να λάβω δεδομένα με SeqNo=AckNo, AckNo+1, AckNo+2,…,AckNo+Win-1 O παραλήπτης μπορεί να κάνει acknowledge τα δεδομένα data χωρίς το ‘Άνοιγμα’ του TCP Παραθύρου Ο παραλήπτης μπορεί να μεταβάλει το μέγεθος του παραθύρου χωρίς να κάνει acknowledge τα δεδομένα
Παράδειγμα Μηχανισμού Sliding Window (2) Μετάδοση ενός byte (SeqNo=6) και λήψη ενός acknowledgement (AckNo=5, Win=4)
Άνοιγμα του TCP Παραθύρου Λήψη του Acknowledgement το οποίο έχει σαν αποτέλεσμα τη μεγέθυνση του παραθύρου από τα δεξιά Ο Παραλήπτης μεγαλώνει το παράθυρο όταν αδειάζει ο TCP Buffer
Σμίκρυνση του TCP Παραθύρου Λήψη του Acknowledgement το οποίο έχει σαν αποτέλεσμα τη σμίκρυνση του παραθύρου από τα δεξιά
Παράδειγμα Sliding Window
Αθροιστικά Acknowledgements 40 39 38 37 33 34 35 36 41 40 39 38 34 35 36 37 i data i ack
Καθυστερημένα Acknowledgements Ένα νέο πακέτο λαμβάνεται Λήξη προθεσμίας του χρονόμετρου (τυπική τιμή 200 ms typical) Μείωση της κίνησης των ack traffic Δεν δημιουργείται νέο ack με τη λήψη του πακέτου 36, αλλά με τη λήψη του πακέτου 37 40 39 38 37 33 35 41 40 39 38 35 37
Διπλά Acknowledgements out-of-order segment φθάνει στον Παραλήπτη 40 39 37 38 36 34 42 41 Διπλό ack για τη λήψη του 36
H Απόδοση του TCP σε συνάρτηση με το Μηχανισμό Sliding Window Το μέγεθος του παραθύρου περιορίζει το μέγεθος των δεδομένων που πρέπει να αποσταλούν ανά RTT Throughput <= Window / RTT
Ιδανικό Μέγεθος Παραθύρου Ιδανικό Μέγεθος Παραθύρου = Καθυστέρηση * Εύρος Ζώνης Τι Συμβαίνει εάν Μέγεθος Παραθύρου < Καθυστέρηση * Εύρος Ζώνης Ανεπάρκεια (wasted Εύρος Ζώνης) Τι Συμβαίνει εάν Μέγεθος Παραθύρου > Καθυστέρηση * Εύρος Ζώνης Αναμονή των πακέτων στους ενδιάμεσους δρομολογητές Αυξανόμενο RTT λόγω της καθυστέρησης στις ουρές αναμονής Απώλειες Πακέτων
Χρόνος Αναμετάδοσης To χρονικό διάστημα μεταξύ των προσπαθειών επαναμετάδοσης σε δευτερόλεπτα: 1.03, 3, 6, 12, 24, 48, 64, 64, 64, 64, 64, 64, 64. Κάθε φορά ο χρόνος επαναμετάδοσης διπλαδιάζεται (Εκθετικός Backoff Αλγόριθμος) Ο Timer δεν αυξάνει πέρα από τα 64 δευτερόλεπτα TCP σταματά μετά από την 13η προσπάθεια και 9 λεπτά.
Μηχανισμοί TCP Congestion Control
H Έννοια της Συμφόρησης (1) 10 Mbps 100 Mbps 1.5 Mbps Διαφορετικές πηγές συναγωνίζονται για τους πόρους του δικτύου Γιατί αυτό είναι πρόβλημα ? Πηγές δεν γνωρίζουν για την διαθεσιμότητα των πόρων Οι πηγές δεν γνωρίζουν για την ύπαρξη άλλων πηγών Αποτελέσματα: Χαμένα πακέτα (υπερχείλιση των ενταμιευτών στους δρομολογητές) Μεγάλες καθυστερήσεις (αναμονή στις ουρές των ενταμιευτών στους δρομολογητές) Μείωση της ρυθμοαπόδοσης στο σύνδεσμο που υπάρχει συμφόρηση
Ορισμός της Συμφόρησης Ορισμός: Αύξηση του δικτυακού φορτίου => Μείωση της χρήσιμης πληροφορίας που μεταφέρεται Πολλές Αιτίες Επαναμετάδοση πακέτων Κλασική περίπτωση συμφόρησης congestion collapse Πακέτα τα οποία δεν παραλήφθηκαν από τον Παραλήπτη
Προσέγγιση στην Συμφόρηση Δύο Προσεγγίσεις για να Επιλυθεί το Πρόβλημα της Συμφόρησης End-end Έλεγχος Συμφόρησης: Δεν υπάρχει μηχανισμός feedback από το δίκτυο Η συμφόρηση εξάγεται από τις παρατηρήσεις των τελικών χρηστών: απώλειες-πακέτων, καθυστέρηση Η προσέγγιση ακολουθείται από το TCP Μηχανισμός με την παροχή βοήθειας από το δίκτυο: Οι δρομολογητές παρέχουν feedback στους τελικούς χρήστες Χρήση ενός bit σαν ένδειξη της συμφόρησης (SNA, DECbit, TCP/IP ECN, ATM) Explicit rate sender should send at Πρόβλημα: αύξηση της πολυπλοκότητας στους δρομολογητές
Έλεγχος των απωλειών Πακέτων στο TCP Timeout του χρονομέτρη αναμετάδοσης (RTO – Retransmission Timeout) Διπλά acknowledgements Αck Fast Retransmit: TCP may generate an immediate acknowledgment (a duplicate ACK) when an out- of-order segment is received. This duplicate ACK should not be delayed. The purpose of this duplicate ACK is to let the other end know that a segment was received out of order, and to tell it what sequence number is expected.
Ανίχνευση Λαθών Χρησιμοποιώντας το RTO Σε οποιαδήποτε χρονική στιγμή, ο TCP αποστολέας θέτει το χρονομέτρη αναμετάδοσης για κάθε πακέτο που αποστέλλεται στον Παραλήπτη Εάν το acknowledgement δεν ληφθεί εντός των ορίων του χρονομέτρη, τότε το πακέτο θεωρείται ότι έχει χαθεί Το RTO υπολογίζεται δυναμικά
Υπολογισμός του RTO RTO = mean + 4 * Τυπική Απόκλιση Τυπική Απόκλιση s : s = average of (sample – mean) Χρήση της Μέσης Απόκλισης d = average of |sample – mean| Η μέση απόκλιση είναι πιο συντηρητική από οτι η τυπική απόκλιση d >= s Μεγάλες Διακυμάνσεις στο RTT αυξάνουν την απόκλιση=> το RTO μεγαλώνει Το RTO διπλασιάζεται σε κάθε timeout
TCP Μηχανισμοί Συμφόρησης (1) To TCP υλοποιεί μηχανισμούς συμφόρησης στον αποστολέα Το TCP ‘μεταφράζει΄ τις απώλειες πακέτων σαν σημάδι συμφόρηση και μειώνει τον ρυθμό μετάδοσης πακέτων Οι απώλειες πακέτων δεν είναι σημάδι συμφόρησης σε όλα τα δίκτυα Π.χ. ασύρματα δίκτυα Ο Αποστολέας χρησιμοποιεί δύο παραμέτρους Congestion Window (Παράθυρο Συμφόρησης-cwnd) H παράμετρος Congestion Window (cwnd) βάζει ένα περιορισμό στο ρυθμό μετάδοσης του ΤCP αποστολέα προς το δίκτυο. Last Byte Sent- Last Byte Acked ≤ min (cwnd, rcv win) Slow-Start Threshold Value (ssthresh) Η παράμετρος Slow Start threshold (ssthresh) υπολογίζει το μέγεθος παραθύρου για το οποίο θα τερματιστεί η φάση της Αργής Έναρξης. H παράμετρος Congestion Window (cwnd) βάζει ένα περιορισμό στο ρυθμό μετάδοσης του ΤCP αποστολέα προς το δίκτυο. Η παράμετρος Slow Start threshold (ssthresh) υπολογίζει το μέγεθος παραθύρου για το οποίο θα τερματιστεί η φάση της Αργής Έναρξης. Η τιμή αυτή αρχικά παίρνει μεγάλες τιμές (65Κbytes)
TCP Μηχανισμοί Συμφόρησης (2) O μηχανισμός συμφόρησης λειτουργεί με δύο τρόπους Φάση Αργής Έναρξη (Slow Start cwnd < ssthresh) Φάση Αποφυγή Συμφόρησης (Congestion Avoidance cwnd >= ssthresh) H παράμετρος Congestion Window (cwnd) βάζει ένα περιορισμό στο ρυθμό μετάδοσης του ΤCP αποστολέα προς το δίκτυο. Η παράμετρος Slow Start threshold (ssthresh) υπολογίζει το μέγεθος παραθύρου για το οποίο θα τερματιστεί η φάση της Αργής Έναρξης. Η τιμή αυτή αρχικά παίρνει μεγάλες τιμές (65Κbytes)
Slow Start Αρχική Τιμή: Cwnd=1 MSS (Maximum Segment Size) Παράδειγμα: MSS=500 bytes, RTT=200msecs=>Ρυθμός Μετ.=20 Kbps O Παραλήπτης στέλνει ένα Acknowledgment για κάθε segment Κάθε φορά που ένα ACK λαμβάνεται από τον αποστολέα, τότε το congestion window αυξάνεται H αύξηση του παραθύρου cwnd είναι εκθετική
Παράδειγμα Slow Start (1) To μέγεθος του παραθύρου αυξάνεται εκθετικά Για κάθε ACK, το cwnd αυξάνεται κατά 1 ανεξάρτητα από τον αριθμό των segments που έχουν γίνει acknowledged To TCP ελαττώνει τον ρυθμό αύξησης του cwnd όταν ισχύει η σχέση cwnd > ssthresh
Φάση Αποφυγή Συμφόρησης (Congestion Avoidance) H φάση congestion avoidance ξεκινάει εάν το cwnd έχει φθάσει στην τιμή ssthresh Εάν cwnd ≥ ssthresh τότε για κάθε λαμβανόμενο ACK πακέτο, το cwnd αυξάνεται ως ακολούθως cwnd = cwnd + 1/ [cwnd] [cwnd] είναι ο μεγαλύτερος ακέραιος μικρότερος από το cwnd To cwnd αυξάνεται κατά ένα, μόνο εάν όλα τα cwnd segments έχουν γίνει acknowledged
Παράδειγμα Αποφυγής Συμφόρησης Θεωρούμε οτι ssthresh = 8 Roundtrip times
Χειρισμός των Timeouts To TCP μεταφράζει το timeout σαν ένα σήμα συμφόρησης. Όταν αυτό συμβαίνει ο αποστολέας εκτελεί τα παρακάτω Το cwnd παίρνει την τιμή 1 Το ssthresh ισούται με την τρέχουσα τιμή του congestion window διαιρεμένη με το 2=> ssthressh = cwnd / 2 Εισαγωγή στη φάση Αργής Έναρξης
Παράδειγμα με το Timeouts After timeout cwnd = 20 Φάση 4 Φάση 2 Φάση 3 ssthresh = 10 Φάση 1 ssthresh = 8 Φάση1 : Αργή Έναρξη (cwnd < ssthesh) Φάση 2: Αποφυγή Συμφόρησης (time=18 sec) timeout Φάση 3: Aργή Έναρξη (ssthresh=cwnd=20/2=10), cwnd=1
Γρήγορη Αναμετάδοση (Fast Retransmit) Εάν τρία ή περισσότερα ACKs λαμβάνονται στη σειρά για την ίδια ακολουθία, ο TCP αποστολέας θεωρεί οτι το segment έχει χαθεί Στην συνέχεια το TCP εκτελεί επαναμετάδοση του ΄θεωρούμενου΄ χαμένου segment χωρίς να αναμένει να συμβεί το timeout Φάση Αργής Έναρξης ssthresh = cwnd/2 cwnd=1
Παράδειγμα Γρήγορη Αναμετάδοση 14 1 ack 0 ack 28 2 1-2 29-30 ack 1-2 ack 29-30 4 3-6 ack 3-6 Ενέργειες μετά το dupacks για το πακέτο 13: 1. On 3rd dupack 13 =>Γρήγορη Αναμετ. 2. ssthresh = 15/2 = 7 3. cwnd = 1, retransmit 14 4. Ο Παραλήπτης cached 15-28, acks 28 5. cwnd++ Εισαγωγή σε slow start 6. Στο πακέτο 35 Εισαγωγή σε Αποφ. Συμφ. 8 7-14 ack 7-13 15 15-28 14 dupack-13 1
Περίπτωση Όμοιες επιβεβαιώσεις Όταν ο αποστολέας λάβει όμοιες επιβεβαιώσεις – duplicate ACKs - (χωρίς να μεσολαβεί μεταξύ τους άλλο πακέτο) θέτει σε λειτουργία τον αλγόριθμο Ταχείας Επανεκπομπής (Fast Retransmit) Ο αλγόριθμος αυτός προβλέπει ότι με τη λήψη της 3ης όμοιας επιβεβαιωσης ο αποστολέας θα αναμεταδώσει το ζητούμενο πακέτο (segment) χωρίς να περιμένει τη λήξη του Retransmission Timer. Εάν στη συνέχεια πάρει n διαδοχικές όμοιες ACKs, τότε ξέρει ότι ο παραλήπτης πήρε n segments μετά το χαμένο πακέτο Μετά την αναμετάδοση του «χαμένου» πακέτου, ο αποστολέας ενεργοποιεί τον αλγόριθμο Ταχείας Ανάρρωσης (Fast Recovery) μέχρι να λάβει μια νέα επιβεβαίωση ACK, ο οποίος οδηγεί σε αύξηση του cwnd. Ο συνδυασμός των δυο αυτών αλγορίθμων αποτελείται από τα εξής βήματα
Συνδυασμός των 2 αλγορίθμων Με τη λήψη της 3ης όμοιας επιβεβαίωσης (ACK) το ssthresh τίθεται σε τιμή όχι μεγαλύτερη από όσο ορίζει η σχέση ssthresh = max(FlightSize /2, 2*MSS) FlightSize = amount of data that has been sent but not yet acked (RFC 2581). Αναμεταδίδεται το «χαμένο» πακέτο και cwnd = ssthresh + 3*MSS. Τα τρία επιπλέον πακέτα (segments) στη νέα τιμή του παραθύρου αντιστοιχούν στις τρεις όμοιες επιβεβαιώσεις (ACKs) που προκάλεσαν την αναμετάδοση. Για κάθε όμοια 2πλή ACK που λαμβάνεται στη συνέχεια το cwnd αυξάνεται κατά MSS. Αν η τιμή του cwnd το επιτρέπει, μεταδίδεται ένα πακέτο. Όταν ληφθεί νέα επιβεβαίωση (στην πράξη η επιβεβαίωση για το «χαμένο» πακέτο) Ουσιαστικά επιβεβαιώνονται όλα τα segments που στάλθηκαν πριν μπει στη φάση Fast Recovery ο αποστολέας (υποθέτοντας ότι δεν χάθηκαν περισσότερα segments). cwnd = ssthresh και η φάση της Ταχείας Ανάρρωσης τελειώνει Συνεχίζει σε congestion avoidance φάση
Παράδειγμα: Συνδυασμός των 2 αλγορίθμων Ο αποστολέας είναι στη φάση του Slow Start: Αρχικά cnwd = 8 Για κάθε επιβεβαίωση που παίρνει, αυξάνει το cnwd κατά 1 Άρα από cnwd = 8, μετά την ack7-13, γίνεται cnwd = 15 Ενέργειες μετά τις διπλές επιβεβαιώσεις για το πακέτο 14 που χάθηκε Μετά την 3η duplicate ACK, enter fast retransmit Τίθεται ssthresh = cwnd = 15/2=7 Επαναμετάδοση του 14 Παραλαβή της 4ης dup_ACK θέτει το cnw = 11 Μέτα την 14η dup_ACK, cnw=21, και στέλνονται τα 29-34 Μετά την επιβεβαίωση για το 28, βγαίνουμε από το fast recovery Τίθεται το cwnd = 7 Συνέχεια με Congestion Avoidance Slow Start Fast Retransmit Fast Recovery
Πολλές παραλλαγές-εξελίξεις του TCP TCP Tahoe (1988, FreeBSD 4.3 Tahoe) TCP Reno (1990, FreeBSD 4.3 Reno) New Reno (1996) TCP VEGAS
TCP Tahoe Αργής Έναρξης (Slow Start) Αποφυγή Συμφόρησης (Congestion Avoidance) Γρήγορης Αναμετάδοσης (Fast Retransmit)
TCP Reno Χρησιμοποιεί όλους τους μηχανισμούς του Tahoe Duplicate ACKs Γρήγορη Επαναμετάδοση Γρήγορη Ανάκαμψη Timeout Retransmit/Επαναμετάδοση Αργή Έναρξη/Slow Start To TCP Reno βελτιώνει την απόδοση του TCP σε σχέση με την έκδοση Tahoe όταν ένα απλό πακέτο απορρίπτεται σε ένα RTT
New-Reno TCP Το New-Reno TCP είναι μια παραλλαγή του Reno TCP που διαφοροποιείται μόνο στον τρόπο που τερματίζεται η φάση της Ταχείας Ανάρρωσης Συγκεκριμένα εισάγεται η έννοια της Μερικής Επιβεβαίωσης (Partial ACK). Ιδέα του New Reno Χρήση των partial ACK για παραμονή στο fast recovery και διόρθωση σε περίπτωση που χάθηκαν περισσότερα segments πριν την είσοδο στη φάση του fast retransmit
Μερική Επιβεβαίωση (Partial ACK) Μερική Επιβεβαίωση (Partial ACK) ονομάζεται κάθε επιβεβαίωση (ACK) που επιβεβαιώνει μέρος μόνο από τα δεδομένα που είχαν μεταδοθεί όταν ξεκίνησε η Ταχεία Επανεκπομπή Στο New-Reno TCP, η Μερική Επιβεβαίωση (partial ACK) εκλαμβάνεται ως ένδειξη ότι το επόμενο από αυτό που επιβεβαιώνεται πακέτο επίσης χάθηκε και επομένως δεν λήγει η φάση της Ταχείας Ανάρρωσης. Με τη λήψη της Μερικής Επιβεβαίωσης (partial ACK) ο αποστολέας θα αναμεταδώσει αμέσως το ζητούμενο πακέτο. Η Ταχεία Ανάρρωση θα ολοκληρωθεί μόνο όταν επιβεβαιωθούν όλα τα δεδομένα που είχαν ήδη μεταδοθεί όταν ξεκίνησε η Ταχεία Επανεκπομπή
TCP VEGAS Στη φάση congestion avoidance cwnd = (actual rate)x(base RTT) + 2 πακέτα Σε κάθε RTT, προσαρμόζεται το cwnd κατά 1 πακέτο εάν αυτό είναι απαραίτητο με βάση το παραπάνω τύπο Κατά τη διάρκεια της αργής έναρξης Για την ελάττωση της υπέρβασης, το cwnd αυξάνεται κάθε RTT Εξαγωγή από τη φάση της αργής έναρξης όταν cwnd > (actual rate)x(baseRTT) + 1 πακέτο