Skip navigation

Πρωτόκολλα προσανατολισμένα στη σύνδεση ή χωρίς σύνδεση

Πρωτόκολλα TCP-UDP

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

Το επίπεδο μεταφοράς είναι υπεύθυνο για την επικοινωνία των δεδομένων που λαμβάνονται από το επίπεδο εφαρμογής μεταξύ του υπολογιστή (κόμβου) αφετηρίας και του υπολογιστή (κόμβου) προορισμού ή αλλιώς επικοινωνία από-άκρο-σε-άκρο (end-to-end), με ή χωρίς εγκατάσταση σύνδεσης. Με άλλα λόγια στην πρώτη περίπτωση, αρχικά γίνεται εγκατάσταση σύνδεσης και ένα πρόγραμμα στον υπολογιστή αφετηρίας συνομιλεί με ένα παρόμοιο πρόγραμμα του υπολογιστή προορισμού, ενώ στην δεύτερη περίπτωση χωρίς να εγκατασταθεί σύνδεση μεταξύ των κόμβων, το πρόγραμμα στην αφετηρία μεταδίδει άμεσα τα δεδομένα στο πρόγραμμα προορισμού. Στην περίπτωση που αρχικά γίνεται εγκατάσταση της σύνδεσης οι πληροφορίες της εγκατεστημένης σύνδεσης αποθηκεύονται στις επικεφαλίδες του μηνύματος και στα μηνύματα ελέγχου.

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

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

Η οικογένεια πρωτοκόλλων TCP/IP διαθέτει στο επίπεδο μεταφοράς τα πρωτόκολλα TCP και UDP που υλοποιούν τις διαδικασίες μεταφοράς των μηνυμάτων δεδομένων. Τα πρωτόκολλα αυτά διαχωρίζονται μεταξύ τους: στο ΤCP που είναι πρωτόκολλο προσανατολισμένο σε σύνδεση (Connection oriented) και UDP που είναι πρωτόκολλο χωρίς σύνδεση (Connectionless).

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

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

Η πληροφορία που μεταφέρεται από άκρο σε άκρο στο επίπεδο μεταφοράς οργανώνεται σε ακολουθία από ομάδες δεδομένων που ονομάζονται datagrams. Κάθε ένα datagram μετράται σε octets, δηλαδή οκτάδες ψηφίων (byte) και αντιμετωπίζεται απολύτως ανεξάρτητα από το δίκτυο.

Οctet: Το byte πρωτοεμφανίστηκε στα μέσα της δεκαετίας του '50 από την ΙΒΜ με την έννοια της μικρότερης ομάδας χρησιμοποιούμενων δυαδικών ψηφίων που αντιστοιχεί σε διευθύνσεις μνήμης σε έναν ηλεκτρονικό υπολογιστή και αρχικά δεν αντιστοιχούσε σε 8 ψηφία (bit). Για το λόγο αυτό στο TCP/IP χρησιμοποιείται ο όρος octet, που εξορισμού αντιστοιχεί σε μονάδα δεδομένων μήκους 8 bit.

Πρωτόκολλο TCP – Δομή πακέτου

Για να κατανοηθεί η λειτουργία του πρωτοκόλλου TCP ας δούμε ένα παράδειγμα: Έστω ότι θέλουμε να αποστείλουμε ένα μήνυμα μέσω ηλεκτρονικού ταχυδρομείου. Αρχικά η εφαρμογή χρησιμοποιώντας τα πρωτόκολλα του επιπέδου εφαρμογής παράγει μια σειρά πληροφοριών υπό μορφή δεδομένων με τις εντολές και το περιεχόμενο που ανταλλάσσουν δυο κόμβοι μέσω του δικτύου. Προϋπόθεση είναι η αξιόπιστη μετάδοση των πληροφοριών μέσω του δικτύου. Η πληροφορία παραλαμβάνεται στο επίπεδο μεταφοράς από το πρωτόκολλο ΤCP που αναλαμβάνει να μεταφέρει τα δεδομένα – πληροφορίες από το ένα άκρο στο άλλο.

