Linux SSHシェルから/etc/init.d/network restart
、ネットワークサービスを再起動するために入力します。
ネットワークサービスがダウンするため、SSH接続が切断されると予想されます。しかし、そうではありません。とてもかっこいい。しかし、Linuxはこれをどのように達成しますか?サービスを再起動しても、SSH接続はどのように維持されますか?
Linux SSHシェルから/etc/init.d/network restart
、ネットワークサービスを再起動するために入力します。
ネットワークサービスがダウンするため、SSH接続が切断されると予想されます。しかし、そうではありません。とてもかっこいい。しかし、Linuxはこれをどのように達成しますか?サービスを再起動しても、SSH接続はどのように維持されますか?
回答:
特別なことは何もせずにこれを行います。ネットワークは、TCP接続がタイムアウトするよりも短い時間で再起動します。そのため、TCP接続は、一時的なネットワーク停止に耐えるのと同じ方法で「停止」に耐えます。
Windowsが同じことをしない唯一の理由は、ネットワークインターフェイスがダウンしたときにWindowsがTCP接続を明確にリセットするためです。これは、少なくともほぼ間違いなく、TCPが一時的なネットワークの停止に耐えるように特別に設計されているため、非常に骨の折れることです。
SSHDは、接続時に子プロセスをフォークします。SSHDまたはネットワーク全体が再起動されても、この子プロセスは停止しません。これが、sshおよび/またはその設定を更新service sshd restart
し、古い設定で古いsshセッションに接続し続けることができる理由です。それとは別に、sshは小さなネットワークの停止からうまく回復します。
sshd
にダウンを避けるためにありませんがservice sshd restart
。更新sshd
(セキュリティ更新など)した場合、子プロセスは元のコードで引き続き実行されます(更新前)が、中断されるのではなく、サービスを提供し続けます。sshd
ただし、最初の子プロセスが終了し、ネットワークインターフェイスがポートを閉じていると瞬間的に示すと、メインプロセスのリッスンソケットの可用性は非常に短時間中断されます。