Συνδέσεις TCP
Συνδέσεις TCP
Η μετάδοση των πληροφοριών μεταξύ των δύο άκρων με τη χρήση του πρωτοκόλλου TCP γίνεται σε τρεις φάσεις:
- Εγκατάσταση Σύνδεσης
- Μεταφορά δεδομένων
- Τερματισμός Σύνδεσης
Εγκατάσταση Σύνδεσης
Για την εγκατάσταση μίας νέας σύνδεσης σε μια αξιόπιστη συνδιάλεξη μεταξύ δύο άκρων, το TCP χρησιμοποιεί την μέθοδο χειραψίας τριών βημάτων (three-way handshake).
- Ο τερματικός κόμβος (host) A ενεργοποιεί τη σύνδεση στέλνοντας ένα Τμήμα Συγχρονισμού TCP με το πεδίο SYN σε τιμή ΟΝ και ένα αρχικό τυχαίο αριθμό στο πεδίο Αριθμό Σειράς (Initial Sequence Number), έστω ο ISN A=x, στα αντίστοιχα πεδία της επικεφαλίδας. Ο αρχικός αριθμός στο πεδίο Αριθμός Σειράς είναι τυχαίος, γιατί αν ήταν ίδιος, τότε στην περίπτωση δυο συνδέσεων με την ίδια θύρα, που έχουν δημιουργηθεί με μικρή χρονική διαφορά και η μια έχει ήδη τερματιστεί, υπάρχει περίπτωση να εμφανιστούν τμήματα της παλαιότερης σύνδεσης στην νεότερη.
- Ο τερματικός κόμβος (host) B παραλαμβάνει το Τμήμα Συγχρονισμού, το επεξεργάζεται και απαντά με ένα δικό του Τμήμα Συγχρονισμού TCP, όπου στο πεδίο SYN ορίζεται σε τιμή ΟΝ και ένα δικό του αρχικό Αριθμό Σειράς ISN Β=y. Επίσης τοποθετεί την τιμή στο πεδίο ACK=ΟΝ και στο πεδίο στο πεδίο Αριθμός Επιβεβαίωσης (Acknowledgment) την τιμή x+1 για να δηλώσει το επόμενο αναμενόμενο octet από τον κόμβο A που θα ξεκινά να περιέχει δεδομένα. Δηλαδή το τμήμα επιβεβαίωσης προσδιορίζει τον επόμενο Αριθμό Σειράς που αναμένεται να λάβει με ένα τμήμα δεδομένων και έτσι επιβεβαιώνονται όλοι οι προηγούμενοι Αριθμοί Σειράς που έχουν ληφθεί.
- Αφού ο κόμβος A παραλάβει την απάντηση από τον κόμβο Β ολοκληρώνει την εγκατάστασης της σύνδεσης στέλνοντας ένα τρίτο Τμήμα Επιβεβαίωσης ACK στον κόμβο B. Σ΄ αυτό το Τμήμα ο κόμβος A θέτει το πεδίο ACK=ΟΝ και υποδηλώνει ότι το επόμενο αναμενόμενο octet από τον κόμβο Β με την τιμή στο πεδίο Αριθμός Επιβεβαίωσης (Acknowledgment) = y+1.
Το TCP όπως έχει ήδη περιγραφεί είναι πρωτόκολλο προσανατολισμένο στη σύνδεση. Δέχεται ροές (streams) από δεδομένα octets και τα περνάει από το επίπεδο της εφαρμογής στο επίπεδο δικτύου. Επίσης, το TCP χρησιμοποιεί ενταμιευτές (buffers) για να αποθηκεύσει τα εισερχόμενα και εξερχόμενα δεδομένα (ροές εισόδου και εξόδου). Οι εφαρμογές στέλνουν τις ροές δεδομένων στο TCP, όπου τις αποθηκεύει στους ενταμιευτές.
Μεταφορά δεδομένων
Το TCP στηρίζεται σε τρείς παράγοντες προκειμένου να αποφασίσει κάθε φορά πόσα octets μπορεί να στείλει με ένα τμήμα δεδομένων.
- Ο πρώτος παράγοντας είναι η τιμή του πεδίου Παράθυρο που ανακοινώνει το κάθε άκρο με βάση το μηχανισμό έλεγχου ροής. Με άλλα λόγια η τιμή του Παράθυρου (Window) έχει ανακοινωθεί σε κάποιο τμήμα του πεδίου της επικεφαλίδας από τον παραλήπτη.
- Σε επόμενο στάδιο λαμβάνει υπόψη του από το μηχανισμό ελέγχου συμφόρησης μια τιμή που αναφέρεται ως Παράθυρο Συμφόρησης, ώστε να μην πλημμυρίσει ο αποστολέας με δεδομένα το δίκτυο. Για τον έλεγχο της συμφόρησης το TCP διατηρεί μια μεταβλητή όπου η τιμή της μπορεί να μεταβάλλεται, καθώς μεταβάλλεται η ροή δεδομένων (φόρτος) μεταξύ των συσκευών (δρομολογητές) του ενδιαμέσου δικτύου.
- Ο τελευταίος παράγοντας που λαμβάνεται υπόψη στο TCP είναι το όριο που έχει τεθεί από το φυσικό επίπεδο και είναι γνωστό ως μέγιστη μονάδα εκπομπής (MTU). Στο Ethernet είναι 1500 octets ανά πακέτο.
Το TCP επιλέγει το μικρότερο μέγεθος δεδομένων από τους τρεις παράγοντες.
Για παράδειγμα, έστω ότι o ενταμιευτής εξόδου του παραλήπτη περιέχει 2400 octets που πρέπει να μεταφέρει χωρίς την επικεφαλίδα. Το παράθυρο του παραλήπτη έχει καθοριστεί σε 1200 octets, ο μηχανισμός ελέγχου συμφόρησης έχει καθορίστει στο όριο 960 octets και το φυσικό επίπεδο δικτύου έχει ορίσει την MTU σε 1460 octets. Επιλέγεται το μικρότερο μέγεθος, δηλαδή τα 960 octets (940octets + 20 οctets επικεφαλίδα) και μεταφέρεται ένα τμήμα στο παραλήπτη.
Το μέγεθος το δεδομένων που μεταφέρονται κάθε φορά μπορεί να μεταβάλλεται, αφού ο παραλήπτης μπορεί να απελευθερώνει χωρητικότητα στον ενταμιευτή εισόδου όσο το TCP επεξεργάζεται τα δεδομένα που παραλαμβάνει ή το ενδιάμεσο δίκτυο μπορεί να είναι λιγότερο φορτωμένο. Οπότε ο παραλήπτης μπορεί να ανακοινώσει μια νέα τιμή στο πεδίο Παράθυρο της επικεφαλίδας ενός τμήματος που ελέγχει την ροή δεδομένων. Έστω λοιπόν στο παράδειγμά, ότι ελευθερώνεται χώρος στον ενταμιευτή του παραλήπτη και ανακοινώνεται στον αποστολέα νέο Παράθυρο με μέγεθος 1800 octets. Παράλληλα γίνεται επιβεβαίωση του τμήματος που έχει παραληφθεί με τμήμα ACK και ενημερώνει για το επόμενο octet δεδομένων που μπορεί να παραλάβει στο πεδίο Αριθμός Επιβεβαίωσης. Επίσης το ενδιάμεσο δίκτυο μπορεί να έχει επιλύσει προβλήματα φόρτου που πιθανόν να υπήρχαν σε κάποιο δρομολογητή και ο μηχανισμός έλεγχου φόρτου να ενημερώσει το Παράθυρο Συμφόρησης σε 1500 octets. Έτσι το TCP στη πλευρά του αποστολέα αποφασίζει να στείλει τα υπόλοιπα δεδομένα (1460 δεδομένα+20 επικεφαλίδα), αφού σ’ αυτή τη περίπτωση το όριο που αποφασίστηκε είναι η μονάδα MTU 1480 octets.
Τερματισμός Σύνδεσης
Αφού μεταδοθούν όλα τα δεδομένα, για τον τερματισμό της σύνδεσης αποστέλλεται από το άκρο του αποστολέα Α αποκλειστικά ένα TCP τμήμα χωρίς δεδομένα με το πεδίο (Finalize) FIN=ΟΝ. Όταν ο κόμβος B παραλάβει το αρχικό Τμήμα Τερματισμού, αμέσως επιβεβαιώνει την παραλαβή του με ένα τμήμα ACK=ΟΝ και μεταφέρει στο επίπεδο εφαρμογής την αίτηση τερματισμού μεταφοράς δεδομένων. Αφού η εφαρμογή στο κόμβο Β αποφασίσει το τερματισμό της συνομιλίας, ενημερώνει το ΤCP, όπου στέλνει το δικό του τμήμα Τερματισμού στο κόμβο Α FIN=ΟΝ. Αφού το παραλάβει ο Α, επιβεβαιώνει με ένα τμήμα ΑCK=ΟΝ τη λήψη και θέτει το πεδίο RST=ON.
Κάθε πλευρά που στέλνει ένα τμήμα FIN, περιμένει να λάβει επιβεβαίωση για συγκεκριμένο χρονικό διάστημα και αν δεν το λάβει επανεκπέμπει ένα τμήμα FIN. Όμως αυτό μπορεί να οδηγήσει σε συνεχείς αναμεταδόσεις του τμήματος τερματισμού. Γι' αυτό το λόγο, μετά από χρόνο που αντιστοιχεί σε διάστημα δυο εκπομπών του τμήματος τερματισμού και επιστροφής της επιβεβαίωσης, διακόπτεται η σύνδεση.
(c) Αμπατζόγλου Ιωάννης, Ηλεκτρονικός Μηχανικός, καθηγητής ηλεκτρονικών ΠΕ1708