Ο αλγόριθμος Nagle, που πήρε το όνομά του από τον μηχανικό John Nagle, σχεδιάστηκε για να μειώνει τη συμφόρηση δικτύου που προκαλείται από μικρά προβλήματα πακέτων με εφαρμογές TCP. Οι υλοποιήσεις UNIX άρχισαν να χρησιμοποιούν τον αλγόριθμο Nagle στη δεκαετία του 1980 και παραμένει ένα τυπικό χαρακτηριστικό του TCP σήμερα.
Πώς λειτουργεί ο αλγόριθμος Nagle
Ο αλγόριθμος Nagle επεξεργάζεται δεδομένα από την πλευρά αποστολής των εφαρμογών TCP με μια μέθοδο που ονομάζεται nagling. Εντοπίζει μηνύματα μικρού μεγέθους και συγκεντρώνει αυτά τα μηνύματα σε μεγαλύτερα πακέτα TCP πριν στείλει δεδομένα μέσω καλωδίου. Αυτή η διαδικασία αποφεύγει τη δημιουργία άσκοπα μεγάλου αριθμού μικρών πακέτων.
Η τεχνική προδιαγραφή για τον αλγόριθμο Nagle δημοσιεύθηκε το 1984 ως RFC 896. Οι αποφάσεις για το πόσα δεδομένα θα συσσωρεύονται και για το χρόνο αναμονής μεταξύ των αποστολών είναι κρίσιμες για τη συνολική του απόδοση.
Τα οφέλη του Nagling
Το Nagling μπορεί να χρησιμοποιήσει αποτελεσματικά το εύρος ζώνης μιας σύνδεσης δικτύου σε βάρος της προσθήκης καθυστερήσεων ή καθυστερήσεων. Ένα παράδειγμα που περιγράφεται στο RFC 896 επεξηγεί τα πιθανά οφέλη εύρους ζώνης και τον λόγο δημιουργίας του:
- Εάν μια εφαρμογή TCP που παρεμποδίζει τα πλήκτρα του πληκτρολογίου θέλει να επικοινωνήσει κάθε χαρακτήρα που πληκτρολογείται σε έναν δέκτη, μπορεί να δημιουργήσει μια σειρά μηνυμάτων, το καθένα από τα οποία περιέχει 1 byte δεδομένων.
- Προτού να σταλούν αυτά τα μηνύματα στο δίκτυο, το καθένα πρέπει να συσκευαστεί με πληροφορίες κεφαλίδας TCP όπως απαιτείται από το TCP/IP. Κάθε κεφαλίδα κυμαίνεται σε μέγεθος μεταξύ 20 και 60 byte.
- Χωρίς γκρίνια, αυτό το παράδειγμα εφαρμογής θα δημιουργούσε μηνύματα δικτύου που αποτελούνται από 95 τοις εκατό ή περισσότερες πληροφορίες κεφαλίδας (τουλάχιστον 20 στα 21 byte) και 5 τοις εκατό ή λιγότερο από πραγματικά δεδομένα από το πληκτρολόγιο του αποστολέα. Χρησιμοποιώντας τον αλγόριθμο Nagle, τα ίδια δεδομένα θα μπορούσαν να παραδοθούν χρησιμοποιώντας λιγότερα μηνύματα, με αποτέλεσμα μεγάλη εξοικονόμηση εύρους ζώνης.
Οι εφαρμογές ελέγχουν τη χρήση του αλγόριθμου Nagle με την επιλογή προγραμματισμού υποδοχής TCP_NODELA. Τα συστήματα Windows, Linux και Java συνήθως ενεργοποιούν το Nagle από προεπιλογή. Επομένως, οι εφαρμογές που γράφτηκαν για αυτά τα περιβάλλοντα πρέπει να καθορίσουν το TCP_NODELAY για να απενεργοποιηθεί ο αλγόριθμος.
Περιορισμοί
Εφαρμογές που απαιτούν γρήγορη απόκριση δικτύου, όπως βιντεοκλήσεις και διαδικτυακά παιχνίδια, ενδέχεται να μην λειτουργούν καλά όταν το Nagle είναι ενεργοποιημένο. Οι καθυστερήσεις που προκαλούνται ενώ ο αλγόριθμος χρειάζεται επιπλέον χρόνο για να συγκεντρώσει μικρότερα κομμάτια δεδομένων μπορεί να προκαλέσει αισθητή καθυστέρηση οπτικά σε μια οθόνη ή σε μια ροή ψηφιακού ήχου. Τέτοιες εφαρμογές συνήθως απενεργοποιούν το Nagle.
Αυτός ο αλγόριθμος αναπτύχθηκε αρχικά σε μια εποχή που τα δίκτυα υπολογιστών υποστήριζαν λιγότερο εύρος ζώνης από ό,τι σήμερα. Το παράδειγμα που περιγράφηκε παραπάνω βασίστηκε στις εμπειρίες του John Nagle στη Ford Aerospace στις αρχές της δεκαετίας του 1980, όπου οι ενοχλητικές ανταλλαγές στο αργό, βαριά φορτωμένο δίκτυο μεγάλων αποστάσεων της Ford είχαν νόημα. Υπάρχουν όλο και λιγότερες καταστάσεις σήμερα όπου οι εφαρμογές δικτύου μπορούν να επωφεληθούν από τον αλγόριθμό του.
Ο αλγόριθμος Nagle μπορεί να χρησιμοποιηθεί μόνο με TCP. Άλλα πρωτόκολλα, όπως το UDP, δεν το υποστηρίζουν.