Βασικά Μυστήρια των Συνδέσεων TCP του Διαμεσολαβητή Πακέτων Δικτύου: Απομυθοποίησε την ανάγκη για Τριπλή Χειραψία

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

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

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

 Τριμερής χειραψία TCP

Ας ρίξουμε μια πιο προσεκτική ματιά στα πακέτα TCP που αποστέλλονται σε κάθε σύνδεση.

Αρχικά, τόσο ο υπολογιστής-πελάτης όσο και ο διακομιστής είναι ΚΛΕΙΣΤΟΙ. Πρώτον, ο διακομιστής ακούει ενεργά σε μια θύρα και βρίσκεται σε κατάσταση LISTEN, πράγμα που σημαίνει ότι ο διακομιστής πρέπει να ξεκινήσει. Στη συνέχεια, ο υπολογιστής-πελάτης είναι έτοιμος να ξεκινήσει την πρόσβαση στην ιστοσελίδα. Πρέπει να δημιουργήσει μια σύνδεση με τον διακομιστή. Η μορφή του πρώτου πακέτου σύνδεσης έχει ως εξής:

 Πακέτο SYN

Όταν ένας υπολογιστής-πελάτης ξεκινά μια σύνδεση, δημιουργεί έναν τυχαίο αρχικό αριθμό ακολουθίας (client_isn) και τον τοποθετεί στο πεδίο "Αριθμός ακολουθίας" της κεφαλίδας TCP. Ταυτόχρονα, ο υπολογιστής-πελάτης ορίζει τη θέση της σημαίας SYN σε 1 για να υποδείξει ότι το εξερχόμενο πακέτο είναι πακέτο SYN. ​​Ο υπολογιστής-πελάτης υποδεικνύει ότι επιθυμεί να δημιουργήσει μια σύνδεση με τον διακομιστή στέλνοντας το πρώτο πακέτο SYN στον διακομιστή. Αυτό το πακέτο δεν περιέχει δεδομένα επιπέδου εφαρμογής (δηλαδή, δεδομένα που στάλθηκαν). Σε αυτό το σημείο, η κατάσταση του υπολογιστή-πελάτη επισημαίνεται ως SYN-SENT.

Πακέτο SYN+ACK

Όταν ένας διακομιστής λαμβάνει ένα πακέτο SYN από έναν πελάτη, αρχικοποιεί τυχαία τον δικό του σειριακό αριθμό (server_isn) και στη συνέχεια τοποθετεί αυτόν τον αριθμό στο πεδίο "Σειριακός αριθμός" της κεφαλίδας TCP. Στη συνέχεια, ο διακομιστής εισάγει client_isn + 1 στο πεδίο "Αριθμός επιβεβαίωσης" και ορίζει τόσο το bit SYN όσο και το bit ACK σε 1. Τέλος, ο διακομιστής στέλνει το πακέτο στον πελάτη, το οποίο δεν περιέχει δεδομένα επιπέδου εφαρμογής (και δεν περιέχει δεδομένα για αποστολή από τον διακομιστή). Αυτή τη στιγμή, ο διακομιστής βρίσκεται σε κατάσταση SYN-RCVD.

Πακέτο ACK

Μόλις ο πελάτης λάβει το πακέτο από τον διακομιστή, πρέπει να εκτελέσει τις ακόλουθες βελτιστοποιήσεις για να ανταποκριθεί στο τελικό πακέτο απάντησης: Πρώτον, ο πελάτης ορίζει το bit ACK της κεφαλίδας TCP του πακέτου απάντησης σε 1. Δεύτερον, ο πελάτης εισάγει την τιμή server_isn + 1 στο πεδίο "Επιβεβαίωση αριθμού απάντησης". Τέλος, ο πελάτης στέλνει το πακέτο στον διακομιστή. Αυτό το πακέτο μπορεί να μεταφέρει δεδομένα από τον πελάτη στον διακομιστή. Μετά την ολοκλήρωση αυτών των λειτουργιών, ο πελάτης θα εισέλθει στην κατάσταση ESTABLISHED.

Μόλις ο διακομιστής λάβει το πακέτο απάντησης από τον πελάτη, μεταβαίνει επίσης στην κατάσταση ESTABLISHED.

Όπως μπορείτε να δείτε από την παραπάνω διαδικασία, κατά την εκτέλεση μιας τριμερούς χειραψίας, η τρίτη χειραψία επιτρέπεται να μεταφέρει δεδομένα, αλλά οι δύο πρώτες όχι. Αυτή είναι μια ερώτηση που τίθεται συχνά στις συνεντεύξεις. Μόλις ολοκληρωθεί η τριμερής χειραψία, και τα δύο μέρη εισέρχονται στην κατάσταση ΕΓΚΑΘΟΡΙΣΜΕΝΗ, υποδεικνύοντας ότι η σύνδεση έχει δημιουργηθεί με επιτυχία, οπότε ο πελάτης και ο διακομιστής μπορούν να αρχίσουν να στέλνουν δεδομένα ο ένας στον άλλον.

