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

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

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

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

Ответы [ 3 ]

30 голосов
/ 30 апреля 2010

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

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

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

28 голосов
/ 22 января 2011

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

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

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

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

4 голосов
/ 24 февраля 2011

KeepAliveTimeout Директива

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

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

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

TimeOut Директива

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

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

...