Το μυστικό όπλο του TCP: Έλεγχος ροής δικτύου και έλεγχος συμφόρησης δικτύου

Μεταφορά αξιοπιστίας TCP
Είμαστε όλοι εξοικειωμένοι με το πρωτόκολλο TCP ως αξιόπιστο πρωτόκολλο μεταφοράς, αλλά πώς εξασφαλίζει την αξιοπιστία των μεταφορών;

Για να επιτευχθεί αξιόπιστη μετάδοση, πρέπει να ληφθούν υπόψη πολλοί παράγοντες, όπως η διαφθορά δεδομένων, η απώλεια, η επικάλυψη και τα θραύσματα εκτός τάξης. Εάν αυτά τα προβλήματα δεν μπορούν να λυθούν, δεν μπορεί να επιτευχθεί αξιόπιστη μετάδοση.

Ως εκ τούτου, η TCP χρησιμοποιεί μηχανισμούς όπως ο αριθμός ακολουθίας, η απάντηση αναγνώρισης, ο έλεγχος της επανάληψης, η διαχείριση σύνδεσης και ο έλεγχος παραθύρων για την επίτευξη αξιόπιστης μετάδοσης.

Σε αυτή την εργασία, θα επικεντρωθούμε στο παράθυρο ολίσθησης, τον έλεγχο ροής και τον έλεγχο συμφόρησης του TCP. Ο μηχανισμός αναμετάδοσης καλύπτεται ξεχωριστά στο επόμενο τμήμα.

Έλεγχος ροής δικτύου
Ο έλεγχος ροής δικτύου ή η γνώση του ελέγχου της κυκλοφορίας δικτύου είναι στην πραγματικότητα μια εκδήλωση της λεπτής σχέσης μεταξύ παραγωγών και καταναλωτών. Πιθανότατα έχετε συναντήσει αυτό το σενάριο πολύ στη δουλειά ή σε συνεντεύξεις. Εάν η ικανότητα του παραγωγού να παράγει σε μεγάλο βαθμό την ικανότητα του καταναλωτή να καταναλώσει, θα προκαλέσει την ανάπτυξη της ουράς επ 'αόριστον. Σε μια πιο σοβαρή περίπτωση, ίσως γνωρίζετε ότι όταν τα μηνύματα RabbitMQ συσσωρεύονται πάρα πολύ, μπορεί να προκαλέσει υποβάθμιση απόδοσης ολόκληρου του διακομιστή MQ. Το ίδιο ισχύει και για το TCP. Εάν αφεθεί ανεξέλεγκτα, πάρα πολλά μηνύματα θα τεθούν στο δίκτυο και οι καταναλωτές θα έχουν ξεπεράσει την ικανότητά τους, ενώ οι παραγωγοί θα συνεχίσουν να στέλνουν διπλά μηνύματα, τα οποία θα επηρεάσουν σημαντικά την απόδοση του δικτύου.

Για να αντιμετωπίσει αυτό το φαινόμενο, το TCP παρέχει έναν μηχανισμό για τον αποστολέα για τον έλεγχο της ποσότητας των δεδομένων που αποστέλλονται με βάση την πραγματική ικανότητα λήψης του δέκτη, ο οποίος είναι γνωστός ως έλεγχος ροής. Ο δέκτης διατηρεί ένα παράθυρο λήψης, ενώ ο αποστολέας διατηρεί ένα παράθυρο αποστολής. Θα πρέπει να σημειωθεί ότι αυτά τα παράθυρα είναι μόνο για μία μόνο σύνδεση TCP και όχι όλες οι συνδέσεις μοιράζονται ένα παράθυρο.

Το TCP παρέχει έλεγχο ροής χρησιμοποιώντας μια μεταβλητή για ένα παράθυρο λήψης. Το παράθυρο λήψης δίνει στον αποστολέα μια ένδειξη για το πόσο διαθέσιμος χώρος cache είναι ακόμα διαθέσιμος. Ο αποστολέας ελέγχει το ποσό των δεδομένων που αποστέλλονται σύμφωνα με την πραγματική ικανότητα αποδοχής του δέκτη.

Ο κεντρικός υπολογιστής του δέκτη ειδοποιεί τον αποστολέα του μεγέθους των δεδομένων που μπορεί να λάβει και ο αποστολέας στέλνει μέχρι αυτό το όριο. Αυτό το όριο είναι το μέγεθος του παραθύρου, θυμηθείτε την κεφαλίδα TCP; Υπάρχει ένα πεδίο παραθύρου λήψης, το οποίο χρησιμοποιείται για να υποδείξει τον αριθμό των bytes που ο δέκτης είναι ικανός ή πρόθυμος να λάβει.

