Алгоритъмът Nagle, кръстен на инженера John Nagle, е проектиран да намали претоварването на мрежата, причинено от проблеми с малки пакети с TCP приложения. Реализациите на UNIX започнаха да използват алгоритъма на Nagle през 80-те години и той остава стандартна характеристика на TCP днес.
Как работи алгоритъмът на Nagle
Алгоритъмът Nagle обработва данни от изпращащата страна на TCP приложенията чрез метод, наречен nagling. Той открива съобщения с малък размер и натрупва тези съобщения в по-големи TCP пакети, преди да изпрати данни по кабела. Този процес избягва генерирането на ненужно голям брой малки пакети.
Техническата спецификация за алгоритъма на Nagle е публикувана през 1984 г. като RFC 896. Решенията за това колко данни да се натрупат и колко време да се чака между изпращанията са критични за цялостната му производителност.
Ползите от заяждането
Наглингът може ефективно да използва честотната лента на мрежова връзка за сметка на добавяне на закъснения или латентност. Пример, описан в RFC 896, илюстрира потенциалните предимства на честотната лента и причината за създаването му:
- Ако TCP приложение, което прихваща натискания на клавиши от клавиатурата, иска да съобщи всеки въведен знак на приемник, то може да генерира поредица от съобщения, всяко от които съдържа 1 байт данни.
- Преди тези съобщения да могат да бъдат изпратени през мрежата, всяко от тях трябва да бъде пакетирано с информация за TCP заглавка, както се изисква от TCP/IP. Всеки хедър е с размер между 20 и 60 байта.
- Без да се заяждате, това примерно приложение ще генерира мрежови съобщения, състоящи се от 95 процента или повече заглавна информация (поне 20 от 21 байта) и 5 процента или по-малко действителни данни от клавиатурата на подателя. Използвайки алгоритъма на Nagle, същите данни могат да бъдат доставени с по-малко съобщения, което води до големи спестявания на честотна лента.
Приложенията контролират използването на алгоритъма на Nagle с опцията за програмиране на сокет TCP_NODELA. Системите Windows, Linux и Java обикновено активират Nagle по подразбиране. Следователно приложенията, написани за тези среди, трябва да посочат TCP_NODELAY, за да изключат алгоритъма.
Ограничения
Приложенията, които изискват бърз мрежов отговор, като видео разговори и онлайн игри, може да не работят добре, когато Nagle е активиран. Закъсненията, причинени от това, че алгоритъмът отнема допълнително време за събиране на по-малки части от данни, могат да предизвикат забележимо забавяне визуално на екрана или в цифров аудио поток. Такива приложения обикновено деактивират Nagle.
Този алгоритъм първоначално е разработен във време, когато компютърните мрежи са поддържали по-малко честотна лента, отколкото днес. Примерът, описан по-горе, се основава на опита на Джон Нейгъл във Ford Aerospace в началото на 80-те години на миналия век, където бавните компромиси с бавната, силно натоварена мрежа на Ford на дълги разстояния имаха смисъл. Днес има все по-малко ситуации, в които мрежовите приложения могат да се възползват от неговия алгоритъм.
Алгоритъмът на Nagle може да се използва само с TCP. Други протоколи, като UDP, не го поддържат.