发布于 1970-01-01 08:00
  • 1 个回答
    • 原因

      这个事情比较繁琐,但不复杂:

      第一:ssh使用tcp长连接进行通信,这个长连接是没有保活心跳的,所以当连接建立但是双方都没什么事的时候(你不敲命令,服务器也不向你发什么更新数据),中间是没有数据包的。

      第二:从你的PC机,到你的公网出口,到互联网上,到阿里云防火墙,到你的阿里云主机,这一长过程可能会经过非常多个NAT设备和防火墙设备。以SNAT设备为例(常见的是家用路由器、公司路由器或防火墙,运营商CGN),这些设备会为你的这次TCP连接维持一个NAT会话(关于NAT的相关资料建议自学),如果这个会话在一定时间内有通信的话,就会刷新生存时间。如果这次会话双方确认断开连接,就会释放这个会话(这条TCP连接也不再通了)。然而这就有一个特殊情况,如果两个建立连接的双方都断网/死机了怎么办?这个会话应该也没用了,所以很多NAT设备会在这里设置一个最长生存时间,这个时间之内如果没有数据包通信,那就断开这个NAT会话。这就是你说的一段时间不操作就失去响应

      第三:除了NAT设备,链路上很多防火墙设备都会有类似限制。很多公司的公司防火墙都有这种设置,无数据的NAT会话存活时间也都是自行设定的。

      解决办法

      一个最简单的解决办法,就是保持有数据就行了。

      在闲着没事的时候打个top -c监控系统。

      小提示

      如果使用SecureCRT等工具,可以克隆当前会话,这个克隆的会话使用的是与被克隆会话相同的TCP连接,在克隆会话中top -c


      2022-11-25 12:32 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有