Ο κεντρικός υπολογιστής θα στείλει περιοδικά ένα πακέτο ανιχνευτή παραθύρου, το οποίο χρησιμοποιείται για να ανιχνεύσει εάν ο κεντρικός υπολογιστής δέκτη εξακολουθεί να είναι σε θέση να δεχτεί δεδομένα. Όταν το buffer του δέκτη κινδυνεύει να ξεπεράσει, το μέγεθος του παραθύρου έχει οριστεί σε μικρότερη τιμή για να καθοδηγήσει τον αποστολέα για τον έλεγχο της ποσότητας των αποστάσεων δεδομένων.

Εδώ είναι ένα διάγραμμα ελέγχου ροής δικτύου:

Έλεγχος κυκλοφορίας

Έλεγχος συμφόρησης δικτύου
Πριν από την εισαγωγή ελέγχου συμφόρησης, πρέπει να κατανοήσουμε ότι εκτός από το παράθυρο λήψης και το παράθυρο αποστολής, υπάρχει επίσης ένα παράθυρο συμφόρησης, το οποίο χρησιμοποιείται κυρίως για την επίλυση του προβλήματος με ποιο ρυθμό αρχίζει ο αποστολέας στέλνοντας δεδομένα στο παράθυρο λήψης. Ως εκ τούτου, το παράθυρο συμφόρησης διατηρείται επίσης από τον αποστολέα TCP. Χρειαζόμαστε έναν αλγόριθμο για να αποφασίσουμε πόσα δεδομένα είναι κατάλληλα για αποστολή, δεδομένου ότι η αποστολή πολύ λίγα ή πάρα πολλά δεδομένα δεν είναι ιδανικά, εξ ου και η έννοια του παραθύρου συμφόρησης.

Στον προηγούμενο έλεγχο ροής δικτύου, αυτό που αποφεύγαμε ήταν ο αποστολέας που γεμίζει την προσωρινή μνήμη του δέκτη με δεδομένα, αλλά δεν γνωρίζαμε τι συνέβαινε στο δίκτυο. Συνήθως, τα δίκτυα υπολογιστών βρίσκονται σε κοινό περιβάλλον. Ως αποτέλεσμα, μπορεί να υπάρχει συμφόρηση δικτύου λόγω επικοινωνίας μεταξύ άλλων οικοδεσποτών.

Όταν το δίκτυο έχει συμφόρηση, εάν εξακολουθεί να αποστέλλεται ένας μεγάλος αριθμός πακέτων, μπορεί να προκαλέσει προβλήματα όπως η καθυστέρηση και η απώλεια πακέτων. Σε αυτό το σημείο, το TCP θα επαναμεταδίδει τα δεδομένα, αλλά η αναμετάδοση θα αυξήσει το βάρος στο δίκτυο, με αποτέλεσμα μεγαλύτερες καθυστερήσεις και περισσότερες απώλειες πακέτων. Αυτό μπορεί να μπει σε έναν φαύλο κύκλο και να συνεχίσει να αυξάνεται.

Έτσι, το TCP δεν μπορεί να αγνοήσει τι συμβαίνει στο δίκτυο. Όταν το δίκτυο έχει συμφόρηση, η TCP θυσιάζει τον εαυτό του μειώνοντας το ποσό των δεδομένων που στέλνει.

Επομένως, προτείνεται ο έλεγχος συμφόρησης, ο οποίος στοχεύει στην αποφυγή της πλήρωσης ολόκληρου του δικτύου με δεδομένα από τον αποστολέα. Για να ρυθμίσει την ποσότητα των δεδομένων που πρέπει να στείλει ο αποστολέας, το TCP ορίζει μια έννοια που ονομάζεται παράθυρο συμφόρησης. Ο αλγόριθμος ελέγχου συμφόρησης θα ρυθμίσει το μέγεθος του παραθύρου συμφόρησης σύμφωνα με τον βαθμό συμφόρησης του δικτύου, έτσι ώστε να ελέγχει την ποσότητα των δεδομένων που αποστέλλονται από τον αποστολέα.

Τι είναι ένα παράθυρο συμφόρησης; Τι έχει να κάνει με το παράθυρο αποστολής;

