Algorytm Nagle'a

Z Wikipedii, wolnej encyklopedii

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]