[コンピュータネットワーク]-TCP-キープアライブ機構

導入

キープアライブメカニズムデータストリームの内容に影響を与えずに相手を検出する方法です。これはキープアライブ タイマーによって実装されます。タイマーがトリガーされると、接続の一方の端はキープアライブ検出(キープアライブと呼ばれる) メッセージを送信し、もう一方の端はメッセージの受信時に応答として ACK を送信します。

キープアライブ メカニズムは TCP 仕様の一部ではありませんが、ホスト要件 RFC 1122 では、その理由として次の 3 つを挙げています。

  1. 短期的なネットワーク エラーが発生すると、キープアライブ メカニズムによって正常な接続が切断されます (キープアライブ メッセージを受信する側は一時的な障害のために応答しない可能性があり、障害はすぐに回復する可能性がありますが、もう一方の側はは知りません。送信したキープアライブメッセージに応答がなかったことだけを知っていたため、相手がもう機能していないと誤解し、切断しました)
  2. キープアライブ メカニズムは不要な帯域幅を占有します (データ フローには影響せず、追加のパケット オーバーヘッドが必要なため)。
  3. 従量制トラフィックの下でインターネットにより多くのお金を費やす (これも余分なパケットが使用されるため)

キープアライブ機能は通常、サーバー アプリケーションに提供されます。サーバー アプリケーションは、クライアントにリソースをバインドするかどうかを決定するために、クライアント ホストがクラッシュするか離脱するかを知りたいと考えています。が機能しなくなった場合は、当然のことながら、自社の経営資源を節約するためにサービスを提供する行為を終了する必要があります。

TCP キープアライブ機能を使用してホストからの離脱を検出すると、サーバーは Web サーバーや POP などの非対話型クライアントと比較的短期間の会話を行うことができますが、長期的な対話型サービスを実装するサーバーでは、これを望まない可能性があります。 SSH や Windows リモート デスクトップなどのリモート ログイン システムなどのキープアライブ機能を使用するため

説明する

キープアライブ機能はデフォルトではオフになっており、TCP 接続のどの端でもこの機能を開くように要求できます。この機能は、接続の一方の端、両端、またはどちらの端にも設定できません。

一定期間内 (キープアライブ時間と呼ばれる) の場合、キープアライブ時間 keepalive\ timeキープアライブ機能オン た側は、キープアライブ検出メッセージを相手送信ます送信者が応答メッセージを受信しない場合、キープアライブ間隔(キープアライブ間隔 keepalive\ 間隔)k ee p a live interval ) 送信されたプローブ パケットの数がキープアライブプローブの数に達するまでキープアライブ プローブ パケットを送信し続けます( keepaliveプローブ keepalive \プローブk ee p a live pro b e ) (応答がないだけでは接続が機能しなくなったかどうかを判断するのに十分でないため) 、この時点で他のホストに到達できないことが確認され、接続も中断されます。

上記の 3 つの変数は、Linux システムの sysctl 変数net.ipv4.tcp_keepalive_timenet.ipv4.tcp_keepalive_intvl、に対応しておりnet.ipv4.tcp_keepalive_probes、デフォルトは7200秒、75秒、および9検出です。

キープアライブ検出メッセージは空のメッセージ セグメント (または 1 バイトのみを含む) であり、そのシーケンス番号は、他のホストによって送信された ACK メッセージの最大シーケンス番号から 1 を引いたものと等しくなりますこのシーケンス番号のデータは正常に受信されたため、到着したセグメントには影響しませんが、プローブ メッセージによって返された応答によって、接続がまだ機能しているかどうかが判断できます。プローブにも応答メッセージにも新しい有効なデータは含まれていません
。データが失われると再送信されません

キープアライブ機能のワークフローでは、この機能をオンにした側は、相手が次の 4 つの状態のいずれかにあることを確認します。

  1. 相手のホストはまだ動作しており、接続できます。相手の TCP がキープアライブ検出メッセージに正常に応答した場合、要求側はキープアライブ タイマーをリセットします。タイマーが期限切れになる前にアプリケーション プログラムがリンクを介してデータを送信する (非アクティブ状態を終了する) 場合、タイマーはリセットされます。キープアライブ時間の値として設定します
  2. 相手のホストがクラッシュしました。このとき、相手の TCP は応答せず、キープアライブ時間間隔の後、キープアライブ プローブの数で指定された合計回数が送信され、応答が受信されなくなるまでプローブ メッセージを送信し続けます。プローブメッセージからの場合、要求側は相手が閉じていると考えて切断します。
  3. 相手がクラッシュして再起動しました。このとき、要求側のコネクションはハーフオープンコネクションに相当する。このとき、要求側は検出メッセージに対する応答を受信しますが、この応答はリセットセグメントであるため、要求側は切断します。
  4. 相手のホストはまだ動作していますが、ネットワークが送信できないなどの何らかの理由で要求側に到達できません。この状況は状態 2 に似ています。TCP は 2 つの状態を区別できません。

最初のケースでは、要求側のアプリケーション層はキープアライブ検出を認識せず (要求側のアプリケーション層がキープアライブ機能をアクティブ化しない限り)、すべての操作は TCP 層で完了します。アプリケーション層に対して透過的です。2 番目、3 番目、4 つのケースでは、要求元のアプリケーション層は、「接続がタイムアウトしました」、「相手によって接続がリセットされました」などのエラー レポートを TCP 層から受け取ります。

おすすめ

転載: blog.csdn.net/Pacifica_/article/details/123960850