Δίκτυα Υπολογιστών Κεφάλαιο 15 – Μηχανισμός κυλιόμενου παραθύρου (sliding window) του TCP

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

Δίκτυα Υπολογιστών
Κεφάλαιο 15 - Μηχανισμός κυλιόμενου παραθύρου (sliding window) του TCP

Το πρόβλημα με τα αναξιόπιστα πρωτόκολλα: Έλλειψη αξιοπιστίας

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

Λειτουργεία ενός αναξιόπιστου πρωτοκόλλου

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

Μηχανισμός επιβεβαίωσης κυλιόμενου παραθύρου του TCP

  • Ο μηχανισμός κυλιόμενου παραθύρου χρησιμοποιείται από το πρωτόκολλο TCP ως μια μέθοδος ελέγχου της ροής των πακέτων μεταξύ δύο υπολογιστών ή των hosts ενός δικτύου. Το TCP απαιτεί ότι όλα τα δεδομένα που μεταδίδονται να επιβεβαιώνονται από host που τα λαμβάνει. Με την μέθοδο αυτή πολλαπλά πακέτα μπορούν να επιβεβαιωθούν με μία μόνο επιβεβαίωση.
  • Το παράθυρο TCP είναι ο αριθμός των μη επιβεβαιωμένων δεδομένων που ένας αποστολέας είναι σε θέση να στείλει σε μια συγκεκριμένη σύνδεση προτού λάβει το μήνυμα επιβεβαίωσης από τον παραλήπτη που έχει λάβει αυτά τα δεδομένα.
  • Ο αποστολέας μπορεί να στείλει όλα τα πακέτα εντός του μήκους του TCP παραθύρου (όπως αυτό καθορίζεται από την TCP επικεφαλίδα) χωρίς να λάβει μια επιβεβαίωση (ACK) και πρέπει να αρχίσει ένας timeout timer για καθένα από αυτά. Ο παραλήπτης πρέπει να επιβεβαιώσει κάθε πακέτο που έλαβε υποδεικνύοντας τον αριθμό ακολουθίας (sequence number) του τελευταίου πακέτου που έλαβε. Αφού ο αποστολέας λάβει την επιβεβαίωση (ACK) από τον παραλήπτη τότε μετακινεί το παράθυρο δεξιά.
  • Σε αυτήν την περίπτωση, ο αποστολέας μπορεί να στείλει πάνω από 5 TCP τμήματα χωρίς να έχει λάβει μέχρι στιγμής κάποια επιβεβαίωση από τον παραλήπτη. Όταν ο αποστολέας λάβει επιβεβαίωση για το 1ο τμήμα από τον παραλήπτη, θα μετακινήσει το παράθυρο κατά μια θέση δεξιά για να στείλει επίσης το 6ο τμήμα προς τον παραλήπτη.
  • Εάν κάποιο τμήμα χαθεί κατά την μεταφορά του προς τον προορισμό του, ο παραλήπτης δεν θα είναι σε θέση να στείλει επιβεβαίωση στον αποστολέα γι’ αυτό το τμήμα. Ας πάρουμε το παράδειγμα όπου όλα τα τμήματα έχουν φτάσει στον προορισμό τους εκτός του 3ου τμήματος. Ο παραλήπτης θα επιβεβαιώσει μέχρι το 2ο τμήμα. Στον αποστολέα θα συμβεί ένα timeout και θα ξαναρχίσει η επαναμετάδοση του 3ου τμήματος που χάθηκε. Σε αυτό το σημείο ο παραλήπτης έχει λάβει όλα τα τμήματα καθότι μόνο το 3ο τμήμα είχε χαθεί. Οπότε ο παραλήπτης θα στείλει επιβεβαίωση (ACK) για το 5ο τμήμα, καθότι έχει λάβει όλα τα τμήματα έως το 5ο τμήμα.
Λειτουργία μηχανισμού επιβεβαίωσης κυλιόμενου παραθύρου του TCP
  • Η επιβεβαίωση (ACK) για το 5ο τμήμα εξασφαλίζει στον αποστολέα ότι ο παραλήπτης έχει λάβει όλα τα τμήματα έως το 5ο.
  • Αν ο αριθμός ακολουθίας ενός TCP τμήματος σε κάθε περίπτωση ήταν 5000 και το τμήμα μεταφέρει 500 bytes, ο αριθμός ακολουθίας για τα επόμενα τμήματα θα είναι 5000+500+1. Αυτό σημαίνει ότι ένα τμήμα μεταφέρει τον αριθμό ακολουθίας του πρώτου byte στο τμήμα.
  • Το μήκος παραθύρου εκφράζεται ως αριθμός των bytes και καθορίζεται από τον παραλήπτη όταν η σύνδεση εγκαθιδρυθεί. Θα έχετε παρατηρήσει όταν μεταφέρετε μεγάλα αρχεία από έναν υπολογιστή σε έναν άλλο αρχικά ο χρόνος υπολογισμού θα εμφανίσει πολύ χρονικό διάστημα αλλά μετά αυτό θα μειωθεί.

Έχουμε 4 κατηγορίες για το παραπάνω παράδειγμα:

    1. Bytes που στάλθηκαν και επιβεβαιώθηκαν (Bytes 18 έως 20)
    2. Bytes που στάλθηκαν αλλά δεν επιβεβαιώθηκαν (Bytes 21 έως 24)
    3. Bytes που ο παραλήπτης είναι σε θέση να δεχτεί (Bytes 25 έως 28)
    4. Bytes που ο παραλήπτης δεν μπορεί να δεχτεί (Byte 29 έως 32)

Το παράθυρο αποστολής είναι το άθροισμα των μη επιβεβαιωμένων bytes που στάλθηκαν και των bytes που είναι σε θέση ο παραλήπτης να δεχτεί

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