Λειτουργίες που επιτελεί το πρωτόκολλο TCP

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


  • Διευθυνσιοδότηση/Πολυπλεξία (Addressing/Multiplexing): Το πρωτόκολλο TCP χρησιμοποιείται σε διάφορες εφαρμογές. Επομένως, όπως και στο πρωτόκολλο UDP το σημαντικότερο έργο του TCP είναι η πολύπλεξη των δεδομένων που έλαβε από τις διάφορες εφαρμογές έτσι ώστε να είναι σε θέση να σταλθούν στην άλλη μεριά. Την ίδια στιγμή, αυτές οι εφαρμογές ή διεργασίες, αναγνωρίζονται με βάση των TCP θυρών τους. Το τμήμα διευθυνσιοδότησης του επιπέδου μεταφοράς του πρότυπου επικοινωνίας TCP/IP περιέχει αρκετές πληροφορίες για το πως αυτή η διευθυνσιοδότηση λειτουργεί.

  • Εγκαθίδρυση, διαχείριση και τερματισμός σύνδεσης (Connection Establishment, Management and Termination): To TCP παρέχει μια σειρά από διαδικασίες όπου οι συσκευές ακολουθούν για την διαπραγμάτευση και εγκαθίδρυση μιας TCP σύνδεσης όπου μπορούν να σταλθούν δεδομένα. Όταν αυτή εγκαθιδρυθεί, το TCP θα παρέχει λογική διαχείριση των συνδέσεων και χειρισμό των προβλημάτων που μπορεί να προκύψουν. Όταν μια συσκευή τερματίσει την TCP σύνδεση της, μια ειδική διαδικασία ακολουθείται για τον τερματισμό της.

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

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

  • Παροχή αξιοπιστίας και ποιότητας μετάδοσης υπηρεσιών (Providing Reliability and Transmission Quality Services): Το TCP περιέχει ένα σύνολο από υπηρεσίες και χαρακτηριστικών τα οποία δίνουν την δυνατότητα μια εφαρμογή να χρησιμοποιεί αξιόπιστη TCP σύνδεση. Αυτό σημαίνει ότι μια TCP εφαρμογή δεν χρειάζεται να την απασχολεί αν τα δεδομένα όντως στέλνονται στον παραλήπτη ή με την σωστή σειρά.

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

Συνεπώς αντιλαμβανόμαστε ότι το πρωτόκολλο TCP αναλαμβάνει σχεδόν οτιδήποτε μια εφαρμογή ζητήσει σε ένα ενδό-δίκτυο. Παρόλα αυτά υπάρχουν μερικοί περιορισμοί που οι σχεδιαστές του δεν εξέτασαν. Μεταξύ των αξιοσημείωτων λειτουργιών το TCP ΔΕΝ εκτελεί τα παρακάτω:


  • Καθορισμός εφαρμογής χρήστη: Το πρωτόκολλο TCP ορίζει το πρωτόκολλο μεταφοράς. Δεν περιγράφεται όμως συγκεκριμένα πως οι εφαρμογές μπορούν να χρησιμοποιήσουν το TCP.

  • Παροχή ασφάλειας: Το πρωτόκολλο TCP δεν παρέχει μηχανισμούς για να εξασφαλίσει την αυθεντικότητα ή την μυστικότητα των δεδομένων που μεταδίδονται. Εάν αυτές οι δυνατότητες χρειαστούν τότε πρέπει να χρησιμοποιηθούν άλλα πρωτόκολλα όπως για παράδειγμα το IPsec.

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

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


Πρωτόκολλο TCP: Βασικές αρχές και γενική λειτουργία

Σε αυτήν την παράγραφο θα περιγράψουμε μερικές από τις βασικές θεμελιώδεις λειτουργείες του TCP. Θα περιγράψουμε πως το TCP χειρίζεται τα δεδομένα, τις έννοιες ροών, κατακερματισμού και ακολουθίας. Θα περιγράψουμε επίσης τον αρκετά σημαντικό μηχανισμό κυλιόμενου παραθύρου του TCP (sliding window) που χρησιμοποιείται για επιβεβαιώσεις μηνυμάτων, αξιοπιστίας και ελέγχου ροής δεδομένων. Θα αναφέρουμε επίσης στο πως το πρωτόκολλο TCP χρησιμοποιεί της θύρες επικοινωνίας και πως εγκαθιδρύονται οι συνδέσεις. Τέλος θα περιγράψουμε τις πιο σημαντικές εφαρμογές που χρησιμοποιούν TCP θύρες επικοινωνίας και τις αντίστοιχες TCP θύρες που χρησιμοποιούν για εφαρμογές εξυπηρετητή.


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


  • Επεξεργασία ροής δεδομένων,
    κατακερματισμός σε τμήματα (segments) στο TCP
  • Για να χρησιμοποιηθεί ένα πρωτόκολλο όπως το UDP, πολλές εφαρμογές θα αναγκαστούν να διαιρέσουν τεχνητά τα δεδομένα τους σε διακριτά μηνύματα. Αυτό θα παρουσιάσει άμεσα νέα ζητήματα απαιτώντας περισσότερο φόρτο εργασίας στην εφαρμογή.

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

  • Βέβαια θα μπορούσαμε να φτιάχναμε ένα πρόγραμμα για να το κάνει αυτό, αλλά όλες αυτές οι λειτουργείες εμπεριέχονται στο TCP, οπότε κάτι τέτοιο δεν θα είχε νόημα.

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

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

  • Βέβαια το TCP πρέπει να μετατρέψει αυτά τα bytes και να τα προωθήσει στο πρωτόκολλο IP. Το IP είναι ένα πρωτόκολλο που βασίζεται στην προσανατολισμένη κίνηση των μηνυμάτων (message-oriented protocol) και όχι στην προσανατολισμένη κίνηση της ροής (stream-oriented). Συνεπώς το TCP πρέπει να πάρει αυτήν την ροή δεδομένων από την εκάστοτε εφαρμογή και να την διαιρέσει σε διακριτά μηνύματα για το πρωτόκολλο IP. Αυτά τα μηνύματα ονομάζονται ως TCP τμήματα (TCP segments).

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

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

  • Όταν μια TCP σύνδεση εγκαθιδρυθεί ένα πρωτόκολλο επιπέδου εφαρμογής στέλνει στο TCP μια σταθερή ροή από bytes η οποία δεν χρειάζεται να τροποποιηθεί. Το TCP παίρνει αυτήν την ροή από bytes και την τεμαχίζει σε τμήματα (segments) όπου το μέγεθος τους βασίζεται σε έναν αριθμό από διαφορετικές παραμέτρους. Αυτά τα τμήματα (segments) προωθούνται στο πρωτόκολλο IP, όπου εκεί ενθυλακώνονται σε IP πακέτα και μεταδίδονται.

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


Το μήκος ενός τμήματος (segment) καθορίζεται από δύο βασικούς παράγοντες:


  1. Ο πρώτος παράγοντας είναι να τεθεί ένα καθορισμένο όριο μήκους που θα πρέπει να έχει ένα τμήμα (segment) προκειμένου να αποτραπεί ένας περιττός κατακερματισμός στο IP πρωτόκολλο. Το μήκος ενός τμήματος (segment) καθορίζεται από το μέγιστο μήκος τμήματος (maximum segment size - MSS) το οποίο ορίζεται κατά την διάρκεια εγκαθίδρυσης μιας TCP σύνδεσης.

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



Σημαντική παρατήρηση


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


TCP Τμήμα (TCP Segment)

Το TCP είναι καταστασιακό πρωτόκολλο (statefull), δηλαδή καταγράφει την κατάσταση της επικοινωνίας κατά την διάρκεια μιας TCP συνόδου. Για να γίνουν όλα αυτά το TCP καταγράφει ποια πληροφορία έχει στείλει και ποια έχει επιβεβαιωθεί αντίστοιχα. Μια καταστασιακή σύνοδος ξεκινάει με την εγκαθίδρυση της συνόδου και καταλήγει με κλείσιμο και τερματισμό αυτής. Τα πακέτα του πρωτοκόλλου TCP καλούνται τμήματα (segments). Ένα από τα κυριότερα μέρη ενός τμήματος είναι η TCP επικεφαλίδα (TCP header), η οποία παρέχει συγκεκριμένες πληροφορίες για το πρωτόκολλο TCP.




