Δίκτυα Υπολογιστών Κεφάλαιο 13 – Πρωτόκολλο μεταφοράς TCP

Δημοσιεύτηκε από τον/την codebrakes στις

Δίκτυα Υπολογιστών
Κεφάλαιο 13 - Πρωτόκολλο μεταφοράς TCP

Ο ρόλος του επιπέδου μεταφοράς

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

Σκοπός του επιπέδου μεταφοράς

Αρμοδιότητες του επιπέδου μεταφοράς

  • Επίβλεψη ξεχωριστών συνδιαλέξεων: Στο επίπεδο μεταφοράς κάθε σύνολο δεδομένων που μεταφέρεται από μιας εφαρμογή πηγής προς μίας εφαρμογής προορισμού αναφέρεται ως σύνοδος ή συνδιάλεξη. Ένας υπολογιστής μπορεί να τρέχει πολλές εφαρμογές που επικοινωνούν ταυτόχρονα σε ένα δίκτυο. Κάθε μια από αυτές τις εφαρμογές επικοινωνούν με μια ή περισσότερες εφαρμογές ή μπορεί ακόμη και με περισσότερους απομακρυσμένους υπολογιστές / εξυπηρετητές. Το επίπεδο μεταφοράς είναι υπεύθυνο να κρατήσει ένα αρχείο με όλες αυτές τις πολλαπλές συνόδους
Εφαρμογές που τρέχουν σε έναν υπολογιστή
  • Τεμαχισμός των δεδομένων και επανασυναρμολόγηση τους: Τα δεδομένα πρέπει να πάρουν μια κατάλληλη δομή προκειμένου να μεταδοθούν σε ένα δίκτυο. Αυτό έχει σαν συνέπεια τα δεδομένα να τεμαχιστούν σε τμήματα συγκεκριμένου μεγέθους. Τα πρωτόκολλα του επιπέδου μεταφοράς παρέχουν υπηρεσίες όπου παίρνουν την ροή δεδομένων από την εφαρμογή που είναι μια ροή από bytes και την τεμαχίζουν σε τμήματα. Ένα τμήμα (segment) φέρει μια επικεφαλίδα η οποία αποτελεί την ένδειξη για τον αριθμό σειράς του κάθε πακέτου έτσι ώστε να επανασυναρμολογηθεί στην άλλη μεριά και να ξαναπαραχθεί η αρχική πληροφορία.
Πληροφορία τεμαχισμένη σε πακέτα
  • Εύρεση των εφαρμογών: Μια εφαρμογή προκείμενου να μπορέσει να προωθήσει την ροή δεδομένων στο επίπεδο μεταφοράς θα πρέπει το δεύτερο να εντοπίσει αυτήν την εφαρμογή. Για να επιτευχθεί αυτό, το επίπεδο μεταφοράς εκχωρεί σε κάθε μια εφαρμογή ένα αναγνωριστικό που ονομάζεται θύρα επικοινωνίας. Κάθε εφαρμογή που χρειάζεται να μεταδώσει μια ροή δεδομένων θα πρέπει να έχει μια μοναδική θύρα επικοινωνίας.
Προώθηση των πακέτων που αφορούν την εκάστοτε εφαρμογή σε έναν υπολογιστή
Υπηρεσίες επιπέδου μεταφοράς
Βασική διαχώριση διαστρωματωμένης επικοινωνίας με βάση το πρότυπο επικοινωνίας TCP/IP

Τι είναι το πρωτόκολλο TCP

