Κατά τα προηγούμενα χρόνια του Διαδικτύου, το Πρωτόκολλο Διαδικτύου (IP) ήταν το μόνο πρωτόκολλο που χρησιμοποιούσαν οι άνθρωποι για να συνδεθούν στο Διαδίκτυο. Το πρόβλημα με την IP ήταν ότι μπορούσες να στείλεις ένα μήνυμα και να μην είσαι σίγουρος αν ο παραλήπτης θα το λάβει ή όχι. Για το λόγο αυτό δημιουργήθηκε το TCP/IP.

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

Τι είναι η τριπλή χειραψία;

Πίστωση εικόνας: Fleshgrinder/Wikimedia

Μια τριπλή χειραψία (TCP/IP handshake) είναι οι τρεις πρώτες αλληλεπιδράσεις μεταξύ ενός πελάτη και ενός διακομιστή που προσπαθεί να δημιουργήσει μια σύνδεση TCP. Αυτές οι αρχικές αλληλεπιδράσεις είναι απαραίτητες για τη δημιουργία μιας ασφαλούς σύνδεσης. Σε αυτή τη φάση, τόσο ο πελάτης όσο και ο διακομιστής θα συμφωνήσουν σχετικά με τις παραμέτρους που θα χρησιμοποιήσουν για τον έλεγχο και την επαλήθευση των εισερχόμενων και εξερχόμενων πακέτων δεδομένων. Αυτές οι παράμετροι θα έχουν τη μορφή τμημάτων TCP.

instagram viewer

Τι είναι ένα τμήμα TCP;

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

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

Πίστωση εικόνας: Ere/Wikimedia

Σημειώστε ότι η παραπάνω εικόνα είναι μόνο για TCP. Ένα πλήρες τμήμα TCP/IP απαιτεί και τα δύο διευθύνσεις IP από τον αποστολέα και τον παραλήπτη πάνω από το τμήμα TCP παραπάνω.

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

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

Για μια τριπλή χειραψία, ο αποστολέας θα πρέπει να συμπληρώσει τα ακόλουθα:

  • Πηγή Λιμάνι: Προσδιορίζει τη θύρα του αποστολέα
  • Λιμάνι προορισμού: Προσδιορίζει τη θύρα του δέκτη
  • Αριθμός ακολουθίας: Υποδεικνύει την ακολουθία τμημάτων
  • Αριθμός επιβεβαίωσης: Σημαίνει ότι ένα τμήμα έχει αναγνωριστεί προσθέτοντας ένα στον δεδομένο αριθμό σειράς

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

  1. ΣΥΝ: Δίνει έναν αύξοντα αριθμό. Αυτός ο αριθμός ακολουθίας θα χρησιμοποιηθεί για την καταμέτρηση της ακολουθίας όλων των εισερχόμενων τμημάτων για το υπόλοιπο της αλληλεπίδρασης.
  2. ACK: Υποδεικνύει ότι ο παραλήπτης του αριθμού SYN αποδέχεται το αίτημα σύνδεσης προσθέτοντας ένα (1) στον αριθμό SYN που δίνεται.

Τώρα που ξέρετε τι είναι ένα τμήμα TCP, ας δούμε πώς χρησιμοποιείται σε μια τριπλή χειραψία.

Πώς λειτουργεί μια τριπλή χειραψία

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

Αρχικά, ο πελάτης στέλνει ένα καθαρό τμήμα SYN υποδεικνύοντας ότι θέλει σύνδεση. Δεύτερον, ο διακομιστής αποκρίνεται με ένα τμήμα SYN-ACK που σημαίνει ότι έχει αναγνωρίσει το αίτημα και στέλνει τον δικό του αριθμό SYN για επιβεβαίωση από τον πελάτη. Τρίτον, ο πελάτης στέλνει ένα τμήμα ACK στον διακομιστή για να τον ειδοποιήσει ότι ο αριθμός SYN του διακομιστή έχει επιβεβαιωθεί και θα χρησιμοποιηθεί για περαιτέρω σύνδεση.

Μια τριπλή χειραψία θα μοιάζει κάπως έτσι:

Πίστωση ενεργητικού: Fleshgrinder/Wikimedia

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

Βήμα 1: Ο πελάτης στέλνει ένα τμήμα SYN

Πίστωση ενεργητικού: Fleshgrinder/Wikimedia

Ο πελάτης στέλνει μια σύνδεση αιτήματος στέλνοντας ένα τμήμα SYN στον διακομιστή. Ο πελάτης χρησιμοποιεί τη διεύθυνση IP του πελάτη για να εντοπίσει τον διακομιστή και να στείλει το τμήμα TCP.

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

Και με αυτό, ένα τμήμα SYN/αίτημα θα πρέπει να μοιάζει με αυτό:

