Подтвердить что ты не робот

Связь между продолжительностью HTTP Keep Alive и длительностью тайм-аута TCP

Я пытаюсь понять связь между значениями времени TCP/IP и HTTP. Являются ли эти два значения тайм-аута разными или одинаковыми? Большинство веб-серверов позволяют пользователям устанавливать значение тайм-аута HTTP Keep Alive через некоторую конфигурацию. Как это значение используется веб-серверами? это значение, установленное только для базового сокета TCP/IP. Является ли время ожидания HTTP Keep Alive и TCP/IP Keep Alive Timeout одинаковым? или к ним относятся по-разному?

Мое понимание (возможно, неверно): Веб-сервер использует тайм-аут по умолчанию на базовом сокете TCP (т.е. Неопределенный), независимо от настроенного тайм-аута Keep Keep Alive и создает поток Worker, который учитывает указанный интервал времени ожидания HTTP. Когда поток Worker достигает нуля, он закрывает соединение.

EDIT: Мой вопрос связан с отношением или разницей между двумя длительностями таймаута, то есть, что произойдет, когда продолжительность тайм-аута продолжительности ожидания HTTP и тайм-аут на Socket (SO_TIMEOUT), который использует веб-сервер, различны? Должен ли я даже беспокоиться о том, что эти два являются такими же или нет?

4b9b3361

Ответ 1

Это два разных механизма; имя является совпадением.

HTTP keep-alive (также известный как постоянные подключения) поддерживает открытие TCP-сокета, чтобы можно было выполнить другой запрос без настройки нового соединения.

TCP keep-alive - это периодическая проверка, чтобы убедиться, что соединение все еще работает и работает. Он часто используется для обеспечения того, чтобы поле NAT (например, DSL-маршрутизатор) не "забывало" сопоставление между внутренним и внешним ip/port.

Ответ 2

Открытый TCP-сокет не требует никакой связи между двумя сторонами (позвоните им Алисе и Бобу), если фактические данные не будут отправлены. Если Алиса получила подтверждения за все данные, которые она отправила Бобу, она не может различать следующие случаи:

  • Боб был отключен или недоступен Алисе.
  • Боб был перезагружен или забыт об открытом TCP-сокете, который он установил с Алисой.
  • Боб связан с Алисой, и знает, что у него открытая связь, но он ничего не хочет сказать.

Если Алиса не слышала от Боба некоторое время и хочет отличить вышеупомянутые условия, она может повторно отправить свой последний байт данных, завернутый в подходящий фрейм TCP, чтобы быть узнаваемым как повторная передача, по существу притворяясь, что у нее нет услышал подтверждение. Если Боб отключен, она ничего не услышит, даже если она повторно отправит пакет в течение нескольких секунд. Если Боб перезагрузил или забыли соединение, он сразу же ответит, что соединение недействительно. Если Боб доволен связью и просто нечего сказать, он ответит с подтверждением повторной передачи.

Таймаут указывает, как долго Алиса готова ждать ответа, когда она отправляет пакет, требующий ответа. Время Keepalive указывает, сколько времени она должна позволить себе пропустить, прежде чем она повторно передает свой последний бит данных и требует подтверждения. Если Боб исчезнет, ​​сумма значений Keepalive и Timeout укажет на худшее время между Алисой, получающей ее последний бит данных, и она решила, что Боб мертв.

Ответ 3

KeepAliveTimeout Директива

Описание: количество времени, которое сервер будет ожидать после запросы на постоянное соединение Синтаксис: KeepAliveTimeout секунд По умолчанию: KeepAliveTimeout 15 Контекст: конфигурация сервера, виртуальный хост Статус: Core Module: core Число секунд, в течение которого Apache будет ждать последующий запрос перед закрытием соединения. Как только запрос, значение таймаута, указанное в директиве Timeout применяется.

Установка KeepAliveTimeout на высокое значение может привести к повышению производительности проблемы с загруженными серверами. Чем выше тайм-аут, тем больше серверные процессы будут оставаться занятыми в ожидании соединений с бездействующие клиенты.

В контексте виртуального хоста, основанного на имени, значение первого определенного виртуальный хост (хост по умолчанию) в наборе NameVirtualHost будет используемый. Другие значения будут проигнорированы.

Директива TimeOut

Описание: количество времени, в течение которого сервер будет ждать определенных событий перед сбоем запроса Синтаксис: TimeOut seconds По умолчанию: TimeOut 300 Контекст: конфигурация сервера, виртуальный хост Статус: основной модуль: ядро Директива TimeOut определяет время, в течение которого Apache будет подождите три вещи:

Общее время, необходимое для получения запроса GET. Количество времени между получением пакетов TCP в запросе POST или PUT. количество времени между ACK при передаче пакетов TCP в ответы. Мы планируем сделать их отдельно конфигурируемыми на некоторых вниз по дороге. Таймер, используемый по умолчанию для 1200 до 1,2, но была снижена до 300, что по-прежнему намного больше, чем необходимо в большинстве ситуации. По умолчанию он не установлен ниже, потому что все еще может быть нечетные места в коде, где таймер не reset, когда пакет отправляется.