Το τρίτο (δικτύου) και το τέταρτο (μεταφοράς) επίπεδο του OSI αντιπροσωπεύουν την διεπαφή μεταξύ δικτυακών λογισμικών (εφαρμογές που χρειάζονται να μεταφέρουν δεδομένα σε ένα δίκτυο) και του δικτυακού υλικού (οι συσκευές που μεταφέρουν δεδομένα πάνω σε ένα δίκτυο υπολογιστών). Μια σουίτα πρωτοκόλλου (protocol suite) πρέπει να διαθέτει κάποιο πρωτόκολλο (ή σύνολο πρωτοκόλλων) το οποίο να διαχειρίζεται τις λειτουργίες των επιπέδων 3 και 4. Η ονομασία του μοντέλου αναφοράς TCP/IP προκύπτει από τα δύο κύρια πρωτόκολλά τα οποία παρέχουν τις παραπάνω δυνατότητες, επιτρέποντας ένα λογισμικό να “τρέχει” πάνω από ένα εσωτερικό δίκτυο. Το επίπεδο δικτύου (IP) διαχειρίζεται τα πακέτα (datagrams) ενός εσωτερικού δικτύου όσον αφορά την παράδοση και δρομολόγηση αυτών προς τον τελικό προορισμό ενώ το επίπεδο μεταφοράς (TCP) διαχειρίζεται τις συνδέσεις και παρέχει αξιοπιστία.


Το πρωτόκολλο TCP και η ιστορία του έως σήμερα

Λόγω του επιφανούς του ρόλου του TCP, η ιστορία του πρωτοκόλλου είναι αδύνατο να περιγραφεί χωρίς να γίνει μια αναφορά σε ολόκληρη την σουίτα πρωτοκόλλων TCP/IP. Στις αρχές του 1970, αυτό που εμείς σήμερα αποκαλούμε διαδίκτυο (Internet) ήταν ένα μικρό ερευνητικό ενδό-δίκτυο με το όνομα ARPAnet. Το όνομα αυτό δόθηκε από τον στρατιωτικό Αμερικάνικο οργανισμό United States Defense Advanced Research Projects Agency εξού και το όνομα ARPAnet οπού αποτελεί το ακρωνύμιο αυτής. Αυτό το δίκτυο βασιζόταν σε μια τεχνολογία που αποκαλούνταν ως Δικτυακό Πρωτόκολλο Ελέγχου (Network Control Protocol – NCP) το οποίο επέτρεπε σε διάφορους υπολογιστές να συνδέονται μεταξύ τους. Το πρωτόκολλο NCP αναλάμβανε περίπου την δουλειά που αναλαμβάνει σήμερα το πρωτόκολλο IP και TCP

Λογότυπο της United States Defense Advanced Research Projects Agency - DARPA
(Υπηρεσία Έρευνας Προηγμένων Αμυντικών Προγραμμάτων της Η.Π.Α.)

Λόγω των περιορισμών που είχε το πρωτόκολλο NCP, ξεκίνησε ο σχεδιασμός ενός νέου πρωτοκόλλου που θα ήταν πιο ανεπτυγμένο σε δίκτυα που εξελίσσονται συνεχώς. Αυτό το νέο πρωτόκολλο, επισημοποιήθηκε (αρχικά ως RFC 675) με το όνομα Πρωτόκολλο Ελέγχου Μεταφοράς (Transmission Control Protocol – TCP). Όπως και ο πρόγονος του (NCP) το πρωτόκολλο TCP ήταν βασικά υπεύθυνο για οτιδήποτε χρειαζόταν ένα ενδό-δίκτυο προκειμένου να μπορέσουν να “τρέξουν” εφαρμογές πάνω σε αυτό. Υπήρξαν σχετικές βελτιώσεις κατά χρονικά διαστήματα στο πρωτόκολλο TCP όπως για παράδειγμα η 2η έκδοση του TCP που καταγράφτηκε το 1977. Ενώ η λειτουργικότητα του TCP βελτιωνόταν σταθερά υπήρξε ένα πρόβλημα όσον αφορά στην δομή του πρωτοκόλλου. Έχοντας μόνο το TCP στην διαχείριση των πακέτων (datagrams) και στην δρομολόγηση αυτών όπως επίσης και τους ελέγχους συνδεσιμότητας, αξιοπιστίας και ροής δεδομένων το TCP παραβίαζε την ιεραρχική δομή που πρέπει να έχει ένα πρωτόκολλο επικοινωνίας.


Το TCP υποχρέωνε όλες τις εφαρμογές να χρησιμοποιούν τις λειτουργίες του επιπέδου μεταφοράς προκειμένου να χρησιμοποιήσουν τις λειτουργίες του επιπέδου δικτύου. Αυτό καθιστούσε το TCP άκαμπτο, και φτωχά σχεδιασμένο στις ανάγκες που έχουν οι εφαρμογές που χρειάζονται μόνο χαμηλού επιπέδου λειτουργίες και όχι ανώτερες όπως του επιπέδου μεταφοράς. Ως αποτέλεσμα πάρθηκε η απόφαση να διαχωριστεί το πρωτόκολλο TCP σε δύο μέρη: οι λειτουργείες του επιπέδου μεταφοράς παρέμειναν, τις οποίες διαχειρίζεται αποκλειστικά και μόνο το πρωτόκολλο TCP. Ενώ αποφασίστηκε ότι οι λειτουργείες του επίπεδου δικτύου θα πρέπει να τις διαχειριστεί το πρωτόκολλο διαδικτύου (Internet Protocol – IP). Αυτή η σημαντική διαχώριση τελειοποιήθηκε στην 4η έκδοση του TCP και έτσι δημιουργήθηκε και η πρώτη IPv.4 διεύθυνση. Η 4η έκδοση έχει τυποποιηθεί ως RFC 793 και η οποία εκδόθηκε τον Σεπτέμβρη 1981 και χρησιμοποιείται ακόμη και σήμερα σαν καθορισμένο πρότυπο.


Πρωτόκολλο TCP ανασκόπηση

Το TCP είναι ένα πλήρως εξοπλισμένο πρωτόκολλο επιπέδου μεταφοράς το οποίο παρέχει όλες τις λειτουργίες που είναι απαραίτητες από μια εφαρμογή προκειμένου να υπάρξει αξιόπιστη μεταφορά δεδομένων σε ένα οποιοδήποτε ενδό-δίκτυο. Παρέχει διευθυνσιοδότηση επιπέδου μεταφοράς για όλες τις διεργασίες των εφαρμογών με την δομή των TCP θυρών (TCP ports), και επιτρέπει αυτές οι θύρες να χρησιμοποιηθούν για εγκαθίδρυση σύνδεσης ανάμεσα σε δύο υπολογιστικά συστήματα. Όταν οι συνδέσεις εγκαθιδρυθούν, τότε τα δεδομένα μπορούν να σταλθούν αμφίδρομα κι από τις δύο μεριές. Οι εφαρμογές έχουν την δυνατότητα να στέλνουν δεδομένα όπου αυτά στέλνονται σαν μια απλή ροή από bytes προς το πρωτόκολλο TCP όπου εκεί μετέπειτα θα μετατραπούν σε καθορισμένου μήκους τμήματα (segments). Στην συνέχεια αυτά τα τμήματα περνάνε από το πρωτόκολλο IP (επίπεδο δικτύου) όπου μετατρέπονται σε IP πακέτα (IP datagrams).


Η συσκευή που λαμβάνει τα δεδομένα αυτά (δηλαδή ο παραλήπτης) αναλαμβάνει την αντίστροφη διαδικασία προκειμένου να παράγει το αρχικό μήνυμα. Το πρωτόκολλο TCP παρέχει ένα σύνολο από εκτενής μηχανισμούς για να εξασφαλίσει ότι τα δεδομένα πηγαίνουν από τον αποστολέα στον παραλήπτη (και αντιστρόφως) με αξιοπιστία, συνέπεια και εγκυρότητα. Ο μηχανισμός που εξασφαλίζει όλα τα παραπάνω αναφέρεται ως μηχανισμός επιβεβαίωσης κυλιόμενου παραθύρου (sliding window acknowledgement system), και επιτρέπει σε κάθε συσκευή να καταγράφει ποια bytes δεδομένων έχουν σταλεί όπως επίσης και την επιβεβαίωση των δεδομένων αυτών (δηλαδή επιβεβαίωση για το αν έχουν όντως σταλθεί στην άλλη μεριά κλπ). Τα δεδομένα τα οποία δεν είναι επιβεβαιωμένα (unacknowledged data) επαναμεταδίδονται ξανά στο τέλος. Επίσης οι παράμετροι του μηχανισμού αυτού μπορούν να τροποποιηθούν με βάση τις ανάγκες της συσκευής και της σύνδεσης. Επίσης παρέχει δυνατότητες ελέγχου ροής και buffering, μεταξύ συσκευών για να διαχειριστούν άνισους ρυθμούς παράδοσης δεδομένων και άλλων προβλημάτων.


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

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

