TGViewer
NetworkAdmin.ru NetworkAdmin.ru @networkadminru · 4.7K subscribers
Post #979 311
🔎 TCP keepalive: как находить мертвые соединения до того, как они создадут проблему

Иногда TCP-соединение выглядит живым, хотя в реальности удаленная сторона уже давно недоступна.

Например:

клиент выключился;
оборвался VPN;
пропал маршрут;
firewall удалил state;
NAT-сессия протухла;
сервер завис без корректного закрытия соединения.


Если по соединению нет трафика, приложение может еще долго считать его активным.

Для таких случаев в TCP есть механизм keepalive.

▪️ Проверить текущие настройки linux:


sysctl net.ipv4.tcp_keepalive_time
sysctl net.ipv4.tcp_keepalive_intvl
sysctl net.ipv4.tcp_keepalive_probes


Типичная логика такая:

tcp_keepalive_time - сколько ждать простоя до первой проверки
tcp_keepalive_intvl - интервал между проверками
tcp_keepalive_probes - сколько неудачных попыток сделать

Например:


sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.ipv4.tcp_keepalive_intvl=30
sysctl -w net.ipv4.tcp_keepalive_probes=5


В этом случае после 5 минут простоя ядро начнет проверять соединение, а при отсутствии ответа будет делать повторные попытки.

▪️ Для постоянной настройки:


cat > /etc/sysctl.d/99-tcp-keepalive.conf <<'EOF'
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=5
EOF

sysctl --system


▪️ Посмотреть активные TCP-соединения:


ss -nto


▪️ Подробнее по конкретному соединению:


ss -ti


Но есть важный нюанс: системные значения работают только для сокетов, где приложение вообще включило SO_KEEPALIVE. То есть одной настройки sysctl иногда недостаточно. Например, nginx, PostgreSQL, HAProxy, SSH и различные runtime могут иметь собственные keepalive-параметры.

▪️ У SSH есть похожий механизм на уровне приложения:


ServerAliveInterval 30
ServerAliveCountMax 3


Это уже не TCP keepalive, но задача похожая - быстрее понять, что удаленная сторона больше не отвечает.

#tcp #keepalive

🧑‍💻 NetworkAdmin
  • 👍 3
More from @networkadminru
  1. Sep 25, 2026🤩 Как расшифровать код ошибки Windows через certutil При установке обновлений Windows ран…
  2. Sep 23, 2026💻 Как жестко перезагрузить linux, когда обычный reboot уже не помогает Иногда сервер зави…
  3. Sep 22, 2026🌚 watch: простая динамическая диагностика в терминале Иногда не нужен отдельный мониторин…
  4. Sep 21, 2026👌 Firewall default deny: как внедрять без внезапного отрезания доступа Идея простая: разр…
  5. Sep 18, 2026🖥 Windows зависла на "Подготовке Windows": как проверить состояние удаленно Типичная ситу…
  6. Sep 17, 2026🌲 Как посмотреть дерево процессов в Linux: htop, ps и pstree Когда нужно понять, какой пр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →