Таймеры Windows для TCP используют единицу времени, называемую тайм-аутом повторной передачи (RTO), которая основана на предполагаемом времени прохождения сигнала в обоих направлениях (или RTT) между отправителем и получателем, а также на дисперсии в этом времени приема- передачи . Поведение этого таймера указано в RFC 6298 .
Для получения дополнительной информации см. Статью Wikipedia Transmission Control Protocol .
В Windows это работает следующим образом:
- Оценочный RTO впервые установлен
- TCP-сообщение отправлено, и мы ожидаем ACK (подтверждение) пакета
- Если ACK не прибыл, мы удваиваем время ожидания и возвращаемся к шагу 2
- Если ACK получен, вычисляется новое RTO
- Если ACK никогда не получен, соединение прерывается с ошибкой WSAECONNABORTED.
Windows использует два параметра реестра для этого протокола, описанные в этой статье Microsoft
Как изменить максимальное время ожидания повторной передачи TCP/IP.
TcpMaxDataRetransmissions
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
Value Name: TcpMaxDataRetransmissions
Data Type: REG_DWORD - Number
Valid Range: 0 - 0xFFFFFFFF
Default: 5
Описание :
Этот параметр контролирует количество раз, когда TCP повторно передает отдельный сегмент данных (сегмент без соединения) перед прерыванием соединения. Время ожидания повторной передачи удваивается с каждой последующей повторной передачей по соединению. Сбрасывается, когда ответы возобновляются. Базовое значение времени ожидания динамически определяется измеренным временем прохождения сигнала в оба конца по соединению.
TCPInitialRtt
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\ID for Adapter
Value Name: TCPInitialRtt
Data Type: REG_DWORD
Valid Range: 300-65535 (milliseconds in decimal)
Default: 0xBB8 (3000 milliseconds expressed in hexadecimal)
Описание:
Этот параметр контролирует начальное время ожидания повторной передачи, которое используется TCP при каждом новом подключении. Он применяется к запросу на соединение (SYN) и к первым сегментам данных, отправляемым по каждому соединению. Например, данные значения "5000 десятичных знаков" устанавливают начальное время повторной передачи равным пяти секундам.
ПРИМЕЧАНИЕ. Вы можете увеличить значение только для начального времени ожидания.
Уменьшение значения не поддерживается.
Хотя TCPInitialRtt запускается с начальным таймаутом в 3 секунды, он будет сглажен до более приемлемого значения, когда пакеты будут переданы правильно.
Например, как это работает, если мы возьмем значения по умолчанию, равные 3 секундам RTO и 5 повторным попыткам, общее время ожидания будет:
- первый тайм-аут: 3 секунды
- второй тайм-аут: 6 секунд
- третий тайм-аут: 12 секунд
- четвертый тайм-аут: 24 секунды
- пятый и последний тайм-аут: 48 секунд
Что дает общее время ожидания 93 секунд, прежде чем соединение будет прервано.
В большинстве случаев, если соединение когда-либо работало правильно, время ожидания будет намного меньше.