Δομή ενός TCP τμήματος


  • Θύρα πηγής (16 bits): Αυτό το πεδίο προσδιορίζει την θύρα του αποστολέα

  • Θύρα προορισμού (16 bits): Αυτό το πεδίο προσδιορίζει την θύρα του παραλήπτη ή της υπηρεσίας

  • Αριθμός ακολουθίας (32 bits): Χρησιμοποιείται για την επανασυναρμολόγηση των δεδομένων. Αυτό το πεδίο αναλαμβάνει έναν διπλό ρόλο:

    • Εάν υπάρχει η SYN σημαία (SYN flag) τότε είναι ο αρχικός αριθμός ακολουθίας (ISN - initial sequence number) και η πρώτη οκτάδα δεδομένων του πακέτου είναι ISN+1.

    • Διαφορετικά, εάν δεν υπάρχει η SYN flag, τότε η πρώτη οκτάδα δεδομένων είναι ο αριθμός ακολουθίας.

  • Αριθμός επιβεβαίωσης (4 bits): Όταν υπάρχει η ACK ένδειξη, η τιμή αυτού του πεδίου δείχνει τον επόμενο αριθμό ακολουθίας που αναμένει ο αποστολέας.

  • Μέγεθος επικεφαλίδας: Γνωστό κι ως "data offset". Υποδεικνύει το μήκος μιας TCP επικεφαλίδας

  • Reserved (6 bits): Πεδίο 6 bit "κρατημένων" για μελλοντική χρήση. Η τιμή των bit είναι 0.

  • Σημαίες (6 bits): Γνωστό κι ως "Control Bits" περιέχει bit κώδικες ή ενδείξεις τα οποία υποδεικνύουν τον λόγο λειτουργίας του TCP τμήματος.

  • Άθροισμα ελέγχου (16 bits): Το πεδίο checksum μεγέθους 16 bit χρησιμοποιείται για έλεγχο λαθών στην επικεφαλίδα και στα δεδομένα.

  • Επιλογές (0 - 32): Μεταβλητή, η οποία καθορίζει ειδικές επιλεγόμενες ρυθμίσεις και μπορεί να καταλάβει χώρο στο τέλος της TCP επικεφαλίδας (TCP header).

  • Επείγον (16 bits): Υποδεικνύει αν τα δεδομένα είναι σημαντικά.

  • Μήκος παραθύρου (16 bits): Υποδεικνύει τον αριθμό από bytes που επιθυμεί να δεχτεί ο αποστολέας του πακέτου.


Μέγιστο μήκος τμήματος (Maximum Segment Size - MTU)


Το μέγιστο μήκος τμήματος (Maximum Segment Size - MTU) είναι μια παράμετρος του πεδίου «επιλογές» της TCP επικεφαλίδας και καθορίζει το μέγιστο μήκος (σε bytes) δεδομένων που πρέπει να έχει ένα τμήμα.

Το MSS είναι ένας σημαντικός παράγοντας στις διαδικτυακές συνδέσεις. Όταν πρωτόκολλο TCP χρησιμοποιείται για να επιτευχθεί μια TCP σύνδεση, οι δύο μεριές (αποστολέας και παραλήπτης) πρέπει να συμφωνήσουν για το μήκος της μέγιστης μονάδας μεταφοράς (Maximun Transfer Unit - MTU) έτσι ώστε να είναι αποδεκτό και στους δύο. Τυπικά το μήκος του MTU για μια οικιακή διαδικτυακή σύνδεση είναι από 576 έως 1500 bytes. Σε κάποιες περιπτώσεις το μήκος του MTU είναι μικρότερο από 576 bytes, οπότε και τα δεδομένα των τμημάτων θα είναι μικρότερα από 536 bytes.

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

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



Τελευταία ενημέρωση: 16/11/2016







Follow us

 ☰