在 Linux SSH shell 中,键入/etc/init.d/network restart
以重新启动网络服务。
我预计我的 SSH 连接会因为网络服务中断而中断。但事实并非如此。很酷。但 Linux 是如何实现这一目标的呢?它如何在服务重新启动后保持我的 SSH 连接处于活动状态?
答案1
它没有做任何特别的事情来做到这一点。网络重新启动的时间比 TCP 连接超时所需的时间短,因此 TCP 连接能够在“中断”中幸存下来,就像在任何短暂的网络中断中一样。
Windows 不执行相同操作的唯一原因是,当网络接口出现故障时,Windows 会专门重置 TCP 连接。至少可以说,这是一件相当愚蠢的事情,因为 TCP 是专门为承受短暂的网络中断而设计的。
答案2
SSHD 在连接时分叉一个子进程。如果 SSHD 或整个网络重新启动,该子进程不会死亡。这就是为什么您可以更新 ssh 和/或其配置,执行 a 操作service sshd restart
并仍然使用旧设置保持与旧 ssh 会话的连接。除此之外,ssh 可以从小型网络中断中恢复良好。