Ελεγχος συμφορησης δικτυου στο tcp
Συμφόρηση δικτύου στο TCP Συμφόρηση (congestion) στο δίκτυο έχουμε όταν κάποιοι από τους ενδιάμεσους δρομολογητές αναγκάζονται να απορρίψουν πακέτα, λόγω υπερχείλισης των ενταμιευτών τους. Tο δίκτυο ίσως καταρρεύσει. Ένας αποστολέας πληροφορείται εμμέσως, από την εκπνοή του χρόνου προθεσμίας των πακέτων που έστειλε, ότι αυτά δεν έχουν φτάσει στον παραλήπτη και έτσι τα ξαναστέλνει. Ούτε και αυτή τη φορά, όμως, φτάνουν στον παραλήπτη, καθώς απορρίπτονται ξανά από κάποιον ενδιάμεσο δρομολογητή, λόγω της συμφόρησης. Η αποστολή των ίδιων δεδομένων επαναλαμβάνεται ξανά και ξανά χωρίς αποτέλεσμα. Για την επίλυση της συμφόρησης, οι αποστολείς που αντιλαμβάνονται την συμφόρηση, ελαττώνουν τον ρυθμό αποστολής δεδομένων στο δίκτυο, με σκοπό την μείωση της συμφόρησης. Όταν τερματιστεί η συμφόρηση, οι αποστολείς που είχαν επηρεαστεί αρχίζουν σταδιακά να αυξάνουν την ποσότητα των δεδομένων που στέλνουν στο δίκτυο.
O αλγόριθμος της Προσθετικής Αύξησης / Πολλαπλασιαστικής Μείωσης Υπάρχουν δύο ενδεχόμενα προβλήματα –Η χωρητικότητα του δικτύου –Η χωρητικότητα του αποδέκτη Ο αποστολέας τηρεί τις μεταβλητές: Advertised Window (flow_win) το διαφημίζει ο αποδέκτης Congestion Window (cwnd) τροποποιείται με βάση την ανάδραση από το δίκτυο Slow-start threshold Value (ssthresh) αρχική τιμή το διαφημιζόμενο μέγεθος παραθύρου
Βήματα αλγορίθμου: Φάση αργής εκκίνησης: Ξεκινάμε με μέγεθος παραθύρου συμφόρησης congestionW=1 MSS. Όταν το παράθυρο συμφόρησης έχει τιμή μικρότερη από την προκαθορισμένη τιμή κατωφλίου, το παράθυρο συμφόρησης W αυξάνεται εκθετικά (δύναμη του 2): 1 MSS, 2 MSS, 4 MSS, 8 MSS, κλπ, congestionW=2congestionW Φάση αποφυγής συμφόρησης: όταν το παράθυρο συμφόρησης W έχει τιμή μεγαλύτερη ή ίση από την προκαθορισμένη τιμή κατωφλίου threshold, το παράθυρο συμφόρησης αυξάνεται γραμμικά (κατά 1): congestionW=congestionW+1 Όταν εκπνεύσει ο χρόνος προθεσμίας για τη λήψη μηνύματος επιβεβαίωσης, το κατώφλι threshold λαμβάνει τιμή ίση με το μισό του τρέχοντος παραθύρου συμφόρησης και το παράθυρο συμφόρησης λαμβάνει τιμή 1 MSS: threshold=congestionW/2 και congestionW=1
Γρήγορη Επαναμετάδοση και Γρήγορη Ανάκαμψη Ο αλγόριθμος ελέγχου συμφόρησης AIMD έχει δύο μειονεκτήματα: Όταν ένα πακέτο χαθεί στο δίκτυο, ο αποστολέας θα πρέπει να περιμένει την εκπνοή του σχετικού timeout για να αντιληφθεί την απώλεια Η εκκίνηση του congestionW από την τιμή 1 MSS, όταν υπάρχει απώλεια πακέτου, αφήνει ανεκμετάλλευτη τη σύνδεση μέχρι το congestionW να λάβει σταδιακά μία σχετικά μεγάλη τιμή. Για την αντιμετώπιση αυτών των αδυναμιών προτάθηκαν δύο μηχανισμοί: Η γρήγορη επαναμετάδοση (fast retransmission) και Η γρήγορη ανάκαμψη (fast recovery) αντίστοιχα. Τρόπος λειτουργίας του μηχανισμού της γρήγορης επαναμετάδοσης Το πακέτο 1 παραδίδεται επιτυχώς στον παραλήπτη, ενώ το πακέτο 2 χάνεται. Ο παραλήπτης επιβεβαιώνει στέλνει ACK1. Όταν ο παραλήπτης λάβει το πακέτο 3, ο παραλήπτης θα στείλει πάλι ACK1, για να ειδοποιήσει έτσι ότι μόνο μέχρι το πακέτο 1 τα έχει λάβει όλα σωστά. Ο παραλήπτης θα στείλει ACK1 και όταν λάβει τα πακέτα 4 και 5. Ο αποστολέας λαμβάνει, συνεπώς, αντίγραφα (duplicate ACKs) του ίδιου ACK1. Όταν ο αποστολέας κόμβος λάβει 3 διπλότυπα ACKs για το πακέτο 1, διαπιστώνει την απώλεια του πακέτου 2 και το επαναμεταδίδει. Όταν ο παραλήπτης λάβει επιτυχώς το πακέτο 2, τότε επιβεβαιώνει τη λήψη όλων των πακέτων που έχει λάβει μέχρι τότε, στέλνοτας ACK5. Για το λόγο αυτό, το ACK5 ονομάζεται σωρευτικό μήνυμα επιβεβαίωσης (cumulative ACK).
Γρήγορη ανάκαμψη (fast recovery) Για την αντιμετώπιση της αδυναμίας που εμφανίζει ο αρχικός αλγόριθμος AIMD, όταν το παράθυρο συμφόρησης τίθεται ίσο με 1 MSS, μετά από την απώλεια πακέτου, προτάθηκε η κατάργηση της αργής εκκίνησης από τον αλγόριθμο. Η φάση αργής εκκίνησης θα χρησιμοποιείται μόνο στην αρχή, δηλαδή μόνο αμέσως μετά την εγκαθίδρυση της σύνδεσης και όχι κατά την μετέπειτα ζωή της. Έτσι, όταν διαπιστωθεί απώλεια πακέτου, το παράθυρο συμφόρησης μειώνεται στο μισό (congestionW=congestionW/2), όχι στο 1 MSS, και εφαρμόζεται η προσθετική αύξησή του μέχρι να συμβεί ξανά απώλεια πακέτου. Αυτή η τεχνική ονομάζεται γρήγορη ανάκαμψη, γιατί δεν απαιτούνται πλέον τα βήματα της εκθετικής αύξησης.
Παραλλαγές Ελέγχου Συμφόρησης TCP Αργή Αρχή Αποφυγή Συμφόρησης Ταχεία Αναμετάδοση TCP Tahoe (1988, FreeBSD 4.3 Tahoe) Ταχεία Ανάκαμψη Στη μόνιμη κατάσταση το cwnd ταλαντώνεται γύρω από τη βέλτιστη τιμή του παραθύρου lTCP Reno (1990, FreeBSD 4.3 Reno) New Reno (1996) lSACK (1996)
New Reno SACK (Selective acknowledgment) Όταν έχουμε πολλαπλές απώλειες πακέτων, το TCP Reno αντιμετωπίζει πρόβλημα Μερικό (partial) ACK: –Συμβαίνει όταν χάνονται πολλά τεμάχια –Το μερικό ACK επιβεβαιώνει μερικά, αλλά όχι όλα τα τεμάχια που εκκρεμούν κατά την αρχή της ταχείας ανάκαμψης –Ο αποστολέας θα βγει από την φάση της ταχείας ανάκαμψης όταν επέλθει η εκπνοή χρόνου Το new Reno: –Το μερικό ACK δεν βγάζει τον αποστολέα από την ταχεία ανάκαμψη –Το μερικό ACK προκαλεί την αναμετάδοση του πακέτου που ακολουθεί το πακέτο που επιβεβαιώθηκε Το new Reno μπορεί να χειριστεί πολλαπλές απώλειες πακέτων χωρίς να εισέλθει στην αργή αρχή SACK (Selective acknowledgment) Το πρόβλημα: Το Reno και το νέο Reno αναμεταδίδουν το πολύ 1 χαμένο πακέτο ανά χρόνο μετάδοσης μετ’ επιστροφής (RTT) Επιλεκτική αναμετάδοση SACK: Ο δέκτης μπορεί να επιβεβαιώσει μη συνεχείς ομάδες δεδομένων (π.χ., SACK (0-1023, 2040-3071) TCP SACK: –Εισέρχεται στην ταχεία ανάκαμψη με τη λήψη 3 ταυτόσημων ACK –Ο αποστολέας παρακολουθεί τα SACK και συμπεραίνει το κατά πόσο κάποιο πακέτο χάθηκε –Ο αποστολέας αναμεταδίδει το επόμενο πακέτο από τη λίστα των πακέτων που θεωρεί ότι χάθηκαν