Top Banner
Κεφάλαιο 1 Το Πρωτόκολλο TCP (Transmission Control Protocol) Η υλοποίηση του πρωτοκόλλου μεταφοράς TCP είναι προσανατολισμένη για ενσύρματα δίκτυα δεδομένων παρέχοντας μια ασφαλή μεταφορά δεδομένων μεταξύ σταθερών σταθμών επικοινωνίας. Η εφαρμογή του TCP έχει επεκταθεί σε κινητούς σταθμούς παρέχοντας την αντίστοιχη υπηρεσία με κάποιους όμως περιορισμούς στην απόδοση. Αυτό το κεφάλαιο περιγράφει την λειτουργία του TCP τους μηχανισμούς μετάδοσης, ελέγχου ροής και τους αλγορίθμους συμφόρησης που αυτό εφαρμόζει καθώς και τις διάφορες εκδόσεις του πρωτοκόλλου. 1.1 Επίπεδο Μεταφοράς (Transport Layer) Σύμφωνα με το μοντέλο αναφοράς TCP/IP [1], το επίπεδο μεταφοράς (transport layer) είναι σχεδιασμένο ώστε να επιτρέπει ομότιμες οντότητες (peer entities) σε κομιστές πηγής (source host) και κομιστές προορισμού (destination host) να εγκαταστήσουν μία συνομιλία. Σε αυτό το επίπεδο έχουν οριστεί δύο απάκρο σ΄ άκρο (end-to-end) πρωτόκολλα. Το πρώτο από τα δύο, το TCP (Transmission Control Protocol) είναι ένα αξιόπιστο συνδεσμοστραφές (connection-oriented) πρωτόκολλο όπου επιτρέπει σε μία ακολουθία byte προερχόμενη από ένα μηχάνημα να παραδοθεί σε οποιοδήποτε άλλο στο Internet, χωρίς λάθη. Τεμαχίζει την εισερχόμενη ακολουθία από byte σε διακριτά μηνύματα και τα περνάει στο κατώτερο επίπεδο δικτύου (network layer). Στον προορισμό τους τα μηνύματα συναθροίζονται από την αντίστοιχη TCP διεργασία (process) στην αρχική ακολουθία byte. To TCP ελέγχει επίσης την ροή των μηνυμάτων, ώστε ένας γρήγορος αποστολέας να μην καταπνίξει έναν αργό δέκτη με περισσότερα μηνύματα απ΄ ότι αυτός μπορεί να χειριστεί. Το δεύτερο πρωτόκολλο του επιπέδου μεταφοράς είναι το UDP (User Datagram Protocol). Πρόκειται για ένα αναξιόπιστο, χωρίς σύνδεση (connectionless) πρωτόκολλο για εφαρμογές όπου δεν χρειάζονται την ακολουθιακή πιστότητα των μηνυμάτων και τον έλεγχο ροής του TCP. Οι εφαρμογές αυτές παρέχουν δικούς τους μηχανισμούς μεταφοράς όπου η άμεση παράδοση κρίνεται πιο σημαντική από την ορθή (χωρίς λάθη) παράδοση του TCP. Τέτοιες εφαρμογές έχουν να κάνουν με τη μετάδοση φωνής ή video. Το TCP όμως, παρέχει σημαντικά περισσότερες δυνατότητες σε εφαρμογές, απ΄ ότι το UDP. Αξιοσημείωτα είναι, ο έλεγχος ροής, η ανάκαμψη λαθών και η αξιοπιστία. Τα περισσότερα πρωτόκολλα εφαρμογής χρήστη όπως το Telnet, και το FTP χρησιμοποιούν ως πρωτόκολλο μεταφοράς το TCP. 13
20

Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Aug 30, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 Το Πρωτόκολλο TCP (Transmission Control Protocol)

Η υλοποίηση του πρωτοκόλλου µεταφοράς TCP είναι προσανατολισµένη για

ενσύρµατα δίκτυα δεδοµένων παρέχοντας µια ασφαλή µεταφορά δεδοµένων µεταξύ

σταθερών σταθµών επικοινωνίας. Η εφαρµογή του TCP έχει επεκταθεί σε κινητούς

σταθµούς παρέχοντας την αντίστοιχη υπηρεσία µε κάποιους όµως περιορισµούς στην

απόδοση. Αυτό το κεφάλαιο περιγράφει την λειτουργία του TCP τους µηχανισµούς

µετάδοσης, ελέγχου ροής και τους αλγορίθµους συµφόρησης που αυτό εφαρµόζει καθώς

και τις διάφορες εκδόσεις του πρωτοκόλλου.

1.1 Επίπεδο Μεταφοράς (Transport Layer)

Σύµφωνα µε το µοντέλο αναφοράς TCP/IP [1], το επίπεδο µεταφοράς (transport layer)

είναι σχεδιασµένο ώστε να επιτρέπει οµότιµες οντότητες (peer entities) σε κοµιστές

πηγής (source host) και κοµιστές προορισµού (destination host) να εγκαταστήσουν µία

συνοµιλία. Σε αυτό το επίπεδο έχουν οριστεί δύο απ’ άκρο σ΄ άκρο (end-to-end)

πρωτόκολλα. Το πρώτο από τα δύο, το TCP (Transmission Control Protocol) είναι ένα

αξιόπιστο συνδεσµοστραφές (connection-oriented) πρωτόκολλο όπου επιτρέπει σε µία

ακολουθία byte προερχόµενη από ένα µηχάνηµα να παραδοθεί σε οποιοδήποτε άλλο στο

Internet, χωρίς λάθη. Τεµαχίζει την εισερχόµενη ακολουθία από byte σε διακριτά

µηνύµατα και τα περνάει στο κατώτερο επίπεδο δικτύου (network layer). Στον

προορισµό τους τα µηνύµατα συναθροίζονται από την αντίστοιχη TCP διεργασία

(process) στην αρχική ακολουθία byte. To TCP ελέγχει επίσης την ροή των µηνυµάτων,

ώστε ένας γρήγορος αποστολέας να µην καταπνίξει έναν αργό δέκτη µε περισσότερα

µηνύµατα απ΄ ότι αυτός µπορεί να χειριστεί. Το δεύτερο πρωτόκολλο του επιπέδου

µεταφοράς είναι το UDP (User Datagram Protocol). Πρόκειται για ένα αναξιόπιστο,

χωρίς σύνδεση (connectionless) πρωτόκολλο για εφαρµογές όπου δεν χρειάζονται την

ακολουθιακή πιστότητα των µηνυµάτων και τον έλεγχο ροής του TCP. Οι εφαρµογές

αυτές παρέχουν δικούς τους µηχανισµούς µεταφοράς όπου η άµεση παράδοση κρίνεται

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

να κάνουν µε τη µετάδοση φωνής ή video. Το TCP όµως, παρέχει σηµαντικά

περισσότερες δυνατότητες σε εφαρµογές, απ΄ ότι το UDP. Αξιοσηµείωτα είναι, ο έλεγχος

ροής, η ανάκαµψη λαθών και η αξιοπιστία. Τα περισσότερα πρωτόκολλα εφαρµογής

χρήστη όπως το Telnet, και το FTP χρησιµοποιούν ως πρωτόκολλο µεταφοράς το TCP.

13

Page 2: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

∆ύο διεργασίες όπου επικοινωνούν µεταξύ τους πάνω από µία σύνδεση του TCP

φαίνεται στο Σχήµα 1.

∆ιεργασία 1

TCP

port m . . .. . .

IP

∆ιεργασία 2

TCP

port n . . .. . .

IP

TCP σύνδεση

IP πακέτα

Σχήµα 1:TCP σύνδεση µεταξύ διεργασιών

1.2 Το Μοντέλο TCP

To TCP είναι ειδικά σχεδιασµένο, ώστε να παρέχει µία αξιόπιστη απ’ άκρο σ’ άκρο

ροή δεδοµένων, πάνω σε ένα αναξιόπιστο διαδίκτυο. Ένα διαδίκτυο διαφέρει από ένα

δίκτυο συγκεκριµένης µορφής [6], διότι απαρτίζεται από τµήµατα που έχουν

διαφορετικές παραµέτρους όπως τοπολογία, εύρος καναλιού (bandwidth),

καθυστερήσεις, µέγεθος πακέτων κ.α. Το TCP προσαρµόζεται δυναµικά στις

ιδιαιτερότητες του διαδικτύου και εµφανίζεται ανθεκτικό στην αντιµετώπιση διαφόρων

τέτοιων προβληµάτων. Το TCP καθορίζεται επίσηµα από το [7] ενώ κάποιες

διευκρινήσεις και διορθώσεις που προέκυψαν στη συνέχεια εµφανίζονται στο [44].

Προεκτάσεις του πρωτοκόλλου δίνονται στο [54].

Κάθε µηχάνηµα που υποστηρίζει το TCP έχει και µία TCP οντότητα επιπέδου

µεταφοράς είτε ως πρόγραµµα είτε ως µέρος του kernel η οποία διαχειρίζεται τις TCP

ροές και ρυθµίζει την διεπαφή µε το κατώτερο επίπεδο IP. Μία TCP οντότητα δέχεται

µία ροή δεδοµένων χρήστη από τοπικές διεργασίες, τη σπάει σε τµήµατα µέχρι 64Κ

(στην πράξη, συνήθως µέχρι 1500 byte) και στέλνει κάθε τµήµα σαν ξεχωριστό πακέτο

14

Page 3: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 - Το Πρωτόκολλο TCP

IP. Όταν πακέτα IP που περιέχουν δεδοµένα TCP καταφθάνουν σε ένα µηχάνηµα τότε

αυτά παραδίδονται στην οντότητα του TCP όπου επανασχηµατίζει την αρχική ροή

δεδοµένων. Το επίπεδο δικτύου δεν παρέχει καµία εγγύηση, ότι τα πακέτα IP θα

παραδοθούν σωστά και στην σειρά µε την οποία µεταδόθηκαν. Έτσι το TCP θα πρέπει

να φροντίσει για επαναµεταδόσεις λανθασµένων ή χαµένων πακέτων όπως και για την

αναδιάταξη των µηνυµάτων στη σωστή σειρά.

Κάθε byte σε µία TCP σύνδεση έχει ένα µοναδικό 32άµπιτο αριθµό ακολουθίας

(sequence number). Αυτοί οι αριθµοί ακολουθίας χρησιµοποιούνται για τις επιβεβαιώσεις

(acknowledgement) και για τον µηχανισµό του παραθύρου.

Οι TCP οντότητες του αποστολέα και του δέκτη ανταλλάσσουν δεδοµένα µε τη

µορφή πακέτων (segment). Ένα πακέτο αποτελείται από µία επικεφαλίδα σταθερού

µεγέθους 20-byte ακολουθούµενο από µηδενικά ή περισσότερα byte δεδοµένων. Το TCP

αποφασίζει πόσο θα είναι το µέγεθος κάθε πακέτου. Μπορεί είτε να καταχωρήσει

δεδοµένα από πολλά γραψίµατα σε ένα πακέτο είτε να σπάσει τα δεδοµένα από ένα

γράψιµο σε πολλά πακέτα. ∆ύο περιορισµοί καθορίζουν το µέγεθος κάθε πακέτου. Ο

πρώτος περιορισµός είναι ο διαθέσιµος χώρος του IP πακέτου ο οποίος δεν πρέπει να

ξεπερνά τα 65.535 byte. Ο δεύτερος αφορά την µέγιστη µονάδα µεταφοράς (Maximum

Transfer Unit – MTU) ενός δικτύου όπου µέσα σε αυτή θα πρέπει να χωράει κάθε πακέτο

του TCP. Αν ένα TCP πακέτο καλύπτει τον περιορισµό του MTU ενός δικτύου τότε

ενθυλακώνεται στο IP πακέτο χωρίς να τεµαχιστεί ενώ όταν υπερβαίνει τον περιορισµό

MTU τότε τεµαχίζεται σε περισσότερα από ένα πακέτα.

Ο βασικός µηχανισµός που εφαρµόζουν οι οντότητες του TCP είναι το κυλιόµενο

παράθυρο. Όταν ο αποστολέας µεταδίδει ένα πακέτο αρχίζει ένας χρονοµετρητής. Όταν

το πακέτο φθάσει στον προορισµό, η οντότητα TCP του δέκτη στέλνει ένα πακέτο στον

αποστολέα, συµπεριλαµβάνοντας σε αυτό έναν αριθµό επιβεβαίωσης ίσο µε τον επόµενο

αριθµό της ακολουθίας δεδοµένων που περιµένει να δεχτεί. Εάν ο χρονοµετρητής του

αποστολέα εκπνεύσει προτού έρθει η επιβεβαίωση τότε το πακέτο επαναµεταδίδεται.

Στην περίπτωση όπου κάποιο πακέτο τεµαχιστεί από έναν δροµολογητή δικτύου που

υποστηρίζει µικρότερα MTU από αυτά των διασυνδεµένων δικτύων, τότε είναι πιθανόν

κάποια πακέτα να καθυστερήσουν να παραδοθούν στον δέκτη ή ακόµα και να χαθούν.

Έτσι λοιπόν κάποια πακέτα που φθάνουν στον δέκτη µε λάθος σειρά δεν µπορούν να

15

Page 4: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

επιβεβαιωθούν επειδή εκείνα που προηγούνται δεν έχουν ακόµα παραδοθεί. Τα πακέτα

µπορεί ακόµα να καθυστερήσουν τόσο, ώστε ο χρονοµετρητής να προκαλέσει την

επαναµετάδοση αυτού του πακέτου. Εάν ένα πακέτο που επαναµεταδίδεται

δροµολογηθεί από ένα άλλο µονοπάτι από αυτό του αρχικού πακέτου και τεµαχιστεί

διαφορετικά, τότε τµήµατα αυτού πακέτου και του αρχικού παραδίδονται σποραδικά

στον δέκτη, απαιτώντας έτσι µία προσεκτική διαχείριση ώστε να ανακτηθεί το αρχικό

πακέτο. Τέλος, λόγω του ότι το Internet δοµείται από την διασύνδεση ποικίλων δικτύων,

ενδέχεται κάποιο πακέτο να διαπερνάει, περιστασιακά κατά τη διαδροµή του µέσα από

δίκτυα που παρουσιάζουν συµφόρηση.

1.3 Κανόνας του Παραθύρου

Ένα απλό πρωτόκολλο µεταφοράς µπορεί να εφαρµόσει τον ακόλουθο κανόνα. Για

κάθε πακέτο που στέλνει να περιµένει µία επιβεβαίωση από τον δέκτη προτού

προχωρήσει στην µετάδοση του επόµενου. Εάν η επιβεβαίωση δεν έρθει µέσα σε κάποιο

χρονικό πλαίσιο, το πακέτο επαναµεταδίδεται. Ο µηχανισµός αυτός εγγυάται την

αξιοπιστία του πρωτοκόλλου, αλλά χρησιµοποιεί µόνο ένα τµήµα του διαθέσιµου εύρους

του δικτύου.

∆ιαφορετικά, ένα πρωτόκολλο µεταφοράς µπορεί να διευρύνει τον αριθµό των

πακέτων που µεταδίδονται κάθε φορά από τον αποστολέα. Έτσι ο αποστολέας µπορεί να

στείλει οµαδικά όλα τα πακέτα που είναι στο παράθυρο χωρίς να λάβει επιβεβαίωση για

κάθε ένα από αυτά. Για κάθε πακέτο που αποστέλλεται ενεργοποιείται ένας

χρονοµετρητής. Ο δέκτης πρέπει να επιβεβαιώσει τα πακέτα που λαµβάνει

επιδεικνύοντας τον αριθµό ακολουθίας του τελευταίου σωστού πακέτου. Κάθε φορά που

ο δέκτης παίρνει µία επιβεβαίωση για ένα πακέτο, ολισθαίνει το παράθυρο κατά ένα

πακέτο προς τα δεξιά. Στο Σχήµα 2 φαίνεται ο µηχανισµός του παραθύρου. Στην αρχή ο

αποστολέας µπορεί να στείλει µέχρι τα 5 πρώτα πακέτα. Μόλις λάβει επιβεβαίωση για το

πακέτο µε αριθµό ακολουθίας 1 τότε το παράθυρο ολισθαίνει κατά µία θέση δεξιά και

µεταδίδει το πακέτο µε αριθµό 6. Στην περίπτωση που ο αποστολέας δεν λάβει

επιβεβαίωση για το δεύτερο πακέτο (ACK2), το παράθυρο θα παραµείνει στην θέση

1(Σχήµα 2β). Στην πραγµατικότητα αφού ο δέκτης δεν έλαβε το πακέτο 2 θα

επιβεβαιώσει τα πακέτα 3, 4 και 5 µε ACK 1 καθώς το πακέτο 1 ήταν το τελευταίο της

ακολουθίας που έλαβε. Στην πλευρά του αποστολέα θα εκπνεύσει ο χρονοµετρητής και

θα δώσει το έναυσµα για επαναµετάδοση του πακέτου 2. Όταν αυτό το πακέτο 2 ληφθεί

16

Page 5: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 - Το Πρωτόκολλο TCP

