Обзор алгоритма Nagle для сетевой связи TCP

Оглавление:

Обзор алгоритма Nagle для сетевой связи TCP
Обзор алгоритма Nagle для сетевой связи TCP
Anonim

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

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

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

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

Преимущества наглинга

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

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

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

Image
Image

Ограничения

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

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

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

Рекомендуемые: