Algorytm Nagle’a

Algorytm Nagle’a

Algorytm Nagle’a to technika, która ma na celu zwiększenie efektywności sieci TCP/IP poprzez ograniczenie liczby pakietów, które muszą zostać przesłane.

Dokument Congestion Control in IP/TCP Internetworks (RFC 896) porusza problem „małych pakietów”, odnosząc się do sytuacji, w której aplikacja przesyła dane w minimalnych porcjach, często po jednym bajcie. Z racji tego, że pakiet TCP zawiera 40-bajtowy nagłówek, prowadzi to do przesyłania pakietu o wielkości 41 bajtów, z których tylko 1 bajt to użyteczna informacja – to sprawia, że narzut jest znaczny. Tego typu sytuacja występuje na przykład podczas korzystania z protokołu Telnet, gdzie każde naciśnięcie klawisza generuje pojedynczy bajt, który jest niezwłocznie wysyłany.

Algorytm Nagle’a polega na łączeniu kilku krótkich wiadomości i ich wysyłaniu w ramach jednego pakietu. Konkretnie, do momentu, aż potwierdzenie ostatnio wysłanego pakietu nie zostanie otrzymane, nadawca powinien buforować wychodzące dane do chwili, gdy uzbiera się ich odpowiednia ilość do wysłania w nowym 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
  • kolekuj dane aż do otrzymania potwierdzenia
  • w przeciwnym wypadku
  • wyślij natychmiast

gdzie MSS oznacza maksymalną długość segmentu (Maximum Segment Size).

Algorytm Nagle’a ma problemy z współpracą z opóźnionym potwierdzeniem TCP, które zostało wprowadzone niemal równocześnie. Kiedy oba te algorytmy są aktywne, wykonanie dwóch następujących po sobie operacji wysyłania i odbierania może prowadzić do opóźnienia sięgającego 500 ms, znanego jako „ACK delay”. Z tego powodu implementacje TCP pozwalają na dezaktywację algorytmu Nagle’a, zazwyczaj poprzez opcję NO_DELAY. Pierwszą znaczącą aplikacją, w której zauważono ten problem, był X Window System.

Linki zewnętrzne

Przeczytaj u przyjaciół: