Алгоритм Nagle для связи по сети TCP

Алгоритм Nagle, названный в честь инженера Джона Нейгла, был разработан, чтобы уменьшить перегрузку сети, вызванную «проблемами небольших пакетов» с приложениями TCP. Реализации UNIX начали использовать алгоритм Nagle в 1980-х годах, и сегодня он остается стандартной функцией TCP.

Как работает алгоритм Nagle

Алгоритм Nagle обрабатывает данные на отправляющей стороне приложений TCP с помощью метода nagling. Он обнаруживает сообщения небольшого размера и накапливает их в более крупные TCP-пакеты перед отправкой данных по проводам, тем самым избегая генерации излишне большого количества маленьких пакетов. Техническая спецификация алгоритма Нагла была опубликована в 1984 году как RFC 896. Решения о том, сколько данных нужно накапливать и сколько времени ждать между отправками, имеют решающее значение для его общей производительности.

Nagling может более эффективно использовать пропускную способность сетевого подключения за счет добавления задержек (задержек). Пример, описанный в RFC 896, иллюстрирует потенциальные преимущества пропускной способности и причину его создания:

  • Приложение TCP, которое перехватывает нажатия клавиш на клавиатуре и хочет передать каждый набираемый символ получателю, может генерировать серию сообщений, каждое из которых содержит 1 байт данных.
  • Прежде чем эти сообщения могут быть отправлены через сеть, каждое из них должно быть упаковано вместе с информацией заголовка TCP, как того требует TCP / IP. Каждый заголовок имеет размер от 20 до 60 байтов.
  • Без затруднений это примерное приложение будет генерировать сетевые сообщения, состоящие из 95% или более информации заголовка (не менее 20 из 21 байта) и 5% или менее фактических данных с клавиатуры отправителя. Используя алгоритм Nagle, одни и те же данные могут быть доставлены с использованием меньшего количества сообщений и с 95% контента, являющегося информацией клавиатуры — это очень большая экономия пропускной способности.

Приложения контролируют использование алгоритма Nagle с помощью опции программирования сокетов TCP_NODELAY. Системы Windows, Linux и Java обычно включают Nagle по умолчанию, поэтому приложения, написанные для этих сред, должны указывать TCP_NODELAY при желании отключить алгоритм.

Ограничения

Алгоритм Nagle можно использовать только с TCP. Другие протоколы, включая UDP, не поддерживают его.

Приложения TCP, требующие быстрого сетевого ответа, такие как телефонные звонки через Интернет или игры-шутеры от первого лица, могут не работать должным образом, если включен Nagle. Задержки, вызванные тем, что алгоритму требуется дополнительное время, чтобы собрать меньшие порции данных, могут вызвать заметную задержку визуально на экране или в цифровом аудиопотоке. Эти приложения обычно отключают Nagle.

Этот алгоритм был изначально разработан в то время, когда компьютерные сети поддерживали гораздо меньшую пропускную способность, чем сегодня. Описанный выше пример был основан на опыте Джона Нейгла в Ford Aerospace в начале 1980-х годов, когда разумные компромиссы в их медленной, сильно загруженной сети на большие расстояния имели смысл. Сегодня все меньше и больше ситуаций, когда сетевые приложения могут извлечь выгоду из его алгоритма.

Ссылка на основную публикацию