τώρα από τον δέκτη θα προκαλέσει την επιβεβαίωση µε αριθµό 5 (ACK 5), καθώς όλα

τα πακέτα από το 1 µέχρι το 5 έχουν παραδοθεί σωστά. Κατά την λήψη του ACK 5 ο

αποστολέας ολισθαίνει το παράθυρο τέσσερις θέσεις δεξιά. Στην άλλη περίπτωση που το

πακέτο 2 ληφθεί από τον δέκτη και η επιβεβαίωση του (ACK2) χαθεί, ο αποστολέας θα

δεχθεί την επιβεβαίωση για το επόµενο πακέτο 3 που έχει ήδη παραδοθεί. Η επιβεβαίωση

ACK 3 συµπεριλαµβάνει όλα τα πακέτα µέχρι και το 3 και ο αποστολέας ολισθαίνει το

παράθυρο δεξιά µέχρι το πακέτο 4 όπου εκκρεµεί ακόµα η επιβεβαίωση του. Ο

µηχανισµός του παραθύρου εξασφαλίζει αξιόπιστη µετάδοση, καλύτερη χρήση του

εύρους καναλιού του δικτύου και έλεγχο ροής. Όσον αφορά τον έλεγχο ροής, ο δέκτης

δεν θα επιβεβαιώσει αµέσως κάθε πακέτο που λαµβάνει, µέχρι ότου εξασφαλίσει ότι

διαθέτει ελεύθερο χώρο στην µνήµη προσωρινής αποθήκευσης (buffer) και στο

παράθυρο της επικοινωνίας µε τον αποστολέα.

1 2 3 4 5 6 7 8 9 . . . 1 2 3 4 5 6 7 8 9 . . .

πακέτα

παράθυρο Ολισθαίνον παράθυρο

πακέτα

(β)(α)

Σχήµα 2:Μηχανισµός παραθύρου

Αυτοί οι κανόνες του παραθύρου εφαρµόζονται και στο TCP πρωτόκολλο µε µικρές

διαφορές. Η πρώτη αφορά την λειτουργία του παραθύρου σε επίπεδο byte. Από την

στιγµή που το TCP εγκαθιστά συνδέσεις για την µεταφορά µίας ροής δεδοµένων οι

αριθµοί ακολουθίας αντιστοιχούν στα byte αυτής της ροής. Έτσι τα πακέτα που

στέλνονται και οι επιβεβαιώσεις τους µεταφέρουν αριθµούς ακολουθίας byte και το

µέγεθος του παραθύρου εκφράζεται σε πλήθος byte αντί πακέτων. Η ροή δεδοµένων

στον αποστολέα έχει την µορφή που φαίνεται στο Σχήµα 3. Όπου Α είναι τα byte

δεδοµένων που έχουν επιβεβαιωθεί µέχρι τώρα. Β είναι αυτά που έχουν σταλεί και δεν

έχουν ακόµα επιβεβαιωθεί. C είναι τα byte που µπορούν να σταλούν χωρίς

προηγουµένως να υπάρχει κάποια επιβεβαίωση και D είναι τα byte δεδοµένων που δεν

17

Page 6: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

µπορούν ακόµα να σταλούν.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 . . .

Παράθυρο σε µέγεθος δεδοµένων byte

A B C D

Σχήµα 3:O µηχανισµός του παραθύρου στο TCP

1.4 Επιβεβαιώσεις και Επαναµεταδόσεις

Το TCP στέλνει δεδοµένα µε µεταβλητό µήκος πακέτων. Οι αριθµοί ακολουθίας

βασίζονται στην µέτρηση των byte. Οι επιβεβαιώσεις καθορίζουν τον αριθµό ακολουθίας

του byte όπου ο δέκτης περιµένει να δεχτεί ώστε να συνεχίσει στην επεξεργασία των

δεδοµένων που του αποστέλλονται. Ας θεωρήσουµε ένα πακέτο το οποίο χάνεται ή

παραδίδεται µε λάθη. Σε αυτή την περίπτωση ο δέκτης θα αποστείλει µία επιβεβαίωση

που θα αναφέρεται στο πρώτο byte του χαµένου πακέτου, πιστοποιώντας συγχρόνως και

όλα τα προηγούµενα πακέτα που έχουν παραδοθεί σύµφωνα µε την ακολουθία

δεδοµένων. Ο αποστολέας θα σταµατήσει την µετάδοση των πακέτων µόλις αποστείλει

όλα τα byte που του καθορίζει το παράθυρο. Τελικά ο χρονοµετρητής θα εκπνεύσει και

το χαµένο πακέτο θα επαναµεταδοθεί. Το Σχήµα 4 παρουσιάζει ένα παράδειγµα όπου το

µέγεθος του παραθύρου είναι 1500 byte και κάθε πακέτο περιλαµβάνει 500 byte

δεδοµένων.

Το πρόβληµα που ανακύπτει είναι πως ο αποστολέας δεν γνωρίζει ότι το πακέτο 2 δεν

έχει ληφθεί από τον δέκτη όπως και για τα άλλα πακέτα 3 και 4. Ο αποστολέας θα

µπορούσε τουλάχιστον να στείλει το πακέτο 2 όπως επίσης και τα 3,4 καθότι βρίσκονται

µαζί στο τρέχον παράθυρο. Σε αυτό το σηµείο έχουµε δύο περιπτώσεις. Στην πρώτη,

υποθέτουµε ότι το πακέτο 3 έχει παραδοθεί και δεν γνωρίζουµε τίποτα για το πακέτο 4.

Θα µπορούσε να έχει παραδοθεί αλλά από την στιγµή που δεν έχουµε επιβεβαίωση

18

Page 7: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 - Το Πρωτόκολλο TCP

ακόµα, µπορεί να θεωρηθεί χαµένο. Στην δεύτερη περίπτωση, υποθέτουµε ότι το πακέτο

3 έχει χαθεί µόλις ο αποστολέας δεχθεί ACK 1500 ύστερα από την παράδοση του

πακέτου 4 στο δέκτη. Κάθε υλοποίηση του TCP είναι ελεύθερη να αντιδράσει µε τον

δικό της τρόπο στο ενδεχόµενο ενός timeout που θα υποδείξει ο χρονοµετρητής. Στο

παράδειγµα µας θα µπορούσε να επαναµεταδώσει µόνο το πακέτο 2, αλλά στην δεύτερη

περίπτωση θα περίµενε πάλι ώσπου να εκπνεύσει ο χρονοµετρητής για το πακέτο 3. Σε

αυτό το ενδεχόµενο χάνουµε όλα τα πλεονεκτήµατα της ρυθµοαπόδοσης (throughput)

του µηχανισµού παραθύρου. ∆ιαφορετικά, το TCP θα µπορούσε να επανεκπέµψει όλα τα

πακέτα που είναι στο τρέχον παράθυρο. Σε οποιαδήποτε περίπτωση ανάκαµψης της

απώλειας πακέτων χάνεται η µέγιστη ρυθµοαπόδοση του πρωτοκόλλου.

∆έκτηςΑποστολέας

Λαµβάνει το ACK 1500το οποίο όµως δεν ολισθαίνει το παράθυρο

. . . . . . .εκδηλώνεται timeout για το πακέτο 2και γίνεται επαναµετάδοση

∆έχεται ένα από τα πακέτα και απαντάει µε ACK 1500 (περιµένει ακόµα το byte 1500)

Πακέτο 4 (ακολ.2500)

Αναµένοντας για ACK, το παράθυρο έφθασε στο όριο του.

Πακέτο 3 (ακολ.2000)

///Χάνεται

Πακέτο 2 (ακολ.1500)

Λαµβάνει ACK 1500,Ολισθαίνει το παράθυρο

∆έχεται 1000, στέλνει ACK 1500Πακέτο 1 (ακολ.1000)

Σχήµα 4:TCP ∆ιαδικασία επιβεβαίωσης και επαναµετάδοσης

1.5 TCP Χρονοµετρητές

Για να λειτουργήσει το TCP, χρησιµοποιεί πολλούς χρονοµετρητές (τουλάχιστον

εννοιολογικά). Ο σηµαντικότερος από αυτούς είναι ο χρονοµετρητής επαναµετάδοσης

(retransmission timer). Όταν ένα πακέτο αποστέλλεται, ενεργοποιείται ένας

χρονοµετρητής. Εάν το πακέτο επιβεβαιωθεί (µε την λήψη ενός ACK) προτού εκπνεύσει

ο χρονοµετρητής, τότε σταµατάει η χρονοµέτρηση. Αντίθετα, όταν εκπνεύσει ο

χρονοµετρητής προτού ληφθεί η επιβεβαίωση, τότε το πακέτο επαναµεταδίδεται και ο

19

Page 8: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

χρονοµετρητής ενεργοποιείται ξανά. Το ερώτηµα που ανακύπτει αφορά το χρονικό

διάστηµα στο οποίο θα εκπνεύσει ο χρονοµετρητής και θα σηµάνει ένα timeout. Εάν το

διάστηµα του timeout είναι πολύ µικρό τότε ενδέχεται τα πακέτα να επαναµεταδοθούν

άσκοπα κατακλύζοντας το δίκτυο µε άχρηστα πακέτα. Από την άλλη εάν το διάστηµα

του timeout είναι πολύ µεγάλο, τότε η απόδοση του πρωτοκόλλου θα υστερεί λόγω

καθυστέρησης στην επαναµετάδοση των χαµένων πακέτων. Η απάντηση δίνεται από

έναν δυναµικό αλγόριθµο ο οποίος σταθερά προσαρµόζει το διάστηµα του timeout

βασιζόµενος σε συνεχείς µετρήσεις της απόδοσης του δικτύου. Ο αλγόριθµος αυτός που

γενικά χρησιµοποιείται από το TCP είναι του Jacobson [8] και λειτουργεί ως ακολούθως.

Για κάθε σύνδεση, το TCP διατηρεί την τρέχουσα καλύτερη εκτίµηση της µεταβλητής

RTT (round trip time). Η µεταβλητή αντιστοιχεί στο συνολικό χρονικό διάστηµα που

διαρκεί για ένα πακέτο να παραδοθεί στον δέκτη και να επιστραφεί µία επιβεβαίωση

πίσω στον αποστολέα. Είναι δηλαδή, ο χρόνος της κυκλικής διαδροµής από τον

αποστολέα στον δέκτη και πίσω πάλι στον αποστολέα σε ένα πρωτόκολλο µε

επιβεβαιώσεις. Μόλις ένα πακέτο αποστέλλεται, αµέσως ενεργοποιείται ο

χρονοµετρητής. Αυτός µετράει τον χρόνο απόκρισης της επιβεβαίωσης ενώ παράλληλα,

µετά την πάροδο του διαστήµατος timeout, δίνει το έναυσµα για επαναµετάδοση. Εάν η

επιβεβαίωση επιστραφεί προτού εκπνεύσει ο χρονοµετρητής, το TCP κρατάει αυτό το

χρονικό διάστηµα σε µία µεταβλητή Μ. Βάση αυτής τις τιµής, γίνεται η τρέχουσα

εκτίµηση της µεταβλητής RTT σύµφωνα µε την φόρµουλα

RTT=α⋅RTT+(1-α)⋅Μ

όπου α είναι ένας συντελεστής εξοµάλυνσης, ο οποίος καθορίζει πόσο βάρος δίνεται στις

παλαιότερες τιµές. Τυπικά το α ισούται µε 7/8.

Ακόµα και µε το υπολογισµό της τιµής του RTT, η επιλογή του κατάλληλου timeout

είναι µία µη τετριµµένη διαδικασία. Συνήθως το TCP χρησιµοποιεί ένα συντελεστή β για

να αντιστοιχήσει το timeout σε χρόνο β⋅RTT. H κατάλληλη επιλογή του β έχει µία

ιδιοτυπία. Στις αρχικές υλοποιήσεις του TCP, το β ήταν µία σταθερά ίση µε 2 αλλά στην

πορεία αποδείχτηκε ότι η σταθερή τιµή δεν ανταποκρίνεται καλά σε µεγάλες

διακυµάνσεις του εκτιµώµενου χρόνου. Ο Jacobson πρότεινε το β να γίνει κατά

προσέγγιση ανάλογο της σταθερής απόκλισης της συνάρτησης πυκνότητας πιθανότητας

του χρόνου επιστροφής της επιβεβαίωσης. Έτσι µεγάλη διακύµανση σηµαίνει µεγάλο β

και αντίστροφα. Ειδικότερα, πρότεινε την µέση απόκλιση (mean deviation) ως ένα

20

Page 9: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 - Το Πρωτόκολλο TCP

πρόχειρο εκτιµητή (cheap estimator) της σταθερής απόκλισης (standard deviation). Ο

αλγόριθµος απαιτεί την παρακολούθηση εξοµάλυνσης µιας άλλης µεταβλητής D, της

απόκλισης. Όποτε µία επιβεβαίωση επιστρέφεται υπολογίζεται η απόλυτη διαφορά του

χρόνου µεταξύ της αναµενόµενης και της τρέχουσας τιµής, |RTT-M|. Η µεταβλητή D

ενηµερώνεται αφού πρώτα εξοµαλυνθεί µε ένα συντελεστή α όπως φαίνεται στην

φόρµουλα

D=α⋅D+(1-α)⋅|RTT-M|

O συντελεστής α µπορεί να είναι ο ίδιος ή διαφορετικός από την αντίστοιχη φόρµουλα

εξοµάλυνσης του RTT. Καθότι το D δεν είναι ταυτόσηµο µε την ίδια την σταθερή

απόκλιση, είναι χρήσιµο όπως υπέδειξε ο Jacobson, το D να υπολογίζεται µόνο µε

πράξεις (πρόσθεση, αφαίρεση και ολίσθηση) ακεραίων. Οι περισσότερες υλοποιήσεις

τώρα χρησιµοποιούν αυτό τον αλγόριθµο και θέτουν το διάστηµα timeout σύµφωνα µε

τον υπολογισµό

Timeout=RTT+4⋅D

Η επιλογή του παράγοντα 4 στην εξίσωση είναι κάπως αυθαίρετο αλλά έχει δύο

πλεονεκτήµατα. Πρώτον, ο υπολογισµός µπορεί να γίνει µε µία απλή ολίσθηση.

∆εύτερον µειώνει στο ελάχιστο τα timeout και τις άσκοπες επαναµεταδόσεις, καθώς

µόλις το 1% των πακέτων επιστρέφουν επιβεβαιώσεις αργότερα κατά 4 φορές τον χρόνο

της σταθερής απόκλισης.

Ένας άλλος χρονοµετρητής που χρησιµοποιείται από το TCP είναι ο χρονοµετρητής

διατήρησης (persistence timer) ο οποίος εφαρµόζεται στον αλγόριθµο του Karn . Αυτός ο

αλγόριθµος καλύπτει περιπτώσεις όπου ένα πακέτο επαναµεταδίδεται συνέχεια και οι

επιβεβαιώσεις του λαµβάνονται καθυστερηµένα. Αυτό δεν διαλευκαίνει αν η

επιβεβαίωση αντιστοιχεί στην πρώτη ή σε µία µετέπειτα επαναµετάδοση, οδηγώντας έτσι

λάθος υπολογισµούς του χρόνου RTT. Σύµφωνα µε τον αλγόριθµο, ο υπολογισµός του

RTT δεν επιχειρείται σε κάθε επαναµετάδοση πακέτου αλλά αντί αυτού, διπλασιάζεται ο

χρόνος του timeout σε κάθε αποτυχία µέχρι τα πακέτα να επιβεβαιωθούν για πρώτη

φορά. Ο χρονοµετρητής διατήρησης ενεργοποιείται στην περίπτωση όπου ο δέκτης

στέλνει ένα µήνυµα στον αποστολέα για να αναστείλει την µετάδοση διότι δεν διαθέτει

χώρο προσωρινής αποθήκευσης. Αν στην συνέχεια ο δέκτης στείλει νέο µήνυµα για να

συνεχιστεί η µετάδοση και αυτό χαθεί τότε και οι δύο περιµένουν ανενεργοί ο ένας τον

21

Page 10: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

άλλον χωρίς να ανταλλάσσουν κανένα µήνυµα. Τότε εκπνέει ο χρονοµετρητής και ο

αποστολέας στέλνει ένα µήνυµα για να εξετάσει εάν ο δέκτης έχει διαθέσιµο χώρο. Ο

δέκτης απαντάει µε σχετικό µήνυµα (µέγεθος παραθύρου) και αν ο χώρος έχει

ελευθερωθεί τότε αρχίζει η µετάδοση διαφορετικά (µηδενικό παράθυρο) ενεργοποιείται ο

χρονοµετρητής.

Κάποιες υλοποιήσεις παρέχουν έναν άλλο χρονοµετρητή (keepalive timer) όπου

διατηρούν συνδέσεις ανοικτές για σχετικά µεγάλα χρονικά διαστήµατα. Όταν δεν

υπάρχει ανταλλαγή µηνυµάτων µετά την πάροδο του χρόνου που ορίζει ο χρονοµετρητής

