Является ли алгоритм Nagle единственным алгоритмом с таким же использованием?
Просто спрашиваю, кто-нибудь знает, является ли алгоритм Nagle единственным алгоритмом, который используется при отправке пакетов? Существуют ли другие алгоритмы, аналогичные Nagle? А если их нет, был ли алгоритм Нэгла улучшен за эти годы? Спасибо и отправка источников мне будет очень полезна.
1 ответ
Как и в любой нетривиальной программе, стек TCP использует большое количество "алгоритмов". Возможно, наиболее интересными являются алгоритмы предотвращения перегрузок, которые были усовершенствованы за эти годы, но которые по-прежнему основаны на алгоритме медленного старта Ван Якобсона.
Алгоритм Nagle, который на самом деле является скорее эвристическим, представляет собой попытку повысить эффективность TCP-трафика за счет задержки отправки небольших пакетов до тех пор, пока не будет отправлено разумное количество данных. "Плохо написанные" приложения могут отправлять несколько байтов за раз, что приводит к значительным издержкам соединения TCP, поскольку каждый TCP-пакет включает в себя заголовок TCP, а также заголовок IP и заголовок для низкоуровневого протокол передачи. Все эти заголовки складываются, и в случае пакета данных, содержащего всего несколько байтов, заголовки складываются гораздо больше, чем данные.
К сожалению, не только плохо написанные приложения демонстрируют такое поведение. Большой класс приложений должен иметь дело с людьми и нашим нетерпением, чтобы увидеть, что мы делаем. Когда вы вводите несколько символов в сеансе ssh, вы ожидаете, что удаленный компьютер немедленно получит символы и начнет работать с ними. Это может быть особенно важно, если введенный символ является символом прерывания. Таким образом, в этих случаях, даже при наличии накладных расходов на передачу, важно сразу отправить данные. Следовательно, алгоритм Nagle может быть отключен на соединении, установив TCP_NODELAY
вариант. (Не делайте этого, если вам это не нужно.)
Классическим справочником по TCP является серия TCP Illustrated, написанная Ричардом Стивенсом в 1990-х годах. Несмотря на то, что с течением времени книги по-прежнему необходимы для чтения всем, кто интересуется пониманием протоколов Интернет-передачи, что, я полагаю, свидетельствует о том, что основные алгоритмы в основном остаются нетронутыми.