Έστω ότι στο παραπάνω παράδειγμα το ΤCP παραλαμβάνει από την εφαρμογή ηλεκτρονικού ταχυδρομείου δεδομένα μεγέθους 6000 octets. Ελέγχει το δίκτυο και διαπιστώνει ότι δεν μπορεί να διαχειριστεί datagram μεγαλύτερα από 600 octets. Στην πραγματικότητα τα δύο άκρα δηλώνουν το μεγαλύτερο μέγεθος datagram που μπορούν να διαχειριστούν. Για να αντιμετωπιστεί η κατάσταση το αρχικό datagram διασπάται σε 10 μικρότερα των 600 octets και αποστέλλονται ανεξάρτητα από το ένα άκρο στο άλλο. Τα μικρότερα αυτά datagrams συμφωνημένου μεγέθους ονομάζονται Τμήματα (segments). Επομένως στο πρωτόκολλο ΤCP η μονάδα δεδομένων που διαχειρίζεται (PDU) αναφέρεται ως Τμήμα (Segment). Βέβαια στο Τμήμα μεταξύ των δύο άκρων μπορεί να χωρά ολόκληρο το datagram, οπότε δεν θα χρειαστεί να διασπαστεί.

To TCP/IP είναι βασισμένο στο "catenet model" (περιγράφεται με λεπτομέρεια στο IEN 48). Το μοντέλο “catenet” θεωρεί ότι υπάρχει ένας αρκετά μεγάλος αριθμός ανεξάρτητων δικτύων που διασυνδέονται με εξωτερικές πύλες δρομολόγησης (Gateways). Τα τμήματα διαπερνούν από πολλά διαφορετικά δίκτυα πριν φτάσουν στο προορισμό τους. Σε πολλές περιπτώσεις το μονοπάτι είναι διαφορετικό για κάθε τμήμα και η διαδρομή είναι αόρατη στο χρήστη. Όταν φτάσουν στο άλλο άκρο θα επανασυνδεθούν για να διαμορφώσουν το αρχικό μήνυμα των 6000 octets. Όμως τα ανεξάρτητα τμήματα είναι πολύ πιθανόν να φτάσουν με διαφορετική σειρά, για παράδειγμα το όγδοο τμήμα να φτάσει πριν το πρώτο. Επίσης λόγω σφάλματος δικτύου σε κάποιο σημείο της διαδρομής είναι πιθανό κάποιο τμήμα να καταστραφεί. Στην περίπτωση αυτή το συγκεκριμένο τμήμα πρέπει να σταλεί ξανά.

Επιπλέον ένα θέμα που πρέπει να χειριστεί το ΤCP είναι σε ποια σύνδεση ανήκει ένα συγκεκριμένο τμήμα. Για να γίνει κατανοητό αυτό στο ένα άκρο, σε ένα ηλεκτρονικό υπολογιστή (κόμβο) μπορεί η ίδια ή και διαφορετική εφαρμογή να παράγει πολλά ανεξάρτητα μηνύματα που πρέπει να αποσταλούν στον ίδιο ή και σε διαφορετικό προορισμό. Επίσης στο άλλο άκρο μπορεί να παραλαμβάνονται τμήματα από πολλούς διαφορετικούς αποστολείς και να απευθύνονται σε διαφορετικές δικτυακές εφαρμογές.

Πολυπλεξία (Multiplexing) είναι η δυνατότητα πολλές διεργασίες μέσα στον ίδιο τερματικό κόμβο (host) να χρησιμοποιούν τις υπηρεσίες επικοινωνίας του TCP ταυτόχρονα.

Το TCP στην φάση της επανασύνδεσης του αρχικού μηνύματος πρέπει να γνωρίζει ποια είναι η προέλευση (source) του μηνύματος και ποιος ο προορισμός (destination). Έτσι το TCP εξασφαλίζει την Αξιοπιστία της σύνδεσης με:

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