τότε η µία πλευρά ερευνά εάν η άλλη είναι ακόµα συνδεδεµένη. Εάν δεν υπάρξει

απάντηση από την άλλη πλευρά η σύνδεση τερµατίζεται.

1.6 TCP Αλγόριθµοι Ελέγχου Συµφόρησης

Ο αλγόριθµος ελέγχου συµφόρησης [39] του TCP εµποδίζει έναν αποστολέα να

ξεπεράσει την χωρητικότητα του δικτύου. Το TCP προσαρµόζει το ρυθµό του αποστολέα

στην χωρητικότητα του δικτύου και προσπαθεί να αποφύγει πιθανές καταστάσεις

συµφόρησης. ∆ιάφοροι αλγόριθµοι έχουν προταθεί και έχουν προστεθεί στις υλοποιήσεις

του TCP αλλά οι πιο βασικοί που θεωρούνται ως δεδοµένοι για το Internet και είναι

άµεσα συνυφασµένοι µεταξύ τους είναι οι εξής. Αργής εκκίνησης (slow start), αποφυγής

συµφόρησης (congestion avoidance), γρήγορη επαναµετάδοση (fast retransmit), γρήγορη

ανάκαµψη (fast recovery).

1.6.1 Αργή εκκίνηση

Οι παλαιότερες υλοποιήσεις του TCP θα ενεργοποιούσαν µία σύνδεση µε τον

αποστολέα να εισάγει τόσα πακέτα στο δίκτυο όσα του επιτρέπει το µέγεθος παραθύρου

του δέκτη. Αυτό δεν δηµιουργεί πρόβληµα όταν οι δύο σταθµοί βρίσκονται σε ένα

τοπικό δίκτυο, αν όµως µεσολαβούν δροµολογητές και πιο αργές συνδέσεις µεταξύ

αποστολέα και δέκτη τότε προκύπτουν προβλήµατα. Ενδέχεται λοιπόν οι ενδιάµεσοι

δροµολογητές να µην µπορέσουν να διεκπεραιώσουν τον ρυθµό του αποστολέα και να

χάσουν ορισµένα πακέτα προκαλώντας επαναµεταδόσεις πακέτων υποβαθµίζοντας έτσι

την απόδοση του πρωτοκόλλου.

Ο αλγόριθµος αργής εκκίνησης προσπαθεί να αποφύγει τέτοιες περιπτώσεις. Η

λειτουργία του βασίζεται στην παρατήρηση ότι ο ρυθµός µε τον οποίον τα πακέτα

µεταδίδονται από τον αποστολέα στο δίκτυο είναι ίσος µε τον ρυθµό των επιβεβαιώσεων

22

Page 11: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 - Το Πρωτόκολλο TCP

που επιστρέφονται από το άλλο άκρο της σύνδεσης. Ο αλγόριθµος προσθέτει ένα

επιπλέον παράθυρο στον αποστολέα, το παράθυρο συµφόρησης (congestion window -

cwnd). Όταν µία καινούργια σύνδεση εγκαθίσταται µε έναν κοµιστή (host) σε άλλο

δίκτυο το παράθυρο συµφόρησης αρχικά οριοθετείται στο µέγεθος ενός πακέτου. Κάθε

φορά που ο αποστολέας δέχεται µία επιβεβαίωση (ACK) το παράθυρο συµφόρησης

αυξάνεται κατά ένα πακέτο. Ο αποστολέας µπορεί να µεταδώσει τόσα πακέτα όσο η

ελάχιστη τιµή των δύο παραθύρων (συµφόρησης και δέκτη). Το παράθυρο συµφόρησης

είναι έλεγχος ροής που επιβάλλεται από τον αποστολέα ενώ το παράθυρο επικοινωνίας

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

συµφόρησης ακολουθεί την εκτίµηση του αποστολέα για την διαβλεπόµενη συµφόρηση

του δικτύου ενώ το άλλο παράθυρο επικοινωνίας σχετίζεται µε το ποσό του διαθέσιµου

χώρου στη µνήµη προσωρινής αποθήκευσης (buffer) του δέκτη.

O αποστολέας ξεκινάει µε την µετάδοση ενός πακέτου και στη συνέχεια αναµένει την

επιβεβαίωση του. Όταν η επιβεβαίωση ληφθεί, το παράθυρο συµφόρησης αυξάνεται σε

µέγεθος δύο πακέτων. Στην συνέχεια ο αποστολέας µπορεί να στείλει δύο πακέτα και

όταν λάβει επιβεβαίωση για αυτά τα πακέτα, τότε το παράθυρο αυξάνεται σε τέσσερα

πακέτα. Αυτό ο µηχανισµός όπως παρουσιάζεται και στο Σχήµα 5 εµφανίζει µία εκθετική

αύξηση του παραθύρου.

αποστολέας δέκτης

Σχήµα 5:Αργή εκκίνηση του TCP

23

Page 12: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

1.6.2 Αποφυγή συµφόρησης Ο αλγόριθµος υποθέτει ότι η απώλεια των πακέτων λόγω λάθους στο κανάλι είναι

πολύ µικρή, της τάξης του 1%, έτσι η απώλεια ενός πακέτου είναι δείγµα συµφόρησης

κάπου στο δίκτυο. Υπάρχουν δύο ενδείξεις για την απώλεια ενός πακέτου. Η πρώτη είναι

η εκδήλωση ενός timeout και η δεύτερη είναι τα διπλά ACK που λαµβάνει ο δέκτης. Οι

δύο αλγόριθµοι αργής εκκίνησης και αποφυγής συµφόρησης είναι ανεξάρτητοι µεταξύ

τους και µε διαφορετικές λειτουργίες. Στην πράξη όµως, υλοποιούνται και οι δύο µαζί.

Όταν κάπου στο δίκτυο έχουµε ένδειξη συµφόρησης, το TCP ρίχνει τους ρυθµούς

µετάδοσης πακέτων και στη συνέχεια ενεργοποιείται ο µηχανισµός αργής εκκίνησης

ώστε να επανακάµψει το ρυθµό. Οι αλγόριθµοι διατηρούν δύο µεταβλητές για κάθε

σύνδεση. Αυτές είναι, το παράθυρο συµφόρησης (cwnd) και το κατώφλι αργής

εκκίνησης (ssthresh – slow start threshold). O συνδυασµός των αλγορίθµων αργής

εκκίνησης και αποφυγής συµφόρησης λειτουργεί ως ακολούθως.

1. στην αρχικοποίηση µιας σύνδεσης η µεταβλητή cwnd τίθεται σε ένα πακέτο και

το ssthresh σε 65535 byte.

2. το TCP ποτέ δεν στέλνει περισσότερα δεδοµένα από την µέγιστη ελάχιστη τιµή

των δύο παραθύρων του cwnd και του δέκτη.

3. όταν προκληθεί συµφόρηση, η τιµή του ssthresh λαµβάνει το µισό του τρέχοντος

παραθύρου. Ειδικά, αν η συµφόρηση υποδηλώνεται από την εκδήλωση ενός

timeout τότε η τιµή του cwnd γίνεται ίση µε το µέγεθος ενός πακέτου.

4. κάθε φορά που επιβεβαιώνονται πακέτα από το άλλο άκρο της σύνδεσης

αυξάνεται η τιµή του cwnd. Ο ρυθµός αύξησης εξαρτάται από την συγκεκριµένη

χρονική στιγµή όπου το TCP εφαρµόζει αργή εκκίνηση ή αποφυγή συµφόρησης.

Αυτό καθορίζεται από τις τιµές των µεταβλητών. Έτσι όταν η τιµή του cwnd

είναι µικρότερη ή ίση από το κατώφλι που ορίζει η µεταβλητή ssthresh τότε το

TCP εφαρµόζει αργή εκκίνηση διαφορετικά εφαρµόζει τον µηχανισµό αποφυγής

συµφόρησης.

Ο µηχανισµός αργής εκκίνησης εξακολουθεί µέχρι το παράθυρο να πάρει την µισή

τιµή που είχε όταν την συγκεκριµένη χρονική στιγµή προκλήθηκε timeout ή διπλό ACK.

Μετά από αυτό το σηµείο εφαρµόζεται ο µηχανισµός αποφυγής συµφόρησης. Ο

µηχανισµός αργής εκκίνησης θέτει αρχικά το cwnd σε ένα πακέτο και το αυξάνει κατά

24

Page 13: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 - Το Πρωτόκολλο TCP

ένα πακέτο, κάθε φορά που δέχεται µία επιβεβαίωση (ACK). Αυτή η αύξηση αντιστοιχεί

σε εκθετική µεταβολή, πρώτα ένα πακέτο, µετά δύο, τέσσερα και ούτω καθεξής.

