需配置TCP Keepalive防连接超时断开,方法包括:一、sysctl临时修改;二、/proc/sys直接写入;三、/etc/sysctl.conf持久化;四、setsockopt应用层定制;五、sshd_config优化SSH保活。

如果您在Linux系统中需要维持长连接的活跃状态,防止因中间网络设备超时而被意外断开,则需正确配置TCP Keepalive机制。以下是多种可行的配置方法:
一、通过sysctl命令临时修改内核参数
该方法适用于快速验证或短期调试,所有更改在系统重启后失效。修改的是全局TCP Keepalive行为,影响所有启用SO_KEEPALIVE的套接字。
1、查看当前Keepalive参数值:
cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_intvl
cat /proc/sys/net/ipv4/tcp_keepalive_probes
2、将空闲探测启动时间设为600秒,探测间隔设为30秒,最大探测次数设为3次:
sudo sysctl -w net.ipv4.tcp_keepalive_time=600
sudo sysctl -w net.ipv4.tcp_keepalive_intvl=30
sudo sysctl -w net.ipv4.tcp_keepalive_probes=3
二、通过写入/proc/sys接口直接设置
该方式绕过sysctl工具,直接操作内核参数文件,效果与sysctl -w相同,但更底层,适合脚本化部署。
1、向对应路径写入新数值(需root权限):
echo 600 | sudo tee /proc/sys/net/ipv4/tcp_keepalive_time
echo 30 | sudo tee /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 3 | sudo tee /proc/sys/net/ipv4/tcp_keepalive_probes
三、通过/etc/sysctl.conf持久化配置
该方法确保系统重启后参数仍保持生效,适用于生产环境长期稳定运行需求。
1、编辑系统级配置文件:
sudo nano /etc/sysctl.conf
2、在文件末尾追加以下三行(若已存在则覆盖原有行):
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
3、加载更新后的配置:
sudo sysctl -p
四、在应用程序中通过setsockopt启用并控制
该方法允许单个socket独立启用Keepalive,并可结合应用逻辑定制行为,不依赖全局内核参数,灵活性最高。
1、创建TCP套接字后立即启用SO_KEEPALIVE选项:
int enable = 1; setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &enable, sizeof(enable));
2、若需进一步控制该socket的Keepalive时间(Linux 3.7+支持),可使用TCP_KEEPIDLE、TCP_KEEPINTVL、TCP_KEEPCNT:
int idle = 600; setsockopt(sock, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof(idle));
int interval = 30; setsockopt(sock, IPPROTO_TCP, TCP_KEEPINTVL, &interval, sizeof(interval));
int probes = 3; setsockopt(sock, IPPROTO_TCP, TCP_KEEPCNT, &probes, sizeof(probes));
五、针对SSH服务单独优化Keepalive行为
该方法专用于SSH连接稳定性提升,通过sshd_config控制服务端主动发送保活包,避免客户端无响应导致连接中断。
1、编辑SSH服务配置文件:
sudo nano /etc/ssh/sshd_config
2、添加或修改以下两行(单位为秒):
ClientAliveInterval 300
ClientAliveCountMax 3
3、重启SSH服务使配置生效:
sudo systemctl restart sshd

