Όλες αυτές οι πληροφορίες που είναι απαραίτητες για τον έλεγχο και την ανασύνθεση του αρχικού μηνύματος περιέχονται στην επικεφαλίδα (header) που δημιουργείται κατά τον αρχικό σχηματισμό του τμήματος. Η επικεφαλίδα είναι ένα σύνολο από octets δεδομένων πριν από τα πραγματικά δεδομένα και προστίθεται στην αρχή του τμήματος. Η επικεφαλίδα έχει ελάχιστο μήκος 20 octets και μέγιστο 60 octets μαζί με το προαιρετικό πεδίο options. Οι πληροφορίες που εισάγει το TCP στην επικεφαλίδα ώστε να εξασφαλίσει την αξιοπιστία της μεταφοράς του μηνύματος είναι:

  • Ο Αριθμός Θύρας Προέλευσης (source port number) και Αριθμός Θύρας Προορισμού (destination port number). Οι αριθμοί θύρας χρησιμεύουν στην ταυτοποίηση των διαφορετικών συνομιλιών μεταξύ των δύο άκρων. Έστω ότι δυο διαφορετικοί άνθρωποι στέλνουν από ένα μήνυμα ηλεκτρονικού ταχυδρομείου προς ένα τρίτο. Το ΤCP αποδίδει τις θύρες με αριθμούς 100 και 200 στις διεργασίες των εφαρμογών ηλεκτρονικού ταχυδρομείου των αποστολέων αντίστοιχα και τη θύρα 25 με την εφαρμογή που θα παραδοθεί το μήνυμα στον υπολογιστή του παραλήπτη στο άλλο άκρο. Όταν μεταδίδεται ένα τμήμα στην επικεφαλίδα των δύο τμημάτων, τα νούμερα 1024 και 2024 αποτελούν τις θύρες προέλευσης. Βέβαια το TCP πρέπει να γνωρίζει ποια είναι η θύρα προορισμού στο άλλο άκρο, και για το λόγο αυτό προσθέτει τον αριθμό 25 στην επικεφαλίδα στο αντίστοιχο πεδίο (του προορισμού). Τώρα, αν από το άλλο άκρο πρέπει να σταλεί πίσω ένα τμήμα τότε τα πεδία θύρα προέλευσης και προορισμού πρέπει να αντιστραφούν στην επικεφαλίδα του αντίστοιχου τμήματος.
  • Ο Αριθμός Σειράς (Sequence Number). Ο αριθμός αυτός χρησιμεύει ώστε ο παραλήπτης στο άλλο άκρο να τοποθετεί τα τμήματα στη σωστή σειρά καθώς συνθέτει το αρχικό τμήμα, επειδή η σειρά που έχουν παραληφθεί μπορεί να είναι διαφορετική από τη σειρά με την οποία έχουν αποσταλεί. Το TCP αριθμεί τα τμήματα με βάση τα octets, έτσι αν κάθε τμήμα αποτελείται από 600 octets, τότε ο αριθμός σειράς στην επικεφαλίδα του πρώτου τμήματος θα έχει τον αριθμό 0, στου δεύτερου 600, στου τρίτου 1200 κ.ο.κ.
  • Ο Αριθμός Επιβεβαίωσης (Acknowledgment). Ο αριθμός αυτός χρησιμοποιείται για να διασφαλιστεί ότι κάθε τμήμα έχει φτάσει στον προορισμό του. Όταν ο παραλήπτης στο άλλο άκρο παραλάβει το τμήμα στέλνει ένα νέο τμήμα (ACK- επιβεβαίωσης) του οποίου είναι συμπληρωμένο το πεδίο Αριθμός επιβεβαίωσης. Για παράδειγμα, στέλνοντας ένα τμήμα με επιβεβαίωση τον αριθμό 1201, σημαίνει ότι έχουν φτάσει όλα τα δεδομένα μέχρι και το octet με αριθμό 1200. Αν η επιβεβαίωση δεν παραληφθεί μέσα σε ένα συγκεκριμένο χρονικό διάστημα, αποστέλλονται ξανά τα δεδομένα.
  • Το Μέγεθος Παράθυρο (Window). Για λόγους επιτάχυνσης της επικοινωνίας το TCP δεν περιμένει την παραλαβή της επιβεβαίωσης για να στείλει το επόμενο τμήμα. Δεν γίνεται όμως να αποστέλλονται συνεχώς δεδομένα, διότι ένας γρήγορος αποστολέας στο ένα άκρο θα μπορούσε να ξεπεράσει τις δυνατότητες απορρόφησης δεδομένων από ένα αργό παραλήπτη. Έτσι με το πεδίο Window κάθε άκρο δηλώνει πόσα νέα δεδομένα μπορεί να απορροφήσει τοποθετώντας σ' αυτό το πεδίο τον αριθμό από octets που διαθέτει ελεύθερα ο ενταμιευτής εισόδου (buffer). Όμως το μέγεθος του προσωρινού χώρου που μένει ελεύθερος μειώνεται όσο ο υπολογιστής λαμβάνει δεδομένα ανάλογα με τις δυνατότητες επεξεργασίας του παραλήπτη. Αν ο χώρος αυτός γεμίσει, πρέπει ο αποστολέας να σταματήσει την αποστολή νέων δεδομένων, επειδή σ' αυτή την περίπτωση τα δεδομένα θα απορριφθούν. Όταν ο παραλήπτης απελευθερώσει χώρο, δηλώνει με το πεδίο Window ότι είναι έτοιμος να δεχτεί νέα δεδομένα.
  • Το Άθροισμα Ελέγχου (Checksum). Ο αριθμός στο πεδίο αυτό της επικεφαλίδας τοποθετείται από τον αποστολέα, αφού υπολογίσει το άθροισμα απ' όλα τα octets σε ένα datagram. Το TCP στο άλλο άκρο υπολογίζει ξανά το άθροισμα και το συγκρίνει με αυτό παρέλαβε. Αν τα δύο αποτελέσματα δεν είναι ίδια, τότε κάτι συνέβη κατά τη μεταφορά και το datagram απορρίπτεται.
  • Τα πεδία Σημαίες Ελέγχου (Flags) χρησιμεύουν για τον χειρισμό των συνδέσεων και αντιστοιχούν σε 9 bit, όπου τα σημαντικότερα από αυτά είναι:
  1. URG (Urgent Pointer). Το πεδίο URG επιτρέπει στο ένα άκρο να πληροφορήσει το άλλο για κάτι σημαντικό, όπως να προχωρήσει στην επεξεργασία ενός συγκεκριμένου octet, τη διακοπή της εξόδου με την πληκτρολόγηση κάποιου χαρακτήρα ελέγχου (control character) κ.α.
  2. ACK (Acknowledgment). Το πεδίο αυτό δηλώνει ότι ο κόμβος που στέλνει το bit με τιμή 1 (On) επιβεβαιώνει τη λήψη δεδομένων.
  3. PSH (Push). Το πεδίο αυτό ενημερώνει το παραλήπτη ότι πρέπει όσο το δυνατό γρηγορότερα να προωθήσει τα δεδομένα στο επίπεδο εφαρμογής.
  4. RST (Reset). Το πεδίο αυτό κάνει επισημαίνει επανεκκίνηση /καθαρισμό της σύνδεσης.
  5. SYN (Synchronize). Το πεδίο αυτό χρησιμεύει για το συγχρονισμό της εγκατάστασης μιας νέας σύνδεσης χρησιμοποιώντας τα πεδία Αριθμός Σειράς έτσι ώστε να ξεκινήσει μία σύνδεση.
  6. FIN (Finalize). Το πεδίο αυτό ενημερώνει ότι ο αποστολέας έχει τελειώσει την μεταφορά δεδομένων.