Ο µηχανισµός αποφυγής συµφόρησης υποδεικνύει την αύξηση του cwnd κατά

segsize*segsize/cwnd κάθε φορά που ένα ACK επιστρέφεται στον αποστολέα. Όπου

segsize είναι το µέγεθος του πακέτου εκφρασµένο σε byte και όπως και το cwnd.

Συγκρινόµενη µε την µεταβολή της αργής εκκίνησης, αυτή η αύξηση του cwnd

αντιστοιχεί σε γραµµική µεταβολή. Η αύξηση θα πρέπει να είναι το πολύ ένα πακέτο

κάθε φορά (σε αντίστοιχο χρόνο RTT, άσχετα µε το πόσα πακέτα επιβεβαιώνονται στο

χρόνο αυτό), ενώ στην αργή εκκίνηση η αύξηση γίνεται σύµφωνα µε το πλήθος των

πακέτων που επιβεβαιώνονται. Στο Σχήµα 6 παρουσιάζεται το διάγραµµα αύξησης του

cwnd όπου τον µηχανισµό αργής εκκίνησης διαδέχεται ο µηχανισµός αποφυγής

συµφόρησης.

Σχήµα 6:Αργή εκκίνηση και αποφυγή συµφόρησης του TCP

1.6.3 Γρήγορη επαναµετάδοση

Σύµφωνα µε το µηχανισµό αυτό, το TCP προσπαθεί να αποφύγει την εκδήλωση ενός

timeout προτού επαναµεταδώσει ένα χαµένο πακέτο. Ας αντιληφθούµε ότι το TCP

µπορεί δηµιουργήσει µία γρήγορη επιβεβαίωση (διπλό ACK) µόλις ο δέκτης λάβει ένα

25

Page 14: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

πακέτο µε λάθος σειρά ακολουθίας. Η ύπαρξη του διπλού ACK ενηµερώνει το άλλο

άκρο ότι ένα πακέτο έχει ληφθεί σε λάθος σειρά ενώ ταυτόχρονα υπενθυµίζει το σωστό

αριθµό ακολουθίας πακέτου που αναµένει ο δέκτης. Θα πρέπει λοιπόν, το διπλό ACK να

είναι άµεσο στην επικοινωνία των δύο άκρων.

Από την στιγµή που το TCP δεν γνωρίζει εάν το διπλό ACK είναι αποτέλεσµα της

απώλειας πακέτου ή µίας αναδιάταξης των πακέτων στο δέκτη, προτού επαναµεταδώσει

το πακέτο που του υποδεικνύει το ACK, περιµένει ώσπου να λάβει ένα µικρό αριθµό

διπλών ACK. Αν πρόκειται για αναδιάταξη πακέτων, θα υπάρξουν ένα ή δύο διπλά ACK

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

ένα νέο συνολικό ACK που θα επιβεβαιώνει όλη την ακολουθία των πακέτων. Εάν

υπάρχουν τρία ή περισσότερα διπλά ACK τότε γίνεται σαφής ένδειξη ότι ένα πακέτο από

την ακολουθία έχει χαθεί. Προτού τότε, εκπνεύσει ο χρονοµετρητής επαναµετάδοσης το

TCP εκτελεί µία επαναµετάδοση του χαµένου πακέτου. Μία σύνοψη του µηχανισµού

αυτού φαίνεται στο Σχήµα 7.

Σχήµα 7:Μηχανισµός γρήγορης επαναµετάδοσης

1.6.4 Γρήγορη ανάκαµψη

Σύµφωνα µε τον αλγόριθµο της γρήγορης ανάκαµψης, µετά από την γρήγορη

επαναµετάδοση του χαµένου πακέτου, αντί της αργής εκκίνησης εφαρµόζεται ο

26

Page 15: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 - Το Πρωτόκολλο TCP

µηχανισµός αποφυγής συµφόρησης. Αυτό είναι µία βελτίωση που επιτρέπει έναν υψηλό

βαθµό στην ρυθµαπόδοση του TCP, κάτω από µέτρια συµφόρηση και ειδικά για µεγάλα

παράθυρα.

Ο λόγος που σε αυτή την περίπτωση δεν εφαρµόζεται αργή εκκίνηση είναι ότι η

λήψη των διπλών ACK ενηµερώνει το TCP επιπλέον από την απώλεια του πακέτου.

Έτσι, την στιγµή που ο δέκτης δηµιουργεί διπλά ACK όταν λαµβάνει ένα άλλο πακέτο,

αυτό το πακέτο έχει αφήσει το δίκτυο και βρίσκεται στη µονάδα προσωρινής

αποθήκευσης του δέκτη. Αυτό σηµαίνει ότι υπάρχουν ακόµα δεδοµένα που ρέουν µεταξύ

των δύο άκρων και το TCP δεν επιθυµεί να µειώσει απότοµα την ροή εφαρµόζοντας

αργή εκκίνηση. Οι αλγόριθµοι της γρήγορης επαναµετάδοσης και ανάκαµψης

υλοποιούνται µαζί ως ακολούθως:

1. όταν λαµβάνεται το τρίτο διπλό ACK, επαναµεταδίδεται το χαµένο πακέτο και

το ssthresh τίθεται στο µισό του τρέχοντος παραθύρου συµφόρησης, cwnd,

αλλά όχι λιγότερο από δύο πακέτα. Το cwnd γίνεται όσο το ssthresh συν τρεις

φορές το µέγεθος του πακέτου. Αυτό µεγαλώνει το παράθυρο συµφόρησης µε

το πλήθος των πακέτων που έχουν εγκαταλείψει το δίκτυο και των άλλων τριών

(όσο το πλήθος των διπλών ACK) που έχουν αποθηκευτεί προσωρινά στο

buffer του δέκτη.

2. κάθε φορά που φθάνει ένα διπλό ACK, γίνεται αύξηση του cwnd κατά ένα

πακέτο αφού αυτό έχει εγκαταλείψει το δίκτυο. Επίσης ελέγχεται αν µε την νέα

τιµή του cwnd µπορεί να µεταδοθεί πακέτο.

3. όταν λαµβάνεται το επόµενο ACK που επιβεβαιώνει τα νέα δεδοµένα η τιµή

του cwnd γίνεται όσο το ssthresh στο πρώτο βήµα. Αυτό το ACK θα πρέπει να

είναι η επιβεβαίωση της επαναµετάδοσης του πρώτου βήµατος µετά από χρόνο

RTT. Επιπλέον, αυτό το ACK θα πρέπει να επιβεβαιώνει όλα τα ενδιάµεσα

πακέτα που στάλθηκαν µετά το χαµένο πακέτο και µέχρι το πρώτο διπλό ACK.

Αυτό το βήµα είναι αποφυγή συµφόρησης, καθώς το TCP ρίχνει τον ρυθµό του

στο µισό που είχε όταν συνέβη η απώλεια του πακέτου.

1.7 Εκδόσεις του Πρωτοκόλλου TCP

Στην συνέχεια παρουσιάζονται οι διάφορες εκδόσεις του πρωτοκόλλου TCP και οι

27

Page 16: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

κύριες διαφορές τους. Μία από τις κύριες λειτουργίες του TCP είναι η αποστολή από τον

δέκτη µιας επιβεβαίωσης για κάθε πακέτο που έλαβε σωστά από τον αποστολέα. Οι

επιβεβαιώσεις αυτές περιλαµβάνουν πληροφορία σχετικά µε το επόµενο πακέτο

που αναµένει ο δέκτης. Σε περίπτωσή που το πακέτο µε ακολουθιακό αριθµό m

χαθεί και τα πακέτα που το ακολουθούν φτάσουν επιτυχώς στο δέκτη, ο δέκτης στέλνει

διπλές επιβεβαιώσεις µέσω των οποίων ζητά από τον αποστολέα να στείλει το

πακέτο m. Το πλήθος των διπλών επιβεβαιώσεων εξαρτάται από τον αριθµό των

πακέτων που θα φτάσουν στον δέκτη µετά το πακέτο m. Μια επιβεβαίωση

είναι αθροιστική υπό την έννοια ότι όταν περιέχει τον αριθµό k επιβεβαιώνει όλα τα

πακέτα µέχρι αυτόν τον αριθµό. Επίσης, o δέκτης παρουσιάζει όλα τα πακέτα στο χρήστη

µε την σειρά που έφτασαν, οπότε είναι απαραίτητη η προσωρινή αποθήκευσή όσων

πακέτων φτάνουν στον δέκτή εκτός σειράς. Το µέγεθος αυτού του προσωρινού

αποθηκευτικού χώρου είναι Wrec πακέτα. Οι επιβεβαιώσεις περιέχουν πληροφορία