Το παράθυρο συμφόρησης είναι μια μεταβλητή κατάστασης που διατηρείται από τον αποστολέα που καθορίζει την ποσότητα των δεδομένων που μπορεί να στείλει ο αποστολέας. Το παράθυρο συμφόρησης αλλάζει δυναμικά σύμφωνα με το επίπεδο συμφόρησης του δικτύου.

Το παράθυρο αποστολής είναι ένα συμφωνημένο μέγεθος παραθύρου μεταξύ του αποστολέα και του δέκτη που υποδεικνύει το ποσό των δεδομένων που μπορεί να λάβει ο δέκτης. Το παράθυρο συμφόρησης και το παράθυρο αποστολής σχετίζονται. Το παράθυρο αποστολής είναι συνήθως ίσο με το ελάχιστο των παραθύρων συμφόρησης και λήψης, δηλαδή SWND = min (CWND, RWND).

Το παράθυρο συμφόρησης CWND αλλάζει ως εξής:

Εάν δεν υπάρχει συμφόρηση στο δίκτυο, δηλαδή, δεν υπάρχει χρονικό όριο αναμετάδοσης, το παράθυρο συμφόρησης αυξάνεται.

Εάν υπάρχει συμφόρηση στο δίκτυο, το παράθυρο συμφόρησης μειώνεται.

Ο αποστολέας καθορίζει εάν το δίκτυο έχει συμφόρηση παρατηρώντας εάν το πακέτο επιβεβαίωσης ACK λαμβάνεται εντός της καθορισμένης ώρας. Εάν ο αποστολέας δεν λάβει το πακέτο επιβεβαίωσης ACK εντός της καθορισμένης ώρας, θεωρείται ότι το δίκτυο έχει συμφόρηση.

Εκτός από το παράθυρο συμφόρησης, είναι καιρός να συζητήσουμε τον αλγόριθμο ελέγχου συμφόρησης TCP. Ο αλγόριθμος ελέγχου συμφόρησης TCP αποτελείται από τρία κύρια μέρη:

Αργή εκκίνηση:Αρχικά, το παράθυρο συμφόρησης CWND είναι σχετικά μικρό και ο αποστολέας αυξάνει εκθετικά το παράθυρο συμφόρησης για να προσαρμοστεί γρήγορα στην ικανότητα του δικτύου.
Αποφυγή συμφόρησης:Αφού το παράθυρο συμφόρησης υπερβαίνει ένα συγκεκριμένο όριο, ο αποστολέας αυξάνει το παράθυρο συμφόρησης με γραμμικό τρόπο για να επιβραδύνει τον ρυθμό ανάπτυξης του παραθύρου συμφόρησης και να αποφευχθεί η υπερφόρτωση του δικτύου.
Γρήγορη ανάκαμψη:Εάν συμβεί συμφόρηση, ο αποστολέας μισεί το παράθυρο συμφόρησης και εισέρχεται στην κατάσταση γρήγορης ανάκαμψης για να καθορίσει τη θέση της ανάκτησης δικτύου μέσω των ληφθέντων διπλών ACKs και στη συνέχεια συνεχίζει να αυξάνει το παράθυρο συμφόρησης.

Αργή εκκίνηση
Όταν δημιουργηθεί μια σύνδεση TCP, το παράθυρο συμφόρησης CWND αρχικά ρυθμίζεται σε ελάχιστη τιμή MSS (Μέγιστο μέγεθος τμήματος). Με αυτόν τον τρόπο, ο αρχικός ρυθμός αποστολής είναι περίπου Bytes/RTT MSS/RTT. Το πραγματικό διαθέσιμο εύρος ζώνης είναι συνήθως πολύ μεγαλύτερο από το MSS/RTT, οπότε το TCP θέλει να βρει το βέλτιστο ρυθμό αποστολής, το οποίο μπορεί να επιτευχθεί με αργή εκκίνηση.

Στη διαδικασία αργής εκκίνησης, η τιμή του παραθύρου συμφόρησης CWND θα αρχικοποιηθεί σε 1 MSS και κάθε φορά που αναγνωρίζεται το τμήμα μεταδιδόμενου πακέτου, η τιμή του CWND θα αυξηθεί από ένα MSS, δηλαδή η τιμή του CWND θα γίνει 2 mss. Μετά από αυτό, η τιμή του CWND διπλασιάζεται για κάθε επιτυχή μετάδοση ενός τμήματος πακέτων και ούτω καθεξής. Η συγκεκριμένη διαδικασία ανάπτυξης παρουσιάζεται στο ακόλουθο σχήμα.

 Έλεγχος συμφόρησης δικτύου