Ολοκληρώνοντας, η δομή του πακέτου του πρωτοκόλλου TCP περιέχει όλες πληροφορίες που απαιτούνται σε μια επικοινωνία που παρέχει υπηρεσίες με σύνδεση και αφορούν τα εξής:

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

Πρωτόκολλο UDP - Δομή πακέτου

Το πρωτόκολλο User Datagram Protocol είναι ένα σχετικά απλούστερο πρωτόκολλο σε σχέση με το TCP που χρησιμοποιείται στο επίπεδο μεταφοράς. Για την μεταφορά των datagrams δεν γίνεται εγκατάσταση σύνδεσης μεταξύ των δύο άκρων και δεν διασπάται το μήνυμα σε μικρότερα τμήματα, όταν δεν υποστηρίζεται το μέγεθος του datagram. Κάθε αυτοδύναμο πακέτο μεταφέρεται μέσω δικτύων από κόμβο σε κόμβο μέχρι να φτάσει στο προορισμό του χωρίς να εγγυάται κανείς ότι δεν θα χαθεί ή θα καταστραφεί. Από την άλλη πλευρά όμως, αυτή η απλότητα της δομής του και η έλλειψη ελέγχων προσδίδει στο UDP το πλεονέκτημα της αύξησης στην ταχύτητα μετάδοσης των δεδομένων και την απώλεια σε overhead, δηλαδή της μείωσης χρησιμοποίησης των πόρων του δικτύου για μη ωφέλιμες εργασίες.