Εικόνα από συγγραφέα 

Η θύρα πελάτη είναι ένας τυχαίος αριθμός μεταξύ 49152 και 65536. Αυτό το εύρος θυρών είναι το συμφωνημένο εύρος που μπορούν να χρησιμοποιήσουν δυναμικά οι δημόσιες συσκευές για να συνδεθούν στο διαδίκτυο. Οι περιοχές θυρών από 1024 έως 49151 είναι ιδιωτικές. Θα πρέπει να εγγραφούν από μια οντότητα για να χρησιμοποιήσουν μια θύρα εντός του καθορισμένου εύρους. Οι αριθμοί θύρας κάτω από το 1024 είναι θύρες που προορίζονται για διάφορες λειτουργίες και πρωτόκολλα Διαδικτύου όπως FTP (θύρα 20), SMTP (θύρα 25), DNS (θύρα 53) και HTTP (θύρα 80).

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

Σημειώστε τον αύξοντα αριθμό καθώς προχωράμε στα βήματα. Επί του παρόντος, είναι 000000000. Προς το παρόν δεν υπάρχει αριθμός επιβεβαίωσης, καθώς δεν υπάρχει κάτι που πρέπει να επιβεβαιωθεί.

Βήμα 2: Απαντήσεις διακομιστή με τμήμα SYN-ACK

Πίστωση ενεργητικού: Fleshgrinder/Wikimedia

Μόλις ο διακομιστής λάβει ένα τμήμα SYN, θα ανταποκριθεί στέλνοντας ένα τμήμα ACK που περιέχει τον αριθμό επιβεβαίωσης. Ο αριθμός επιβεβαίωσης θα είναι ο αριθμός σειράς του πελάτη συν ένα (1).

Εικόνα από τον συγγραφέα

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

Τώρα, κοιτάξτε τον αριθμό επιβεβαίωσης. Είναι 0000000001, που είναι ο αύξων αριθμός του πελάτη (0000000000) συν ένα (1). Αυτός είναι ο τρόπος με τον οποίο παρακολουθείται ένα τμήμα. Ας υποθέσουμε ότι ο πελάτης έλαβε μια απάντηση τμήματος ACK όπου ο αριθμός επιβεβαίωσης είναι 0000000002. Αυτό θα έδειχνε στον πελάτη ότι το τμήμα 0000000001 έλειπε και ότι ο πελάτης θα πρέπει να περιμένει μέχρι να φτάσει ώστε να μην αντιμετωπίζετε απώλεια πακέτων.

Όπως μπορείτε να δείτε, ενεργοποιούνται δύο bit σημαίας—SYN και ACK.

Εκτός από την αναγνώριση του αριθμού σειράς του πελάτη, ο διακομιστής θα στείλει επίσης τον δικό του αριθμό σειράς για να αναγνωρίσει τον αριθμό σειράς του διακομιστή συν ένα (1). Στο παράδειγμά μας, χρησιμοποιήσαμε το 1111111111 ως τον αριθμό σειράς του διακομιστή. Και πάλι, στον πραγματικό κόσμο, αυτός ο αριθμός είναι τυχαίος.

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

Βήμα 3: Ο πελάτης απαντά με ένα τμήμα ACK

Πίστωση ενεργητικού: Fleshgrinder/Wikimedia

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

Εικόνα από συγγραφέα

Το τελικό τμήμα είναι ένα τμήμα ACK από τον πελάτη.

Όπως μπορείτε, ο πελάτης θα αναγνωρίσει τον αριθμό σειράς του διακομιστή απαντώντας με τον αριθμό σειράς του διακομιστή (1111111111) συν ένα (1), που είναι 1111111112.

Ο υπολογιστής-πελάτης και ο διακομιστής δεν θα στέλνουν πλέον έναν αριθμό σειράς, καθώς η έναρξη της ακολουθίας έχει ήδη επιβεβαιωθεί. Και τα δύο μέρη, ωστόσο, θα αναμένουν τμήματα επιβεβαίωσης με συνεχείς αριθμούς ακολουθίας συν ένα (1) και τα αριθμητικά byte σε όλη την αλληλεπίδραση. Σε αυτήν την περίπτωση, ο πελάτης αναμένει ότι η επόμενη απόκριση διακομιστή θα έχει ACK 0000000002 (αν δεν υπάρχουν συνημμένα δεδομένα).

Μετά από αυτό, καθιερώνεται η τριπλή χειραψία!

Κατανόηση του τρόπου λειτουργίας των συνδέσεων δικτύου

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

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

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

Και με αυτό, θα πρέπει να έχετε μια πολύ καλή ιδέα για το πώς λειτουργεί το TCP.