Факторы, влияющие на задержку сети TCP
- Аппаратная скорость
- Загрузка сети и сервера
- Размер сообщений запроса и ответа
- расстояние между клиентом и сервером
- Техническая сложность протокола TCP
Задержка, вызванная протоколом TCP
- рукопожатие установления TCP-соединения;
- контроль перегрузки TCP с медленным запуском;
- алгоритм Нэгла для агрегации данных;
- Алгоритм отложенного подтверждения TCP для дополнительных подтверждений;
- Задержка TIME_WAIT и исчерпание портов.
Установление TCP-соединения
Для установления TCP-соединения требуется процесс взаимодействия трех пакетов для передачи соответствующих параметров соединения.Этот процесс называется трехэтапным рукопожатием.
Поэтому, если TCP-соединение восстанавливается перед каждой отправкой данных, время, затрачиваемое на соединение, будет иметь большое влияние на производительность (особенно если отправляется небольшой объем данных).
Оптимизация
Устанавливается длинное соединение, и одно и то же соединение мультиплексируется для нескольких передач данных.
Медленный запуск TCP
Если между отправителем и получателем имеется несколько маршрутизаторов и медленные каналы связи, то несколько отправителей отправляют несколько сегментов в сеть в начале, из-за влияния сетевой передачи и возможностей обработки сервера некоторые промежуточные маршрутизаторы должны буферизовать пакеты и в конечном итоге могут недостаточно места в памяти, поэтому отправка большего количества пакетов вызовет перегрузку сети.
TCP slow start (медленный старт), т.е.Механизм управления потоком для предотвращения внезапных перегрузок и перегрузок Интернета.
Медленный старт добавляет окно к TCP отправителя: окно перегрузки, или сокращенно cwnd.
Просто для установления соединения окно перегрузки инициализируется одним сегментом. Каждый получает ACK, окно перегрузки увеличивается на один сегмент. Принимает минимальное значение окна перегрузки отправителя и объявленного окна получателя в качестве верхнего предела передачи.
То есть соединение TCP будет выполнять себя «настройкой» со временем, а максимальная скорость соединения будет ограничена. Если данные успешно передаются, скорость передачи будет улучшена со временем.
Примечание. Окно перегрузки — это управление потоком, используемое отправителем, а окно рекламы — это управление потоком, используемое получателем.
Оптимизация
Используйте длинное соединение, чтобы избежать медленного запуска после установления каждого соединения.
Алгоритм Нэгла
На ванах небольшие пакеты увеличивают вероятность застой сетевых. Nagle Algorithm (назван в соответствии с его изобретателем Джоном Наглем)Он предназначен для сбора этих небольших пакетов и отправки их в один пакет для повышения эффективности сети..
Алгоритм требует, чтобы в TCP-соединении мог быть максимум один неподтвержденный и неполный небольшой пакет, и никакие другие небольшие пакеты не могли быть отправлены до тех пор, пока не придет подтверждение этого пакета.
Преимущество этого алгоритма в том, что он адаптивен: чем быстрее приходит подтверждение, тем быстрее отправляются данные.
Алгоритм Нагле вызывает следующие проблемы производительности
- Когда пакеты не заполнены группой, вам нужно ждать дополнительных данных;
- Алгоритм Nagle блокирует отправку данных до тех пор, пока не прибудет пакет подтверждения, но сам пакет подтверждения задерживается алгоритмом отложенного подтверждения на 100–200 миллисекунд.
Алгоритм псевдокода
if there is new data to send
if the window size >= MSS and available data is >= MSS
send complete MSS segment now
else
if there is unconfirmed data still in the pipe
enqueue data in the buffer until an acknowledge is received
else
send data immediately
end if
end if
end if
Оптимизация
Для сценариев приложений с высокими требованиями к реальному времени алгоритм Nagle можно отключить, установив параметр TCP_NODELAY для повышения производительности.
Алгоритм отложенного подтверждения
Обычно TCP не отправляет ACK сразу после получения данных, вместо этого он откладывает их отправку, чтобы ACK был отправлен вместе с данными, которые необходимо отправить в этом направлении..
Это явление иногда называют ACK совмещения данных, и, поскольку подтверждения обычно невелики, TCP позволяет их «совмещать» с исходящими пакетами данных, предназначенными для одного и того же направления.
В большинстве реализаций используется задержка 200 мс, что означает, что TCP будет ожидать отправки данных с максимальной задержкой 200 мс.
Как правило, алгоритмы отложенного подтверждения вносят значительные задержки.
Оптимизация
В зависимости от используемой операционной системы алгоритм отложенного подтверждения можно настроить или отключить. (этот способ не пробовал)
Статус TIME_WAIT
Состояние TIME_WAIT также известно как состояние ожидания 2MSL.
Когда конечная точка TCP закрывает TCP-соединение, в памяти сохраняется небольшой блок управления для записи IP-адреса и номера порта последнего закрытого соединения.
Эта информация хранится только в течение короткого периода времени, обычно в два раза превышающего предполагаемое максимальное время жизни сегмента (называемое 2MSL, обычно около 2 минут), чтобы гарантировать, что в течение этого времени не будет создано ни одного создания с тем же адресом, а новое соединение с номер порта.
На самом деле этот алгоритм можетПредотвращает создание, закрытие и повторное создание двух подключений с одним и тем же IP-адресом и номером порта в течение двух минут..
Существуют исторические причины для получения стоимости 2MSL на 2 минуты. Давным-давно маршрутизаторы были медленными, и было подсчитано, что пакет может оставаться в интернет-очереди на сумму до минуты до того, как дублирующаяся копия его была отброшена. Теперь максимальный срок службы сегмента намного меньше.
Максимальное время выживания MSL (Maximum Segment Lifetime) — это максимальное время существования в сети до того, как какой-либо сегмент отчета будет отброшен.
В RFC 793 [Postel 1981c] указано, что MSL составляет 2 минуты. Однако распространенные значения в реализациях — 30 секунд, 1 минута или 2 минуты.
Оптимизация
- Включите tcp_tw_reuse, чтобы программа могла повторно использовать порт в состоянии TIME_WAIT. Если используется tcp_tw_reuse, необходимо установить tcp_timestamps=1 (по умолчанию). (Это полезно для быстрого перезапуска некоторых служб, особенно серверных программ)
- Включите tcp_tw_recycle, чтобы ускорить перезапуск сокетов в состоянии TIME_WAIT.
Для этого параметра соответствующая конфигурация обычно делается на сервере профессиональной эксплуатации и коллегами по обслуживанию.
Что касается проблемы TIME_WAIT, то для более подробного ознакомления вы можете прочитать статью дяди Мауса "Things about TCP (Part 1)":
классная оболочка.cai/articles/11…
Ссылаться на
«Подробное объяснение TCP / IP, том 1: протокол»
Полное руководство по HTTP
классная оболочка.cai/articles/11…
Википедия
Личный публичный аккаунт
Для получения дополнительных статей, пожалуйста, обратите внимание на общедоступный номер: Binary Road