Γιατί τρεις χειραψίες; Όχι δύο, τέσσερις φορές;
Η συνηθισμένη απάντηση είναι: «Επειδή η τριπλή χειραψία εγγυάται την ικανότητα λήψης και αποστολής». Αυτή η απάντηση είναι σωστή, αλλά είναι μόνο ο επιφανειακός λόγος, δεν προβάλλει τον κύριο λόγο. Στη συνέχεια, θα αναλύσω τους λόγους της τριπλής χειραψίας από τρεις πτυχές για να εμβαθύνω την κατανόησή μας σε αυτό το ζήτημα.

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

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

Η τριμερής χειραψία αποφεύγει τις ιστορικές διπλότυπες συνδέσεις

Όταν ένας υπολογιστής-πελάτης στέλνει πολλά πακέτα δημιουργίας σύνδεσης SYN διαδοχικά, σε περιπτώσεις όπως η συμφόρηση δικτύου, ενδέχεται να συμβούν τα ακόλουθα:

1- Τα παλιά πακέτα SYN φτάνουν στον διακομιστή πριν από τα πιο πρόσφατα πακέτα SYN.
2- Ο διακομιστής θα απαντήσει με ένα πακέτο SYN + ACK στον πελάτη αφού λάβει το παλιό πακέτο SYN.
3- Όταν ο πελάτης λαμβάνει το πακέτο SYN + ACK, προσδιορίζει ότι η σύνδεση είναι μια ιστορική σύνδεση (λήξη αριθμού ακολουθίας ή χρονικό όριο) σύμφωνα με το δικό της περιβάλλον και στη συνέχεια στέλνει το πακέτο RST στον διακομιστή για να διακόψει τη σύνδεση.

Με μια σύνδεση διπλής χειραψίας, δεν υπάρχει τρόπος να προσδιοριστεί εάν η τρέχουσα σύνδεση είναι μια ιστορική σύνδεση. Η τριμερής χειραψία επιτρέπει στον πελάτη να προσδιορίσει εάν η τρέχουσα σύνδεση είναι μια ιστορική σύνδεση με βάση τα συμφραζόμενα, όταν είναι έτοιμος να στείλει το τρίτο πακέτο:

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

Επομένως, ο κύριος λόγος που το TCP χρησιμοποιεί την τριμερή χειραψία είναι ότι αρχικοποιεί τη σύνδεση για να αποτρέψει τις ιστορικές συνδέσεις.

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

Ο δέκτης μπορεί να εξαλείψει τα διπλότυπα δεδομένα και να διασφαλίσει την ακρίβεια των δεδομένων.

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

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

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

Συγχρονίστε τους αρχικούς σειριακούς αριθμούς και των δύο μερών

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

Λόγος 3: Αποφύγετε τη σπατάλη πόρων
Εάν υπάρχει μόνο μια "διπλή χειραψία", όταν το αίτημα SYN του πελάτη είναι αποκλεισμένο στο δίκτυο, ο πελάτης δεν μπορεί να λάβει το πακέτο ACK που στάλθηκε από τον διακομιστή, επομένως το SYN θα αποσταλεί ξανά. Ωστόσο, επειδή δεν υπάρχει τρίτη χειραψία, ο διακομιστής δεν μπορεί να προσδιορίσει εάν ο πελάτης έλαβε μια επιβεβαίωση ACK για τη δημιουργία της σύνδεσης. Επομένως, ο διακομιστής μπορεί να δημιουργήσει μια σύνδεση μόνο προληπτικά μετά τη λήψη κάθε αιτήματος SYN. ​​Αυτό οδηγεί στα εξής:

Σπατάλη πόρων: Εάν το αίτημα SYN του πελάτη μπλοκαριστεί, με αποτέλεσμα την επαναλαμβανόμενη μετάδοση πολλαπλών πακέτων SYN, ο διακομιστής θα δημιουργήσει πολλαπλές περιττές και μη έγκυρες συνδέσεις μετά τη λήψη του αιτήματος. Αυτό οδηγεί σε περιττή σπατάλη πόρων διακομιστή.

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

Αποφύγετε τη σπατάλη πόρων

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

Περίληψη
ΟΜεσίτης Πακέτων ΔικτύουΗ δημιουργία σύνδεσης TCP γίνεται με τριμερή χειραψία. Κατά τη διάρκεια της τριμερούς χειραψίας, ο πελάτης στέλνει πρώτα ένα πακέτο με τη σημαία SYN στον διακομιστή, υποδεικνύοντας ότι θέλει να δημιουργήσει μια σύνδεση. Αφού λάβει το αίτημα από τον πελάτη, ο διακομιστής απαντά ένα πακέτο με σημαίες SYN και ACK στον πελάτη, υποδεικνύοντας ότι το αίτημα σύνδεσης έχει γίνει δεκτό, και στέλνει τον δικό του αρχικό αριθμό ακολουθίας. Τέλος, ο πελάτης απαντά με μια σημαία ACK στον διακομιστή για να υποδείξει ότι η σύνδεση έχει δημιουργηθεί με επιτυχία. Έτσι, τα δύο μέρη βρίσκονται στην κατάσταση ESTABLISHED και μπορούν να ξεκινήσουν την αποστολή δεδομένων μεταξύ τους.

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


Ώρα δημοσίευσης: 08 Ιανουαρίου 2025