SSH接続はネットワークの再起動後にどのように生き残りますか?


63

Linux SSHシェルから/etc/init.d/network restart、ネットワークサービスを再起動するために入力します。

ネットワークサービスがダウンするため、SSH接続が切断されると予想されます。しかし、そうではありません。とてもかっこいい。しかし、Linuxはこれをどのように達成しますか?サービスを再起動しても、SSH接続はどのように維持されますか?

回答:


69

特別なことは何もせずにこれを行います。ネットワークは、TCP接続がタイムアウトするよりも短い時間で再起動します。そのため、TCP接続は、一時的なネットワーク停止に耐えるのと同じ方法で「停止」に耐えます。

Windowsが同じことをしない唯一の理由は、ネットワークインターフェイスがダウンしたときにWindowsがTCP接続を明確にリセットするためです。これは、少なくともほぼ間違いなく、TCPが一時的なネットワークの停止に耐えるように特別に設計されているため、非常に骨の折れることです。


1
デビッド、それは、TCP / IPスタックが再起動されないことを意味しますか?サーバーがSSHソケットの追跡を失い、sshd子プロセス(Nilsに感謝)が終了するためです。どちらが次の質問をもたらします:どのサービスがソケットを管理しますか?TIA。
セルジュワウティア

@David Schwartz-タイムアウトを変更するために使用できるパラメーターは何ですか?現在のタイムアウト値を確認するにはどうすればよいですか?そして、それはサーバー側で構成されていますか、それともクライアント側ですか?
マーティンベグター

@MartinVegter TCP接続のタイミングパラメータは、両側で調整する必要があり、それらを混乱させると、パケット損失を処理するTCPの機能に影響を与える可能性があるため、変更する必要はありません。接続を回復することにより、TCP接続の損失をシームレスに許容するために、システム全体を設計することをお勧めします。
デビッドシュワルツ

11

SSHDは、接続時に子プロセスをフォークします。SSHDまたはネットワーク全体が再起動されても、この子プロセスは停止しません。これが、sshおよび/またはその設定を更新service sshd restartし、古い設定で古いsshセッションに接続し続けることができる理由です。それとは別に、sshは小さなネットワークの停止からうまく回復します。


2
SSHは、David Schwartzから与えられた理由により、「小さなネットワークの停止」についても知りません。特にSSHのプロパティではありません。
user207421

ssh側にも少しのプログラミングが関与していないかどうかはわかりません。基本的に、すべてのTCPサービスはフォールトトレラントでなければなりません-多くはそうではありません。アプリケーションに関連する再試行メカニズムを追加する必要があります。その場合、サービスは「中」の停止にも耐えることができます。
ニルス

3
EJPで説明されているように、あなたの答えは真実ですが、無関係です。
ジル 'SO-悪であるのをやめる'

3
それは何についての洞察を追加するので、この答えは私には有用であったsshdにダウンを避けるためにありませんがservice sshd restart。更新sshd(セキュリティ更新など)した場合、子プロセスは元のコードで引き続き実行されます(更新前)が、中断されるのではなく、サービスを提供し続けます。sshdただし、最初の子プロセスが終了し、ネットワークインターフェイスがポートを閉じていると瞬間的に示すと、メインプロセスのリッスンソケットの可用性は非常に短時間中断されます。
allquixotic

1
@Nilsあなたはそれを書いたことを知っています。しかし、これにより、平均的な読者は分岐が適切であると考えます。しかし、フォークしないプログラムでも同じことが起こります。あなたの答えは次のようなものです:「鉄は鉄よりも強いので、リンゴは赤です」
ダニエルアルダー14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.