Saltar al contenido

Μια επισκόπηση του αλγόριθμου Nagle για επικοινωνία δικτύου TCP

8 de mayo de 2021

Ο αλγόριθμος 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 bytes) και 5% ή λιγότερα πραγματικά δεδομένα από το πληκτρολόγιο του αποστολέα. Χρησιμοποιώντας τον αλγόριθμο Nagle, τα ίδια δεδομένα θα μπορούσαν να παραδοθούν χρησιμοποιώντας λιγότερα μηνύματα, με αποτέλεσμα την εξοικονόμηση μεγάλου εύρους ζώνης.

Οι εφαρμογές ελέγχουν τη χρήση του αλγορίθμου Nagle με την επιλογή προγραμματισμού υποδοχής TCP_NODELA. Τα συστήματα Windows, Linux και Java συνήθως ενεργοποιούν το Nagle από προεπιλογή. Επομένως, οι εφαρμογές που έχουν γραφτεί για αυτά τα περιβάλλοντα πρέπει να καθορίσουν το TCP_NODELAY για να απενεργοποιήσουν τον αλγόριθμο.

kalodiozois / Μπράντλεϊ Μίτσελ

Περιορισμοί

Οι εφαρμογές που απαιτούν γρήγορη απόκριση δικτύου, όπως βιντεοκλήσεις και διαδικτυακά τυχερά παιχνίδια, ενδέχεται να μην λειτουργούν καλά όταν είναι ενεργοποιημένο το Nagle. Οι καθυστερήσεις που προκαλούνται ενώ ο αλγόριθμος χρειάζεται επιπλέον χρόνο για τη συγκέντρωση μικρότερων κομματιών δεδομένων μπορεί να προκαλέσει αισθητή καθυστέρηση οπτικά σε μια οθόνη ή σε μια ροή ψηφιακού ήχου. Τέτοιες εφαρμογές απενεργοποιούν συνήθως το Nagle. Αυτός ο αλγόριθμος αναπτύχθηκε αρχικά σε μια εποχή που τα δίκτυα υπολογιστών υποστήριξαν λιγότερο εύρος ζώνης από ό, τι σήμερα. Το παράδειγμα που περιγράφηκε παραπάνω βασίστηκε στις εμπειρίες του John Nagle στη Ford Aerospace στις αρχές της δεκαετίας του 1980, όπου οι γοητευτικές ανταλλαγές στο αργό, πολύ φορτωμένο δίκτυο μεγάλων αποστάσεων της Ford είχαν νόημα. Υπάρχουν ολοένα και λιγότερες καταστάσεις σήμερα όπου οι εφαρμογές δικτύου μπορούν να επωφεληθούν από τον αλγόριθμό του. Ο αλγόριθμος Nagle μπορεί να χρησιμοποιηθεί μόνο με TCP. Άλλα πρωτόκολλα, όπως το UDP, δεν το υποστηρίζουν.