Βασικά μυστήρια των συνδέσεων 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) και στη συνέχεια τοποθετεί αυτόν τον αριθμό στο πεδίο "Serial number" της κεφαλίδας TCP. Στη συνέχεια, ο διακομιστής εισάγει client_isn + 1 στο πεδίο "Αριθμός επιβεβαίωσης" και ορίζει τα bit SYN και ACK σε 1. Τέλος, ο διακομιστής στέλνει το πακέτο στον πελάτη, το οποίο δεν περιέχει δεδομένα επιπέδου εφαρμογής (και κανένα στοιχείο για τον διακομιστή για αποστολή). Αυτή τη στιγμή, ο διακομιστής βρίσκεται σε κατάσταση SYN-RCVD.

Πακέτο ACK

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

Μόλις ο διακομιστής λάβει το πακέτο απάντησης από τον πελάτη, μεταβαίνει επίσης στην κατάσταση 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 στον διακομιστή για να υποδείξει ότι η σύνδεση έχει δημιουργηθεί με επιτυχία. Έτσι, τα δύο μέρη βρίσκονται στην κατάσταση ΕΓΚΑΤΑΣΤΑΣΗ και μπορούν να αρχίσουν να στέλνουν δεδομένα μεταξύ τους.

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


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