TCP Πρότυπα: Στο RFC 793 ο τυποποιημένος ορισμός του TCP δεν περιέχει αρκετές πληροφορίες για το πως λειτουργεί το TCP σήμερα. Άλλα πρότυπα περιέχουν αντίστοιχες πληροφορίες για το πως λειτουργεί το πρωτόκολλο TCP και περιγράφουν τις βελτιώσεις που έγιναν κατά καιρούς στους βασικούς μηχανισμούς του. Στον πίνακα παρακάτω υπάρχουν κάποια ενδεικτικά RFCs του TCP.

Αριθμός
RFC

Όνομα

Περιγραφή
813 Window and Acknowledgment Strategy in TCP Κάνει αναφορά στον μηχανισμό επιβεβαίωσης κυλιόμενου παραθύρου (sliding window), και περιγράφει σχετικά προβλήματα που μπορούν να προκύψουν και μεθόδους επίλυσης αυτών.

879

The TCP Maximum Segment Size and Related Topics
Κάνει αναφορά στην σημαντική παράμετρο του μέγιστου μεγέθους ενός τμήματος (Maximum Segment Size - MMS) το οποίο ελέγχει το μέγεθος ενός TCP μηνύματος και συσχετίζει την παράμετρο αυτήν με την παράμετρο του IP datagram size.

896

Congestion Control in IP/TCP Internetworks

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

1122

Requirements for Internet Hosts Communication Layers

Γίνεται περιγραφή σε σημαντικές λεπτομέρειες για το πως το TCP πρέπει να εφαρμοστεί σε hosts

1146

TCP Alternate Checksum Options

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

1323

TCP Extensions for High Performance

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

2018

TCP Selective Acknowledgment Options

Περιγράφει μια βασική μετατροπή στον τρόπο λειτουργείας του TCP και γίνεται επίσης αναφορά στο πως οι TCP συσκευές μπορούν να προσδιορίσουν επιλεκτικά συγκεκριμένα τμήματα (segments) για επαναμετάδοση.

2581

TCP Congestion Control

Περιγράφει τέσσερις αλγορίθμους που χρησιμοποιούνται σε περιπτώσεις ελέγχου συμφόρησης σε TCP δίκτυα που είναι οι: αργής εκκίνησης (slow start), αποφυγής συμφόρησης (congestion avoidance), γρήγορης επαναμετάδοσης (fast retransmit) και γρήγορης ανάκαμψης (fast recovery).

2988

Computing TCP's Retransmission Timer

Περιγράφει θέματα σχετικά με τον χρονοδιακόπτη επαναμετάδοσης του TCP (TCP retransmission timer), ο οποίος ελέγχει για πόσο χρονικό διάστημα μια συσκευή θα αναμένει για μια επιβεβαίωση έναρξης αποστολής δεδομένων πριν γίνει η αναμετάδοση.

Συμπληρωματικός πίνακας των προτύπων TCP



Έστω το δίκτυο της παρακάτω εικόνας.

Παράδειγμα δικτύου

Ας παρατηρήσουμε πως γίνεται η αποστολή των TCP μηνυμάτων και τι θα γίνει σε περίπτωση που κάποιο μήνυμα χαθεί. Στο παράδειγμα μας έχουμε έναν χρήστη που θέλει να στείλει δεδομένα προς έναν FTP server που βρίσκεται στον ISP 2. Θα αναλύσουμε λοιπόν την περίπτωση που ο χρήστης θα αποστέλλει TCP μηνύματα προς έναν διακομιστή και πως πραγματοποιείται η επιβεβαίωση αυτών των μηνυμάτων από την μεριά αυτού του διακομιστή. Θα αναλύσουμε επίσης και το γεγονός που τα μηνύματα αυτά δεν φτάσουν ποτέ στον διακομιστή, δηλαδή τις ενέργειες που θα ληφθούν σε περίπτωση που χαθούν τα πακέτα κατά την μεταφορά τους.

Τελευταία Ενημέρωση: 24/04/2018