Μεταφορά αξιοπιστίας TCP
Όλοι είμαστε εξοικειωμένοι με το πρωτόκολλο TCP ως ένα αξιόπιστο πρωτόκολλο μεταφοράς, αλλά πώς διασφαλίζει την αξιοπιστία της μεταφοράς;
Για να επιτευχθεί αξιόπιστη μετάδοση, πρέπει να ληφθούν υπόψη πολλοί παράγοντες, όπως η αλλοίωση δεδομένων, η απώλεια, η διπλοτυπία και τα θραύσματα εκτός σειράς. Εάν αυτά τα προβλήματα δεν μπορούν να λυθούν, δεν μπορεί να επιτευχθεί αξιόπιστη μετάδοση.
Επομένως, το TCP χρησιμοποιεί μηχανισμούς όπως ο αριθμός ακολουθίας, η απάντηση επιβεβαίωσης, ο έλεγχος επανάληψης αποστολής, η διαχείριση σύνδεσης και ο έλεγχος παραθύρων για να επιτύχει αξιόπιστη μετάδοση.
Σε αυτήν την εργασία, θα επικεντρωθούμε στο συρόμενο παράθυρο, στον έλεγχο ροής και στον έλεγχο συμφόρησης του TCP. Ο μηχανισμός αναμετάδοσης καλύπτεται ξεχωριστά στην επόμενη ενότητα.
Έλεγχος ροής δικτύου
Ο Έλεγχος Ροής Δικτύου ή γνωστός ως Έλεγχος Κυκλοφορίας Δικτύου είναι στην πραγματικότητα μια εκδήλωση της λεπτής σχέσης μεταξύ παραγωγών και καταναλωτών. Πιθανότατα έχετε συναντήσει αυτό το σενάριο πολλές φορές στην εργασία ή σε συνεντεύξεις. Εάν η ικανότητα παραγωγής του παραγωγού υπερβαίνει κατά πολύ την ικανότητα κατανάλωσης του καταναλωτή, αυτό θα προκαλέσει την επ' αόριστον αύξηση της ουράς. Σε μια πιο σοβαρή περίπτωση, ίσως γνωρίζετε ότι όταν τα μηνύματα RabbitMQ συσσωρεύονται πάρα πολύ, μπορεί να προκληθεί υποβάθμιση της απόδοσης ολόκληρου του διακομιστή MQ. Το ίδιο ισχύει και για το TCP. Εάν δεν ελεγχθεί, πάρα πολλά μηνύματα θα τοποθετηθούν στο δίκτυο και οι καταναλωτές θα έχουν υπερβεί τη χωρητικότητά τους, ενώ οι παραγωγοί θα συνεχίσουν να στέλνουν διπλότυπα μηνύματα, κάτι που θα επηρεάσει σημαντικά την απόδοση του δικτύου.
Για την αντιμετώπιση αυτού του φαινομένου, το TCP παρέχει έναν μηχανισμό για τον αποστολέα ώστε να ελέγχει την ποσότητα των δεδομένων που αποστέλλονται με βάση την πραγματική χωρητικότητα λήψης του παραλήπτη, ο οποίος είναι γνωστός ως έλεγχος ροής. Ο παραλήπτης διατηρεί ένα παράθυρο λήψης, ενώ ο αποστολέας διατηρεί ένα παράθυρο αποστολής. Πρέπει να σημειωθεί ότι αυτά τα παράθυρα αφορούν μόνο μία σύνδεση TCP και δεν μοιράζονται όλες οι συνδέσεις ένα παράθυρο.
Το TCP παρέχει έλεγχο ροής χρησιμοποιώντας μια μεταβλητή για ένα παράθυρο λήψης. Το παράθυρο λήψης δίνει στον αποστολέα μια ένδειξη για το πόσος χώρος προσωρινής μνήμης είναι ακόμα διαθέσιμος. Ο αποστολέας ελέγχει την ποσότητα των δεδομένων που αποστέλλονται σύμφωνα με την πραγματική χωρητικότητα αποδοχής του παραλήπτη.
Ο κεντρικός υπολογιστής λήψης ειδοποιεί τον αποστολέα για το μέγεθος των δεδομένων που μπορεί να λάβει και ο αποστολέας στέλνει δεδομένα έως αυτό το όριο. Αυτό το όριο είναι το μέγεθος του παραθύρου, θυμάστε την κεφαλίδα TCP; Υπάρχει ένα πεδίο παραθύρου λήψης, το οποίο χρησιμοποιείται για να υποδείξει τον αριθμό των byte που ο δέκτης είναι σε θέση ή επιθυμεί να λάβει.
Ο κεντρικός υπολογιστής αποστολέα θα στέλνει περιοδικά ένα πακέτο ανίχνευσης παραθύρου, το οποίο χρησιμοποιείται για να ανιχνεύσει εάν ο κεντρικός υπολογιστής δέκτη εξακολουθεί να είναι σε θέση να δεχτεί δεδομένα. Όταν το buffer του δέκτη κινδυνεύει να υπερχειλίσει, το μέγεθος του παραθύρου ορίζεται σε μικρότερη τιμή για να δώσει εντολή στον αποστολέα να ελέγξει την ποσότητα των δεδομένων που αποστέλλονται.
Ακολουθεί ένα διάγραμμα ελέγχου ροής δικτύου:
Έλεγχος Συμφόρησης Δικτύου
Πριν εισαγάγουμε τον έλεγχο συμφόρησης, πρέπει να κατανοήσουμε ότι εκτός από το παράθυρο λήψης και το παράθυρο αποστολής, υπάρχει και ένα παράθυρο συμφόρησης, το οποίο χρησιμοποιείται κυρίως για την επίλυση του προβλήματος του ρυθμού με τον οποίο ο αποστολέας αρχίζει να στέλνει δεδομένα στο παράθυρο λήψης. Επομένως, το παράθυρο συμφόρησης συντηρείται επίσης από τον αποστολέα TCP. Χρειαζόμαστε έναν αλγόριθμο για να αποφασίσουμε πόσα δεδομένα είναι κατάλληλα για αποστολή, καθώς η αποστολή πολύ λίγων ή πάρα πολλών δεδομένων δεν είναι ιδανική, εξ ου και η έννοια του παραθύρου συμφόρησης.
Στον προηγούμενο έλεγχο ροής δικτύου, αυτό που αποφεύγαμε ήταν ο αποστολέας να γεμίζει την προσωρινή μνήμη του παραλήπτη με δεδομένα, αλλά δεν γνωρίζαμε τι συνέβαινε στο δίκτυο. Συνήθως, τα δίκτυα υπολογιστών βρίσκονται σε κοινόχρηστο περιβάλλον. Ως αποτέλεσμα, ενδέχεται να υπάρχει συμφόρηση δικτύου λόγω επικοινωνίας μεταξύ άλλων κεντρικών υπολογιστών.
Όταν το δίκτυο είναι υπερφορτωμένο, εάν συνεχίζεται η αποστολή μεγάλου αριθμού πακέτων, ενδέχεται να προκληθούν προβλήματα όπως καθυστέρηση και απώλεια πακέτων. Σε αυτό το σημείο, το TCP θα αναμεταδώσει τα δεδομένα, αλλά η αναμετάδοση θα αυξήσει την επιβάρυνση του δικτύου, με αποτέλεσμα μεγαλύτερες καθυστερήσεις και περισσότερες απώλειες πακέτων. Αυτό μπορεί να οδηγήσει σε έναν φαύλο κύκλο και να συνεχίσει να μεγαλώνει.
Έτσι, το TCP δεν μπορεί να αγνοήσει τι συμβαίνει στο δίκτυο. Όταν το δίκτυο είναι υπερφορτωμένο, το TCP θυσιάζεται μειώνοντας την ποσότητα δεδομένων που στέλνει.
Επομένως, προτείνεται έλεγχος συμφόρησης, ο οποίος στοχεύει στην αποφυγή της υπερφόρτωσης ολόκληρου του δικτύου με δεδομένα από τον αποστολέα. Για να ρυθμίσει την ποσότητα δεδομένων που πρέπει να στείλει ο αποστολέας, το TCP ορίζει μια έννοια που ονομάζεται παράθυρο συμφόρησης. Ο αλγόριθμος ελέγχου συμφόρησης θα προσαρμόσει το μέγεθος του παραθύρου συμφόρησης ανάλογα με τον βαθμό συμφόρησης του δικτύου, έτσι ώστε να ελέγχει την ποσότητα δεδομένων που αποστέλλονται από τον αποστολέα.
Τι είναι ένα παράθυρο συμφόρησης; Τι σχέση έχει αυτό με το παράθυρο αποστολής;
Το Παράθυρο Συμφόρησης είναι μια μεταβλητή κατάστασης που διατηρείται από τον αποστολέα και καθορίζει την ποσότητα δεδομένων που μπορεί να στείλει ο αποστολέας. Το παράθυρο συμφόρησης αλλάζει δυναμικά ανάλογα με το επίπεδο συμφόρησης του δικτύου.
Το Παράθυρο Αποστολής είναι ένα συμφωνημένο μέγεθος παραθύρου μεταξύ του αποστολέα και του παραλήπτη που υποδεικνύει την ποσότητα δεδομένων που μπορεί να λάβει ο παραλήπτης. Το παράθυρο συμφόρησης και το παράθυρο αποστολής σχετίζονται. Το παράθυρο αποστολής είναι συνήθως ίσο με το ελάχιστο των παραθύρων συμφόρησης και λήψης, δηλαδή, swnd = min(cwnd, rwnd).
Το cwnd του παραθύρου συμφόρησης αλλάζει ως εξής:
Εάν δεν υπάρχει συμφόρηση στο δίκτυο, δηλαδή δεν υπάρχει χρονικό όριο αναμετάδοσης, το παράθυρο συμφόρησης αυξάνεται.
Εάν υπάρχει συμφόρηση στο δίκτυο, το παράθυρο συμφόρησης μειώνεται.
Ο αποστολέας προσδιορίζει εάν το δίκτυο είναι συμφορημένο παρατηρώντας εάν το πακέτο επιβεβαίωσης ACK λαμβάνεται εντός του καθορισμένου χρόνου. Εάν ο αποστολέας δεν λάβει το πακέτο επιβεβαίωσης ACK εντός του καθορισμένου χρόνου, θεωρείται ότι το δίκτυο είναι συμφορημένο.
Εκτός από το παράθυρο συμφόρησης, ήρθε η ώρα να συζητήσουμε τον αλγόριθμο ελέγχου συμφόρησης TCP. Ο αλγόριθμος ελέγχου συμφόρησης TCP αποτελείται από τρία κύρια μέρη:
Αργή εκκίνηση:Αρχικά, το παράθυρο συμφόρησης cwnd είναι σχετικά μικρό και ο αποστολέας το αυξάνει εκθετικά για να προσαρμοστεί γρήγορα στη χωρητικότητα του δικτύου.
Αποφυγή συμφόρησης:Αφού το παράθυρο συμφόρησης υπερβεί ένα συγκεκριμένο όριο, ο αποστολέας αυξάνει το παράθυρο συμφόρησης με γραμμικό τρόπο για να επιβραδύνει τον ρυθμό ανάπτυξης του παραθύρου συμφόρησης και να αποφύγει την υπερφόρτωση του δικτύου.
Γρήγορη ανάρρωση:Εάν παρουσιαστεί συμφόρηση, ο αποστολέας μειώνει το παράθυρο συμφόρησης στο μισό και εισέρχεται σε κατάσταση γρήγορης ανάκτησης για να προσδιορίσει την τοποθεσία της ανάκτησης δικτύου μέσω των ληφθέντων διπλότυπων επικυρώσεων και, στη συνέχεια, συνεχίζει να αυξάνει το παράθυρο συμφόρησης.
Αργή εκκίνηση
Όταν δημιουργείται μια σύνδεση TCP, το cwnd του παραθύρου συμφόρησης ορίζεται αρχικά σε μια ελάχιστη τιμή MSS (μέγιστο μέγεθος τμήματος). Με αυτόν τον τρόπο, ο αρχικός ρυθμός αποστολής είναι περίπου MSS/RTT bytes/δευτερόλεπτο. Το πραγματικό διαθέσιμο εύρος ζώνης είναι συνήθως πολύ μεγαλύτερο από το MSS/RTT, επομένως το TCP θέλει να βρει τον βέλτιστο ρυθμό αποστολής, ο οποίος μπορεί να επιτευχθεί μέσω αργής εκκίνησης.
Στη διαδικασία αργής εκκίνησης, η τιμή του παραθύρου συμφόρησης cwnd θα αρχικοποιηθεί σε 1 MSS και κάθε φορά που επιβεβαιώνεται το τμήμα πακέτου που μεταδόθηκε, η τιμή του cwnd θα αυξάνεται κατά ένα MSS, δηλαδή η τιμή του cwnd θα γίνεται 2 MSS. Στη συνέχεια, η τιμή του cwnd διπλασιάζεται για κάθε επιτυχημένη μετάδοση ενός τμήματος πακέτου και ούτω καθεξής. Η συγκεκριμένη διαδικασία ανάπτυξης φαίνεται στο ακόλουθο σχήμα.
Ωστόσο, ο ρυθμός αποστολής δεν μπορεί πάντα να αυξάνεται. Η ανάπτυξη πρέπει να σταματήσει κάποια στιγμή. Πότε, λοιπόν, τελειώνει η αύξηση του ρυθμού αποστολής; Η αργή εκκίνηση συνήθως τερματίζει την αύξηση του ρυθμού αποστολής με έναν από τους ακόλουθους τρόπους:
Ο πρώτος τρόπος είναι η περίπτωση απώλειας πακέτων κατά τη διάρκεια της διαδικασίας αποστολής αργής εκκίνησης. Όταν συμβεί απώλεια πακέτου, το TCP ορίζει το παράθυρο συμφόρησης cwnd του αποστολέα σε 1 και επανεκκινεί τη διαδικασία αργής εκκίνησης. Σε αυτό το σημείο, εισάγεται η έννοια του κατωφλίου αργής εκκίνησης ssthresh, του οποίου η αρχική τιμή είναι το μισό της τιμής του cwnd που δημιουργεί απώλεια πακέτων. Δηλαδή, όταν ανιχνεύεται συμφόρηση, η τιμή του ssthresh είναι το μισό της τιμής του παραθύρου.
Ο δεύτερος τρόπος είναι να συσχετιστεί άμεσα με την τιμή του ορίου αργής εκκίνησης ssthresh. Δεδομένου ότι η τιμή του ssthresh είναι η μισή από την τιμή του παραθύρου όταν ανιχνεύεται συμφόρηση, ενδέχεται να υπάρξει απώλεια πακέτων με κάθε διπλασιασμό όταν το cwnd είναι μεγαλύτερο από το ssthresh. Επομένως, είναι καλύτερο να ορίσετε το cwnd σε ssthresh, κάτι που θα προκαλέσει τη μετάβαση του TCP σε λειτουργία ελέγχου συμφόρησης και τον τερματισμό της αργής εκκίνησης.
Ο τελευταίος τρόπος με τον οποίο μπορεί να τερματιστεί η αργή εκκίνηση είναι εάν εντοπιστούν τρία πλεονάζοντα πακέτα ACK, το TCP εκτελεί μια γρήγορη αναμετάδοση και εισέρχεται σε κατάσταση ανάκτησης. (Εάν δεν είναι σαφές γιατί υπάρχουν τρία πακέτα ACK, αυτό θα εξηγηθεί ξεχωριστά στον μηχανισμό αναμετάδοσης.)
Αποφυγή συμφόρησης
Όταν το TCP εισέρχεται στην κατάσταση ελέγχου συμφόρησης, το cwnd ορίζεται στο μισό του κατωφλίου συμφόρησης ssthresh. Αυτό σημαίνει ότι η τιμή του cwnd δεν μπορεί να διπλασιάζεται κάθε φορά που λαμβάνεται ένα τμήμα πακέτου. Αντίθετα, υιοθετείται μια σχετικά συντηρητική προσέγγιση στην οποία η τιμή του cwnd αυξάνεται μόνο κατά ένα MSS (μέγιστο μήκος τμήματος πακέτου) μετά την ολοκλήρωση κάθε μετάδοσης. Για παράδειγμα, ακόμη και αν αναγνωριστούν 10 τμήματα πακέτων, η τιμή του cwnd θα αυξηθεί μόνο κατά ένα MSS. Αυτό είναι ένα γραμμικό μοντέλο ανάπτυξης και έχει επίσης ένα ανώτερο όριο στην ανάπτυξη. Όταν συμβαίνει απώλεια πακέτων, η τιμή του cwnd αλλάζει σε MSS και η τιμή του ssthresh ορίζεται στο μισό του cwnd. Ή θα σταματήσει επίσης την ανάπτυξη του MSS όταν ληφθούν 3 πλεονάζουσες απαντήσεις ACK. Εάν εξακολουθούν να λαμβάνονται τρεις πλεονάζουσες επικυρώσεις μετά τη μείωση στο μισό της τιμής του cwnd, η τιμή του ssthresh καταγράφεται ως το μισό της τιμής του cwnd και εισέρχεται η κατάσταση γρήγορης ανάκτησης.
Γρήγορη ανάρρωση
Στην κατάσταση Γρήγορης Ανάκαμψης, η τιμή του cwnd παραθύρου συμφόρησης αυξάνεται κατά ένα MSS για κάθε λαμβανόμενο πλεονάζον ACK, δηλαδή, ACK που δεν φτάνει σε ακολουθία. Αυτό γίνεται για να αξιοποιηθούν τα τμήματα πακέτων που έχουν μεταδοθεί με επιτυχία στο δίκτυο, ώστε να βελτιωθεί όσο το δυνατόν περισσότερο η απόδοση μετάδοσης.
Όταν φτάσει ένα ACK του χαμένου τμήματος πακέτου, το TCP μειώνει την τιμή του cwnd και στη συνέχεια εισέρχεται στην κατάσταση αποφυγής συμφόρησης. Αυτό γίνεται για να ελεγχθεί το μέγεθος του παραθύρου συμφόρησης και να αποφευχθεί η περαιτέρω αύξηση της συμφόρησης του δικτύου.
Εάν προκύψει χρονικό όριο μετά την κατάσταση ελέγχου συμφόρησης, η κατάσταση δικτύου γίνεται πιο σοβαρή και το TCP μεταβαίνει από την κατάσταση αποφυγής συμφόρησης στην κατάσταση αργής εκκίνησης. Σε αυτήν την περίπτωση, η τιμή του παραθύρου συμφόρησης cwnd ορίζεται σε 1 MSS, το μέγιστο μήκος τμήματος πακέτου και η τιμή του κατωφλίου αργής εκκίνησης ssthresh ορίζεται στο μισό του cwnd. Ο σκοπός αυτού είναι να αυξηθεί εκ νέου σταδιακά το μέγεθος του παραθύρου συμφόρησης μετά την ανάκαμψη του δικτύου, ώστε να εξισορροπηθεί ο ρυθμός μετάδοσης και ο βαθμός συμφόρησης του δικτύου.
Περίληψη
Ως αξιόπιστο πρωτόκολλο μεταφοράς, το TCP εφαρμόζει αξιόπιστη μεταφορά μέσω αριθμού ακολουθίας, επιβεβαίωσης, ελέγχου αναμετάδοσης, διαχείρισης σύνδεσης και ελέγχου παραθύρων. Μεταξύ αυτών, ο μηχανισμός ελέγχου ροής ελέγχει την ποσότητα δεδομένων που αποστέλλονται από τον αποστολέα σύμφωνα με την πραγματική χωρητικότητα λήψης του παραλήπτη, αποφεύγοντας τα προβλήματα συμφόρησης δικτύου και υποβάθμισης της απόδοσης. Ο μηχανισμός ελέγχου συμφόρησης αποφεύγει την εμφάνιση συμφόρησης δικτύου προσαρμόζοντας την ποσότητα δεδομένων που αποστέλλονται από τον αποστολέα. Οι έννοιες του παραθύρου συμφόρησης και του παραθύρου αποστολής σχετίζονται μεταξύ τους και η ποσότητα δεδομένων στον αποστολέα ελέγχεται με δυναμική προσαρμογή του μεγέθους του παραθύρου συμφόρησης. Η αργή εκκίνηση, η αποφυγή συμφόρησης και η γρήγορη αποκατάσταση είναι τα τρία κύρια μέρη του αλγορίθμου ελέγχου συμφόρησης TCP, ο οποίος προσαρμόζει το μέγεθος του παραθύρου συμφόρησης μέσω διαφορετικών στρατηγικών για να προσαρμοστεί στη χωρητικότητα και τον βαθμό συμφόρησης του δικτύου.
Στην επόμενη ενότητα, θα εξετάσουμε λεπτομερώς τον μηχανισμό αναμετάδοσης του TCP. Ο μηχανισμός αναμετάδοσης είναι ένα σημαντικό μέρος του TCP για την επίτευξη αξιόπιστης μετάδοσης. Εξασφαλίζει την αξιόπιστη μετάδοση δεδομένων μέσω της αναμετάδοσης χαμένων, κατεστραμμένων ή καθυστερημένων δεδομένων. Η αρχή υλοποίησης και η στρατηγική του μηχανισμού αναμετάδοσης θα παρουσιαστούν και θα αναλυθούν λεπτομερώς στην επόμενη ενότητα. Μείνετε συντονισμένοι!
Ώρα δημοσίευσης: 24 Φεβρουαρίου 2025