Intereting Posts
Как настроить непривилегированный контейнер LXC без перезагрузки? Обновление Synaptic: следует ли принимать изменения в файлы системной конфигурации, такие как / etc / lsb-release? Как я могу узнать, что такое макет моей клавиатуры? lftp протоколирование удаленных исходных файлов По-видимому, Swap не используется chroot: не удалось запустить команду '/ bin / bash': разрешение отклонено Emacs переместится в следующий пробел Как установить Linux (или аналогичную ОС) на смартфон? Как создать скрипт инициализации вместо служебного файла массовое переименование файлов, не работающих Преобразование журнала экрана в html Объединить 2 файла на основе всех доступных значений первого столбца в обоих файлах Просмотр вывода скрипта по ssh в режиме реального времени Как подключить veth-устройство внутри «анонимного» пространства имен в сети к внешнему? отобразить специальный символ из шрифта в ярлык ключевого слова

Параметры keep-alive TCP не соблюдаются

У меня есть сервер, работающий на моем Linux-боксе, также на котором выполнялись следующие команды:

$ cat /proc/sys/net/ipv4/tcp_keepalive_time 7200 $ cat /proc/sys/net/ipv4/tcp_keepalive_intvl 75 $ cat /proc/sys/net/ipv4/tcp_keepalive_probes 9 

Мой сервер прослушивает порт 58080, и я создаю на нем соединение, настроив TCP-код в моем коде. Затем я установил Wireshark, отслеживая это соединение; снимок экрана выводится ниже:

Пакеты

Вы можете видеть, что первый пакет keep-alive отправляется через 7200 секунд или 2 часа, как ожидалось (значение «tcp_keepalive_time»). Однако я ожидаю, что каждый пробник будет отправлен через 75 секунд (значение «tcp_keepalive_intvl»); я вижу, что каждый зонд отправляется через 2 часа.

Может кто-нибудь, пожалуйста, скажите, почему мой вариант конфигурации для 'tcp_keepalive_intvl' не соблюдается?

ОБНОВИТЬ

Кажется, что указание интервала продолжительности жизни, который больше, чем время сохранения жизни, приводит к тому, что время интервала привязано к …

После обсуждения с супер-умным коллегой, мы думаем, что мы выяснили, что не так, но еще предстоит доказать это. Что, вероятно, происходит, так это то, что интервал продолжительности жизни учитывается только тогда, когда ACK не поддерживается. Таким образом, через 2 часа, если никакой ACK не был получен в этот первый пакет keep-alive, второй пакет будет отправлен через 75 секунд и повторно с интервалом 75 секунд, пока не будет получен ACK.

Оказывается, причина, по которой этот интервал учитывается только тогда, когда он больше времени сохранения, связан с тем, как работает механизм поддержания работоспособности Linux, как описано в моем другом вопросе .