Το UDP έχει μέγεθος επικεφαλίδας μόνο 8 octets, αφού οι πληροφορίες από όπου αποτελείται η επικεφαλίδα ενός datagram είναι:

  • Ο αριθμός Θύρας Προέλευσης και ο αριθμός Θύρας Προορισμού (Source Port & Destination Port).
  • Το μήκος του datagram (Length). To ελάχιστο μήκος είναι 8 octets (δηλαδή μόνο η επικεφαλίδα) και το μέγιστο μέγεθος φτάνει τα 64534 octets (64Kb) μαζί με την επικεφαλίδα.
  • Το Άθροισμα Έλεγχου (Checksum). Είναι προαιρετικό πεδίο 16-bit το οποίο χρησιμοποιείται για επαλήθευση της ορθότητας του datagram κατά την παραλαβή του στην πλευρά του παραλήπτη. Υπολογίζει το άθροισμα τη κεφαλίδας και των δεδομένων και η λειτουργία του είναι παρόμοια με του TCP.

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

Τέτοιες εφαρμογές είναι:

  • αυτές που μεταδίδουν σε πραγματικό χρόνο ροές video και ήχου (real-time audio/videο), όπως IPTV, VoIP. Εδώ μας ενδιαφέρει τα δεδομένα να φτάνουν τη σωστή χρονική στιγμή. Οποιαδήποτε απώλειά τους, μας επηρεάζει μόνο στην ποιότητα του αναπαραγόμενου σήματος.
  • Servers, οι οποίοι απαντούν σε μικρά αιτήματα ενός τεράστιου αριθμού από πελάτες/clients, όπως στα δικτυακά online παιχνίδια. Οι Servers, χρησιμοποιώντας UDP, δεν απασχολούνται με το να ελέγχουν την κατάσταση της κάθε σύνδεσης και έτσι μπορούν να εξυπηρετήσουν ένα πολύ μεγαλύτερο αριθμό χρηστών σε αντίθεση με το αν χρησιμοποιούσαν TCP.

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


(c) Αμπατζόγλου Ιωάννης, Ηλεκτρονικός Μηχανικός, καθηγητής ηλεκτρονικών ΠΕ84

Αδειοδοτημένο υπό τους όρους Creative Commons Attribution Non-commercial License 4.0