για το µέγεθος της προσωρινής µονάδας αποθήκευσης στο δέκτη µε αποτέλεσµα ο

µηχανισµός µετάδοσης πακέτων να εγγυάται ότι δεν θα υπάρχουν υπό µετάδοση

περισσότερα από Wrec πακέτα.

O δέκτης µεταδίδει πακέτα µε βάση τον µηχανισµό του παραθύρου. Σε

κάθε χρονική στιγµή t ο αποστολέας γνωρίζει ποια πακέτα έχουν µεταδοθεί

σωστά. Έστω ότι το A(t) αντιστοιχεί σε µια άκρη παραθύρου µετάδοσης πακέτων

όπου όλα τα πακέτα αριστερά του A(t) έχουν επιβεβαιωθεί ενώ δεν έχει ληφθεί η

επιβεβαίωση για το πακέτο δεξιά του A(t). Ακόµα, ο αποστολέας σχετίζεται µε ένα

παράθυρο W(t) έτσι ώστε την χρονική στιγµή t µόνο A(t)+W(t) πακέτα µπορούν να

υπάρχουν χωρίς να έχουν επιβεβαιωθεί. Καθώς λαµβάνονται επιβεβαιώσεις, το A(t)

αυξάνει ενώ το W(t) µεταβάλλεται µε βάση τον µηχανισµό προσαρµογής παραθύρου

που εφαρµόζει η συγκεκριµένη έκδοση του TCP. H απώλεια κάποιου πακέτου

γίνεται αντιληπτή από τον αποστολέα είτε µε την εκπνοή κάποιου χρονοµετρητή,

είτε µε τη λήψη διπλών επιβεβαιώσεων. Σε ένα ενσύρµατο δίκτυο ή απώλεια ενός

πακέτου σηµαίνει την ύπαρξη κατάστασης συµφόρησης στο δίκτυο. Αυτό έχει σαν

αποτέλεσµα την αλλαγή στο µέγεθος του παραθύρου και την επαναµετάδοση του

πακέτου που έχει χαθεί. Σε αυτή την περίπτωση, το A(t) δεν µεταβάλλεται. Επίσης, το

W(t) δεν µπορεί να αυξηθεί πέρα από το ελάχιστο των Wrec και Wm, όπου Wm είναι το

µέγιστο µέγεθος παραθύρου συµφόρησης. Στη συνέχεια υποθέτουµε ότι το W(t)

περιορίζεται µόνο από το Wm , δηλαδή Wm < Wrec .

28

Page 17: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 - Το Πρωτόκολλο TCP

Οι εκδόσεις του TCP που υπάρχουν διαφέρουν κυρίως στο τρόπο µε τον οποίο

γίνεται η διαχείριση του παραθύρου µετάδοσης πακέτων. Οι διαφορές σχετίζονται

µε τον τρόπο που µειώνεται το παράθυρο µετάδοσης πακέτου σε κάποια απώλεια

πακέτου και στον τρόπο που το παράθυρο αυτό αυξάνει όταν δεν υπάρχουν απώλειες.

Υπάρχουν πέντε διαφορετικές εκδόσεις του TCP και είναι οι εξής: TCP OldTahoe, TCP

Tahoe, TCP Reno, TCP NewReno και TCP Sack. Η διαδικασία προσαρµογής του

παραθύρου στην οποία στηρίζονται οι παραπάνω αλγόριθµοι προτάθηκε και

υλοποιήθηκε από τον Van Jacobson.

Αρχικά δίνεται µια περιγραφή του βασικού µηχανισµού προσαρµογής

παραθύρου και στην συνέχεια δίνονται τα σηµεία στα οποία διαφέρουν οι εκδόσεις του

TCP. Σε κάθε χρονική στιγµή t το παράθυρο µετάδοσης δεδοµένων του αποστολέα

δηλώνεται µε W(t) και το κατώφλι αργής εκκίνησης (slow start threshold) µε ω(t).

∆ιακρίνονται οι ακόλουθες περιπτώσεις:

• Αν W(t) < ω(t), κάθε νέα επιβεβαίωση από τον δέκτη έχει σαν αποτέλεσµα την

αύξηση του W(t) κατά ένα πακέτο. Αυτή είναι η φάση της αργής εκκίνησης

(slow start phase). Έτσι, το µέγεθος του παραθύρου διπλασιάζεται σε κάθε

RTT (round-trip time).

• Αν W(t) > ω(t), κάθε επιβεβαίωση αυξάνει το W(t) κατά 1/ W(t) όσο το W(t)

είναι µικρότερο από το παράθυρο του δέκτη. Αν το W(t) είναι ίσο µε το

παράθυρο του δέκτη, τότε παραµένει αµετάβλητο. Αυτή είναι η φάση της

αποφυγής συµφόρησης (congestion avoidance). Το αποτέλεσµα αυτής της

φάσης είναι η αύξηση του µεγέθους του παραθύρου κατά ένα πακέτο σε κάθε

RTT δοθέντος ότι το παράθυρο του αποστολέα (παράθυρο συµφόρησης)

είναι µικρότερο από το παράθυρο του δέκτη.

• Αν εκπνεύσει ο χρονοµετρητής στον δέκτη, τότε W ( t +) =1 και ω( t +)

=W ( t )/2 και η επαναµετάδοση ξεκινά από το πρώτο πακέτο που έχει

χαθεί.

Αν ένα πακέτο που µεταδίδεται από τον αποστολέα στον δέκτη χαθεί ή φτάσει στον

προορισµό του µε λάθη, τότε δεν παράγεται επιβεβαίωση. Για να είναι γνωστό πότε ένα

πακέτο πρέπει να επαναµεταδοθεί χρησιµοποιείται ένας χρονοµετρητής o οποίος

29

Page 18: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

συσχετίζεται µε το πακέτο όταν αυτό πρόκειται να µεταδοθεί. Αν o χρονοµετρητής αυτός

εκπνεύσει πριν ληφθεί επιβεβαίωση για το πακέτο, τότε το πακέτο πρέπει να

επαναµεταδοθεί. Στην συνέχεια δίνονται συγκεκριµένες λεπτοµέρειες για τις διάφορες

εκδόσεις του πρωτοκόλλου TCP.

1.7.1 TCP OldTahoe O αλγόριθµος προσαρµογής του παραθύρου [8] είναι αυτός που περιγράφηκε

προηγουµένως. Η απώλεια ενός πακέτου γίνεται αντιληπτή µε την εκπνοή ενός

χρονοµετρητή. Εποµένως, όταν συµβεί απώλεια ενός πακέτου o αποστολέας πρέπει να

περιµένει µέχρι να λήξει o χρονοµετρητής, κάτι που µειώνει τις επιδόσεις του

πρωτοκόλλου.

1.7.2 TCP Tahoe Ενώ στο TCP OldTahoe η απώλεια ενός πακέτου γίνεται αντιληπτή µε την λήξη ενός

χρονοµετρητή, στο TCP Tahoe [9] η απώλεια ενός πακέτου µπορεί επίσης να γίνει

αντιληπτή µε την λήψη Ω συνεχόµενων διπλών επιβεβαιώσεων. Σε µια τέτοια

περίπτωση, o δέκτης αντιδρά σαν να έληξε κάποιος χρονοµετρητής και προχωρά στην

επαναµετάδοση του πακέτου που έχει χαθεί. Μια διπλή επιβεβαίωση σηµατοδοτεί είτε

την απώλεια ενός πακέτου είτε ότι ένα πακέτο καθυστέρησε µε αποτέλεσµα η λήψη του

να γίνει εκτός σειράς. Για να γίνει διαχωρισµός των δύο περιπτώσεων, ο αποστολέας να

περιµένει µέχρι να λάβει τρεις διπλές επιβεβαιώσεις για το ίδιο πακέτο. Έτσι στις

περισσότερες υλοποιήσεις το Ω είναι 3.

Το παράθυρο του αποστολέα και το κατώφλι αργής εκκίνησης µεταβάλλονται µε τον

τρόπο που περιγράφηκε παραπάνω. Η µέθοδος ανίχνευσης απώλειας πακέτου µε την

χρήση διπλών επιβεβαιώσεων ονοµάζεται γρήγορη επαναµετάδοση (fast retransmit).

Όπως είναι φανερό, αυτή η µέθοδος µπορεί να οδηγήσει σε καλύτερη χρήση του

καναλιού και καλύτερη ρυθµαπόδοση. Ενδέχεται όµως σε ορισµένες περιπτώσεις να

επαναµεταδοθούν πακέτα τα οποία έχουν ληφθεί σωστά από τον δέκτη.