Ωστόσο, το ποσοστό αποστολής δεν μπορεί πάντα να αναπτυχθεί. Η ανάπτυξη πρέπει να τελειώσει κάποια στιγμή. Έτσι, πότε το τέλος της αύξησης του ρυθμού αποστολής; Η αργή εκκίνηση τυπικά τελειώνει την αύξηση του ρυθμού αποστολής με έναν από τους διάφορους τρόπους:

Ο πρώτος τρόπος είναι η περίπτωση της απώλειας πακέτων κατά τη διάρκεια της διαδικασίας αποστολής αργής εκκίνησης. Όταν εμφανιστεί μια απώλεια πακέτων, το TCP θέτει το παράθυρο συμφόρησης του αποστολέα CWND σε 1 και επανεκκινεί τη διαδικασία αργής εκκίνησης. Σε αυτό το σημείο εισάγεται μια έννοια του SSTHRESH SLENT STRESHOLD SSTHRESH, της οποίας η αρχική τιμή είναι το ήμισυ της αξίας του CWND που δημιουργεί απώλεια πακέτων. Δηλαδή, όταν ανιχνεύεται συμφόρηση, η τιμή του Ssthresh είναι το ήμισυ της τιμής του παραθύρου.

Ο δεύτερος τρόπος είναι να συσχετίσουμε άμεσα με την τιμή του SSTHRESH του κατωφλίου αργής εκκίνησης. Δεδομένου ότι η τιμή του SSTHRESH είναι το ήμισυ της τιμής του παραθύρου όταν ανιχνεύεται συμφόρηση, μπορεί να εμφανιστεί απώλεια πακέτων με κάθε διπλασιασμό όταν το CWND είναι μεγαλύτερη από το Ssthresh. Ως εκ τούτου, είναι καλύτερο να ρυθμίσετε το CWND στο SSTHRESH, το οποίο θα προκαλέσει το TCP να μεταβεί σε λειτουργία ελέγχου συμφόρησης και να τερματίσει αργή εκκίνηση.

Ο τελευταίος τρόπος με τον οποίο η αργή εκκίνηση μπορεί να τελειώσει είναι εάν εντοπιστούν τρεις περιττές ACKs, η TCP εκτελεί μια γρήγορη αναμετάδοση και εισέρχεται στην κατάσταση ανάκτησης. (Εάν δεν είναι σαφές γιατί υπάρχουν τρία πακέτα ACK, θα εξηγηθεί χωριστά στον μηχανισμό αναμετάδοσης.)

Αποφυγή συμφόρησης
Όταν το TCP εισέρχεται στην κατάσταση ελέγχου συμφόρησης, το CWND έχει οριστεί στο μισό κατώτατο όριο συμφόρησης Ssthresh. Αυτό σημαίνει ότι η τιμή του CWND δεν μπορεί να διπλασιαστεί κάθε φορά που λαμβάνεται ένα τμήμα πακέτων. Αντ 'αυτού, υιοθετείται μια σχετικά συντηρητική προσέγγιση στην οποία η τιμή του CWND αυξάνεται μόνο από ένα MSS (μέγιστο μήκος τμήματος πακέτων) μετά την ολοκλήρωση κάθε μετάδοσης. Για παράδειγμα, ακόμη και αν αναγνωρίζονται 10 τμήματα πακέτων, η αξία του CWND θα αυξηθεί μόνο κατά ένα MSS. Πρόκειται για ένα μοντέλο γραμμικής ανάπτυξης και έχει επίσης ένα ανώτερο όριο στην ανάπτυξη. Όταν εμφανιστεί απώλεια πακέτων, η τιμή του CWND μεταβάλλεται σε MSS και η τιμή του SSTHRESH έχει οριστεί στο μισό CWND. Ή θα σταματήσει επίσης την ανάπτυξη του MSS όταν λαμβάνονται 3 περιττές αποκρίσεις ACK. Εάν εξακολουθούν να λαμβάνονται τρεις πλεονάζουσες ACK μετά την κατά το ήμισυ την τιμή του CWND, η τιμή του Ssthresh καταγράφεται ως το ήμισυ της τιμής του CWND και εισάγεται η κατάσταση γρήγορης ανάκαμψης.

