Algorytm Nagle'a
Z Wikipedii
Algorytm Nagle'a jest metodą 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ła je 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.
[edytuj] 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
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.