Algorytm Nagle’a – metoda poprawienia efektywności sieci TCP/IP za pomocą zmniejszenia liczby pakietów koniecznych do przesłania.
Dokument Congestion Control in IP/TCP Internetworks (RFC 896 ↓) opisuje „problem małych pakietów”, czyli sytuację, w której aplikacja wysyła dane w małych porcjach, często po jednym bajcie. Ponieważ pakiet TCP ma 40-bajtowy nagłówek, w efekcie przesyłany jest 41-bajtowy pakiet z jednym bajtem użytecznej informacji, co jest potężnym narzutem. Taka sytuacja ma miejsce np. w trakcie sesji protokołu Telnet, kiedy każde naciśnięcie klawisza generuje jeden bajt danych, który jest natychmiast wysyłany.
Algorytm Nagle’a polega na łączeniu kilku krótkich komunikatów i wysyłaniu ich w jednym pakiecie. W szczególności, dopóki na ostatnio wysłany pakiet nie otrzymano potwierdzenia, wysyłający powinien buforować wychodzące komunikaty do momentu, aż zbierze się ilość warta wysłania w kolejnym pakiecie.
Algorytm
jeśli są nowe dane do wysłania
jeśli oczekujące na wysłanie dane i nowe dane >= MSS
wyślij pakiet o długości MSS
w przeciwnym wypadku
jeśli są wysłane dane oczekujące na potwierdzenie odebrania
kolejkuj dane aż do otrzymania potwierdzenia
w przeciwnym wypadku
wyślij natychmiast
gdzie MSS = maksymalna długość segmentu (Maximum Segment Size).
Algorytm Nagle’a niepoprawnie współpracuje z opóźnionym potwierdzeniem TCP, wprowadzonym niemal w tym samym czasie. Gdy oba te algorytmy są włączone, wykonanie dwóch kolejnych operacji wysłania i następującej po nich operacji czytania, może skutkować opóźnieniem do 500 ms, tzw. "ACK delay". Z tego powodu implementacje TCP umożliwiają wyłączenie algorytmu Nagle’a, zazwyczaj jest to opcja NO_DELAY
. Pierwszą znaczącą aplikacją, w której zaobserwowano ten problem był X Window System.
Linki zewnętrzne