Γρήγορη ανάκτηση
Στην κατάσταση γρήγορης ανάκαμψης, η τιμή του παραθύρου συμφόρησης CWND αυξάνεται κατά ένα MSS για κάθε ληφθείσα περιττή ACK, δηλαδή ACK που δεν φτάνει σε σειρά. Αυτό είναι για να χρησιμοποιηθεί τα τμήματα πακέτων που έχουν μεταδοθεί με επιτυχία στο δίκτυο για τη βελτίωση της απόδοσης μετάδοσης όσο το δυνατόν περισσότερο.

Όταν φτάνει ένα ACK του τμήματος Lost Packet, το TCP μειώνει την τιμή του CWND και στη συνέχεια εισέρχεται στην κατάσταση αποφυγής συμφόρησης. Αυτό είναι για τον έλεγχο του μεγέθους του παραθύρου συμφόρησης και την αποφυγή περαιτέρω αύξησης της συμφόρησης του δικτύου.

Εάν ένα χρονικό όριο εμφανιστεί μετά την κατάσταση ελέγχου της συμφόρησης, η κατάσταση του δικτύου γίνεται πιο σοβαρή και η TCP μεταναστεύει από την κατάσταση αποφυγής συμφόρησης στην κατάσταση αργής εκκίνησης. Σε αυτή την περίπτωση, η τιμή του παραθύρου συμφόρησης CWND έχει οριστεί σε 1 MSS, το μέγιστο μήκος του τμήματος πακέτων και η τιμή του κατώτατου ορίου SSHERSHOLD έχει ρυθμιστεί στο μισό του CWND. Ο σκοπός αυτού είναι να αυξήσει ξανά το μέγεθος του παραθύρου συμφόρησης μετά την ανάκτηση του δικτύου για να εξισορροπήσει τον ρυθμό μετάδοσης και τον βαθμό συμφόρησης του δικτύου.

Περίληψη
Ως αξιόπιστο πρωτόκολλο μεταφοράς, το TCP εφαρμόζει αξιόπιστη μεταφορά με αριθμό ακολουθίας, αναγνώριση, έλεγχο αναμετάδοσης, διαχείριση σύνδεσης και έλεγχο παραθύρων. Μεταξύ αυτών, ο μηχανισμός ελέγχου ροής ελέγχει την ποσότητα των δεδομένων που αποστέλλονται από τον αποστολέα σύμφωνα με την πραγματική ικανότητα λήψης του δέκτη, η οποία αποφεύγει τα προβλήματα της συμφόρησης δικτύου και της υποβάθμισης της απόδοσης. Ο μηχανισμός ελέγχου συμφόρησης αποφεύγει την εμφάνιση συμφόρησης δικτύου ρυθμίζοντας την ποσότητα των δεδομένων που αποστέλλονται από τον αποστολέα. Οι έννοιες του παραθύρου συμφόρησης και του παραθύρου αποστολής σχετίζονται μεταξύ τους και η ποσότητα των δεδομένων στον αποστολέα ελέγχεται με δυναμική προσαρμογή του μεγέθους του παραθύρου συμφόρησης. Η αργή εκκίνηση, η αποφυγή συμφόρησης και η γρήγορη ανάκτηση είναι τα τρία κύρια μέρη του αλγορίθμου ελέγχου συμφόρησης TCP, τα οποία προσαρμόζουν το μέγεθος του παραθύρου συμφόρησης μέσω διαφορετικών στρατηγικών για να προσαρμοστούν στον βαθμό ικανότητας και συμφόρησης του δικτύου.

Στην επόμενη ενότητα, θα εξετάσουμε λεπτομερώς τον μηχανισμό αναμετάδοσης του TCP. Ο μηχανισμός αναμετάδοσης είναι ένα σημαντικό μέρος του TCP για την επίτευξη αξιόπιστης μετάδοσης. Εξασφαλίζει την αξιόπιστη μετάδοση δεδομένων με αναμετάδοση χαμένων, αλλοιωμένων ή καθυστερημένων δεδομένων. Η αρχή της εφαρμογής και η στρατηγική του μηχανισμού αναμετάδοσης θα εισαχθούν και θα αναλυθούν λεπτομερώς στο επόμενο τμήμα. Μείνετε συντονισμένοι!


Χρόνος δημοσίευσης: Φεβ-24-2025