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