Ubuntu 20连接Galaxy A20e 4G热点时TCP连接自动中断求助
SSH连接在4G热点下频繁断连的可能原因
1. 移动网络NAT会话超时
4G运营商网关的NAT超时阈值通常远低于固定宽带(ADSL),部分运营商对无实际数据传输的“心跳类”流量不视为活跃会话,会在3-5分钟内回收NAT映射条目。即使你设置了5分钟的SSH客户端keepalive,当心跳包发出时,原NAT端口已被释放,服务器返回RST ACK表示会话不存在。
2. Android热点的闲置连接回收机制
Android 12的热点功能内置了节能/资源管理策略,当检测到连接设备(Ubuntu)长时间只有低流量心跳时,会主动重置或切断该设备的网络会话。ADSL环境下无此类限制,因此不会出现断连。
3. Wi-Fi链路的丢包与状态不同步
你提到ping存在偶尔丢包,若某次SSH keepalive包丢失,服务器会因超时关闭连接;后续客户端再次发送心跳时,服务器返回RST。此外,Android热点的Wi-Fi模块可能存在NAT状态同步问题:网关已释放会话,但热点未通知客户端,导致客户端仍用旧参数发送数据。
4. SSH keepalive配置的单向性
仅配置客户端侧的ServerAliveInterval不足以覆盖所有场景:如果服务器端未启用ClientAliveInterval,且服务器的TCP连接超时短于客户端心跳间隔,服务器会主动关闭连接。部分服务器还会将频繁小流量心跳标记为异常,主动重置连接。
验证与修复建议
- 调整SSH客户端配置:将
ServerAliveInterval设为120秒(2分钟),ServerAliveCountMax设为10,确保心跳能在NAT超时前刷新会话。修改~/.ssh/config:Host * ServerAliveInterval 120 ServerAliveCountMax 10 - 关闭Android热点的节能选项:在手机设置中查找“热点闲置断开”“智能省电”相关功能,调整或禁用。
- 用持续小流量测试:执行以下命令模拟持续数据传输,验证是否能避免断连:
while true; do echo "keep-alive" > /dev/tcp/[服务器IP]/22; sleep 60; done - 监控TCP连接状态:使用
ss -t state established '( dport = :22 or sport = :22 )'对比ADSL和4G环境下的会话存活时间。
内容的提问来源于stack exchange,提问作者Yvon
相关产品推荐
相关产品推荐

