Назад | Перейти на главную страницу

TCP Keepalive: почему бездействующее соединение ESTABLISHED завершается через 60 секунд вместо tcp_keepalive_time?

Я изучаю способы защиты сервера от атак типа DoS. В одном сценарии я открыл несколько сотен TCP-соединений со своим веб-сервером. Я не отправляю никаких данных после первоначального подтверждения TCP; это неактивное соединение после подтверждения TCP. Сервер показывает это соединение в состоянии ESTABLISHED.

После 60 секунд бездействия соединение разрывается сервером (переводится в состояние FIN_WAIT2).

Почему это происходит через 60 секунд? Есть ли значение ядра, которое контролирует это? Я ожидал, что соединение прервется через "tcp_keepalive_time" секунд (в настоящее время установлено значение 7200).

Хорошо, что простаивающее соединение не должно ждать 7200 секунд для завершения, но я хочу понять, почему это происходит через 60 секунд.

Это на сервере CentOS 6.4 с ядром 2.6.32.

Обработка незанятых соединений не имеет ничего общего с TCP keep alive, а связана только с настройками внутри процесса сервера. TCP keep alive заботится только об обнаружении разорванных соединений вовремя, то есть в случаях, когда невозможно обменяться пакетами, потому что что-то в середине сломано или один из партнеров разбился. Когда соединение находится в режиме ожидания, обмен фактическими данными не происходит, но TCP сохраняет активность пакетов с нулевой полезной нагрузкой.