Nagle-Algorithmus, nach John Nagle genannt, ist ein Mittel zur Verbesserung der Effizienz der TCP / IP-Netzwerke, indem die Anzahl von Paketen, die über das Netzwerk gesendet werden müssen.
Nagle Dokument, Überlastkontrolle in IP / TCP Internetworks beschreibt, was er als "Päckchen-Problem", wenn ein Antrag wiederholt in kleine Stücke emittiert Daten häufig nur 1 Byte groß. Da TCP-Pakete einen 40 Byte-Header haben, führt dies zu einer 41-Byte-Paket für 1 Byte von nützlichen Informationen, einem riesigen Aufwand. Diese Situation tritt häufig in Telnet-Sitzungen, in denen die meisten Tastendrücke erzeugen ein einziges Byte an Daten, die sofort übertragen wird. Schlimmer noch, über langsame Verbindungen, viele solcher Pakete auf der Durchreise zur gleichen Zeit sein, was möglicherweise zu Staus Zusammenbruch führt.
Nagle-Algorithmus arbeitet durch die Kombination einer Reihe von kleinen ausgehenden Nachrichten, und sie alle auf einmal senden. Insbesondere, solange es eine gesendete Paket, für welche der Sender keine Bestätigung empfangen wird, sollte der Sender halten Pufferung seinem Ausgang, bis es im Wert von dem Ausgangssignal eines vollständigen Pakets, so daß der Ausgang kann auf einmal gesendet werden.
Algorithmus
wo MSS = maximale Segmentgröße.
Dieser Algorithmus interagiert schlecht mit TCP verzögerte Bestätigungen, eine Funktion, ungefähr zur gleichen Zeit in den frühen 1980er Jahren in TCP eingeführt, aber von einer anderen Gruppe. Mit beiden Algorithmen aktiviert Anwendungen, die zwei aufeinanderfolgenden Schreibvorgängen in einer TCP-Verbindung zu tun, gefolgt von einem Lese, die erst nach der Daten von dem zweiten Schreibvorgang das Ziel erreicht hat nicht erfüllt werden, erleben eine konstante Verzögerung von bis zu 500 Millisekunden, die " ACK delay ". Aus diesem Grund TCP-Implementierungen bieten in der Regel Anwendungen mit einer Schnittstelle zu den Nagle-Algorithmus deaktivieren. Dies wird als Option.
Eine Lösung von Nagle zu empfehlen ist, um zu vermeiden, der Algorithmus Senden vorzeitigen Pakete durch Puffern up Anwendung schreibt, und dann Spülen der Puffer:
Negative Auswirkungen auf größere Schreibvorgänge
Der Algorithmus gilt für die Daten jeder Größe. Wenn die Daten in einer einzigen Schreibspannt 2n-Pakete, wird das letzte Paket zurückgehalten werden, wartet auf die Bestätigung für das vorherige Paket. In jedem Request-Response-Anwendungsprotokolle in dem Anforderungsdaten können größer als ein Paket sein, kann diese künstlich zu verhängen wenigen hundert Millisekunden Latenz zwischen dem Antragsteller und dem Responder, auch wenn der Antragsteller ordnungsgemäß gepufferten die Anforderungsdaten. Nagle-Algorithmus muss vom Antragsteller in diesem Fall deaktiviert. Wenn die Antwortdaten größer als ein Paket sein, muß die Responder auch Nagle-Algorithmus zu deaktivieren, damit der Anforderer kann umgehend die gesamte Antwort.
Da im allgemeinen Nagle-Algorithmus ist nur ein Schutz gegen nachlässige Anwendungen, wird es nicht profitieren eine sorgfältig geschriebene Anwendung, die richtige Pflege der Pufferung führt; der Algorithmus entweder keine Wirkung, oder negative Auswirkungen auf die Anwendung.
Interaktionen mit Echtzeitsysteme
Anwendungen, die erwarten, dass Echtzeit-Antworten können schlecht mit Nagle-Algorithmus reagiert. Anwendungen wie vernetzte Multiplayer-Videospiele erwarten, dass Aktionen im Spiel werden sofort gesendet, während der Algorithmus gezielt verzögert Übertragung, zunehmende Bandbreiteneffizienz zu Lasten der Latenz. Aus diesem Grund Anwendungen mit niedriger Bandbreite zeitkritische Übertragungen verwenden in der Regel um den Nagle Verzögerung zu umgehen.
Eine weitere Option ist es, UDP zu verwenden.
Kommentare - 0