1.7.3 TCP Reno

Αυτή η έκδοση [10] επεκτείνει την διαδικασία γρήγορης επαναµετάδοσης

χρησιµοποιώντας την γρήγορη ανάκαµψη (fast recovery). Μόλις γίνει ανίχνευση της

απώλειας κάποιου πακέτου από την διαδικασία γρήγορης επαναµετάδοσης, o

αποστολέας στέλνει το πακέτο που χάθηκε και µειώνει το παράθυρο συµφόρησης στο

µισό. Στην διαδικασία γρήγορης ανάκαµψης, αντί ο αποστολέας να µπαίνει στην φάση

30

Page 19: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

Κεφάλαιο 1 - Το Πρωτόκολλο TCP

αργής εκκίνησης χρησιµοποιεί επιπλέον εισερχόµενες επιβεβαιώσεις για την αποστολή

νέων πακέτων. Έτσι, αν η απώλεια του πακέτου έγινε σε ένα παράθυρο µε κατώφλι σ,

τότε ω(t+) =σ/2 και W(t+)=ω(t+)+Ω όπου η πρόσθεση του Ω γίνεται γιατί Ω πακέτα

µεταδόθηκαν επιτυχώς και οδήγησαν στις Ω διπλές επιβεβαιώσεις.

Όταν ο αποστολέας µεταδώσει και πάλι το πακέτο που χάθηκε περιµένει την

επιβεβαίωση για το πακέτο αυτό. Αν ο αποστολέας λάβει επιπλέον διπλές επιβεβαιώσεις

όσο περιµένει για την συγκεκριµένη επιβεβαίωση, αυξάνει το W(t) κατά 1 για κάθε διπλή

επιβεβαίωση. Με αυτόν τον τρόπο ο αποστολέας αυξάνει το παράθυρό του µε το πλήθος

των διπλών επιβεβαιώσεων που έλαβε. Όταν ληφθεί πλήθος διπλών επιβεβαιώσεων ίσο

µε το µισό του παραθύρου, o αποστολέας στέλνει ένα νέο πακέτο για κάθε διπλή

επιβεβαίωση που λαµβάνει. ∆ηλαδή, µέχρι το σ/2 + πλήθος διπλών επιβεβαιώσεων

ξεπεράσει το σ, o αποστολέας δεν µπορεί να στείλει νέα πακέτα. Μόλις ληφθεί µια

επιβεβαίωση για καινούργια δεδοµένα (recovery ACK) o αποστολέας τερµατίζει την

διαδικασία γρήγορης ανάκαµψης και ξεκινά την µετάδοση µε W(t+) = ω(t+) = σ/2 .

Όταν ένα πακέτο από το παράθυρο του αποστολέα χαθεί, τότε η επιβεβαίωση για την

πρώτη επαναµετάδοση θα ολοκληρώσει την ανάκαµψη. Αλλά αν υπάρξουν πολλές

απώλειες από ένα παράθυρο τότε η επιβεβαίωση από την πρώτη επαναµετάδοση οδηγεί

σε µερική επιβεβαίωση. Μια µερική επιβεβαίωση βγάζει τον αποστολέα από την

διαδικασία γρήγορης ανάκαµψης και µειώνει το µέγεθος του παραθύρου σε αυτό του

παραθύρου συµφόρησης. Αν το παράθυρο επιτρέπει στον αποστολέα την µετάδοση

επιπλέον πακέτων που µπορούν να προκαλέσουν νέες διπλές επιβεβαιώσεις, o

αποστολέας µπορεί να µπει και πάλι στην διαδικασία γρήγορης ανάκαµψης και να

επαναλάβει τα ίδια βήµατα για το επόµενο πακέτο που έχει χαθεί. Αλλά αν το πλήθος

των διπλών επιβεβαιώσεων δεν είναι αρκετό, η ανάκαµψη σταµατά και o αποστολέας

πρέπει να περιµένει για την εκπνοή κάποιου χρονοµετρητή. Μόλις εκπνεύσει o

χρονοµετρητής ακολουθείται ο βασικός αλγόριθµος.

H στρατηγική που ακολουθείται από τον αποστολέα στην Reno έκδοση είναι να

επαναµεταδώσει το πολύ ένα πακέτο που έχει χαθεί σε κάθε RTT (round-trip time). Για

απώλεια ενός πακέτου από το παράθυρο µετάδοσης, το TCP Reno βελτιώνει κατά πολύ

την απόδοση του Tahoe, αλλά για πολλαπλές απώλειες πακέτων από το παράθυρο

µετάδοσης το Reno έχει σηµαντικά προβλήµατα [9], [11].

31

Page 20: Κεφάλαιο 1 Πρωτόκολλο TCP (Transmission Control Protocol)cgi.di.uoa.gr/~shadj/PLH36/tcp_chapter.pdf · Κεφάλαιο 1 - Το Πρωτόκολλο tcp τώρα

1.7.4 TCP New-Reno Αυτή η έκδοση [12] αντιµετωπίζει τα προβλήµατα που εµφανίζονται στο TCP Reno

όταν χαθούν πολλά πακέτα από το παράθυρο µετάδοσης. Στο Reno η λήψη µιας µερικής

επιβεβαίωσης βγάζει τον αποστολέα από την διαδικασία της γρήγορης ανάκαµψης. Στο

New-Reno, η λήψη µιας τέτοιας µερικής επιβεβαίωσης δεν βγάζει τον αποστολέα από

την γρήγορη ανάκαµψη, αλλά θεωρείται σαν ένδειξη ότι το πακέτο που ακολουθεί

αµέσως µετά το πακέτο που επιβεβαιώθηκε έχει χαθεί και πρέπει να επαναµεταδοθεί.

Έτσι, όταν χαθούν πολλά πακέτα από ένα παράθυρο το New-Reno µπορεί να ανακάµψει

χωρίς πρώτα να εκπνεύσει κάποιος χρονοµετρητής, επαναµεταδίδοντας ένα χαµένο

πακέτο σε κάθε round-trip time µέχρι όλα τα χαµένα πακέτα του παραθύρου να έχουν

επαναµεταδοθεί. Σε περίπτωση που το πλήθος των χαµένων πακέτων είναι τέτοιο που o

αποστολέας δεν µπορεί να µπει στην διαδικασία γρήγορης επαναµετάδοσης, είναι

αναγκαία η αναµονή για την εκπνοή κάποιου χρονοµετρητή. O αποστολέας παραµένει σε

φάση γρήγορης ανάκαµψης µέχρι όλα τα δεδοµένα που είχαν µεταδοθεί όταν ξεκίνησε η

φάση, επιβεβαιωθούν. Εφόσον, το NewReno αντιµετωπίζει τα προβλήµατα του Reno

είναι φανερό ότι θα έχει και καλύτερη απόδοση από αυτό.

1.7.5 TCP Sack H έκδοση Sack [30] (selective ack) του TCP είναι µια συντηρητική επέκταση του TCP

Reno υπό την έννοια ότι και οι δύο εκδόσεις χρησιµοποιούν τους ίδιους αλγορίθµους για

την προσαρµογή του παραθύρου µετάδοσης. Κάθε επιβεβαίωση που φτάνει στον

αποστολέα περιέχει πληροφορία για οποιοδήποτε συνεχόµενο πλήθος δεδοµένων τα

οποία έχουν ληφθεί και µπει στην ουρά του δέκτη. Με αυτό το τρόπο ο αποστολέας είναι

σε θέση να καταλάβει ποια πακέτα έχουν χαθεί. O αποστολέας, στο Sack TCP, µπαίνει

στην διαδικασία γρήγορης ανάκαµψης µόλις λάβει Ω διπλές επιβεβαιώσεις. H λήψη

µερικών επιβεβαιώσεων δεν βγάζει τον αποστολέα από την διαδικασία γρήγορης

ανάκαµψης, όπως γίνεται και στο NewReno. H διαφορά από το NewReno έγκειται στο

ότι εφόσον ο αποστολέας έχει περισσότερη πληροφορία για τα πακέτα που έχουν χαθεί,

δεν περιορίζεται στο να στείλει το πολύ ένα χαµένο πακέτο σε κάθε RTT όπως γίνεται

στο NewReno. O αποστολέας βγαίνει από την διαδικασία γρήγορης ανάκαµψης όταν

λάβει µια επιβεβαίωση ανάκαµψης. Και σε αυτή τη περίπτωση, αν o αποστολέας δεν

µπορεί να µπει στην διαδικασία γρήγορης επαναµετάδοσης λόγω έλλειψης διπλών

επιβεβαιώσεων πρέπει να περιµένει την εκπνοή κάποιου χρονοµετρητή.

32