web-dev-qa-db-ja.com

デフォルトTCPキープアライブ設定

TCP KeepAlive(ソケットオプションSO_KEEPALIVE)は、メカニズムがトリガーするまでの時間、プローブ間隔、および接続の切断が宣言された後の失敗したプローブの数の3つのオプションによって管理されます。

デフォルトは次のとおりです。

  • tcp_keepalive_time = 7200
  • tcp_keepalive_intvl = 75
  • tcp_keepalive_probes = 9

1分半後にプローブを送信することは妥当なように聞こえ、9回の失敗したプローブの後に失敗を宣言することも同様ですが、最初の時間2時間の背後にある考えは何ですか?

でも tcp(7) は言う

基礎となる接続追跡メカニズムとアプリケーションのタイムアウトははるかに短い場合があることに注意してください。

キープアライブを有効にする主な目的は、ステートフルネットワーク要素が状態情報をドロップしないようにすることですが、そのような要素は数分で接続をドロップする傾向があります。一部のレート制限されたサーバーでは、curlと短い--keepalive-timeダウンロードの信頼性が大幅に向上するようです。

では、なぜデフォルトがそれほど長いのですか?

4
Jan Hudec

TCPキープアライブは、ステートフルファイアウォールやNATはもちろんのこと、ファイアウォールの概念さえもおそらく普及していなかったときに定義されました。 RFC 1122 (1989年10月)から:

4.2.3.6 TCPキープアライブ

実装者はTCPに「キープアライブ」を含めることができます
実装は、この実践は普遍的ではありませんが
受け入れました。キープアライブが含まれている場合、アプリケーションは
TCP接続ごとにオンまたはオフにすることができ、
デフォルトでオフにする必要があります。

キープアライブパケットは、データがない場合、または
確認パケットが受信されました
間隔内の接続。この間隔は
構成可能であり、デフォルトで2時間以上でなければなりません。

[...]

当時の主なアイデアは、失われたステートフルな情報に関するものではありませんでした。

討論:
「キープアライブ」メカニズムは定期的に他を調査します
接続が他の場合の接続の終了
送信するデータがない場合でもアイドル。 TCP
仕様には、キープアライブメカニズムが含まれていません
それができるので:(1)完全に良好な接続を引き起こします
一時的なインターネット障害の際に破損する; (2)
不要な帯域幅を消費します(「誰もが
接続、それがまだ良いかどうかは誰が気にしますか? ");および(3)
料金がかかるインターネットパスに費用がかかる
パケット

[...]

A TCPキープアライブメカニズムは、
そうでなければハングする可能性のあるサーバーアプリケーション
無期限に、不必要にリソースを消費する
クライアントがネットワーク中にクラッシュまたは接続を中止します
失敗。

私は更新中のRFCをざっと読みましたが、キープアライブについて細かく述べることはできませんでした。

1
A.B