最初のTCP再送信タイムアウトを調整するにはどうすればよいですか?


14

3秒の初期TCP RTO値は、ほとんどのLANベースのアプリケーションには長すぎます。低く調整するにはどうすればよいですか?sysctlはありますか?

回答:


12

いいえ、できません。カーネルにハードコードされています。そのため、カーネルを変更して再コンパイルします。

#define TCP_TIMEOUT_INIT ((unsigned)(3*HZ))     /* RFC 1122 initial RTO value   */

これは、include / net / tcp.hで取得する必要があるものです。

しかし、私は、誰かが見ることができるパッチを提供し、それを自分自身を試したことがないにもかかわらず、


4

RTOはネットワーク条件に自己調整するため、初期設定は全体的なパフォーマンスに大きな影響を与えません。RTOを変更する場合は、1秒に設定できます(ただし、それ以下に設定することはできません)。

これについてはRFC 1122で説明されています

        The following values SHOULD be used to initialize the
        estimation parameters for a new connection:
        (a)  RTT = 0 seconds.

        (b)  RTO = 3 seconds.  (The smoothed variance is to be
             initialized to the value that will result in this RTO).

        The recommended upper and lower bounds on the RTO are known
        to be inadequate on large internets.  The lower bound SHOULD
        be measured in fractions of a second (to accommodate high
        speed LANs) and the upper bound should be 2*MSL, i.e., 240
        seconds.

        DISCUSSION:
             Experience has shown that these initialization values
             are reasonable, and that in any case the Karn and
             Jacobson algorithms make TCP behavior reasonably
             insensitive to the initial parameter choices.

RFC 6298は、RTOをより低い値(ただし1秒以上)に初期化できることを示す更新案(2011年6月公開)であり、1秒を妥当な初期値として正当化するデータを含む付録が含まれています。


1秒は必須ではなく、SHOULDです。ところで、有名な検索エンジンのフロントエンドのrtoを見ることができます=)
SaveTheRbtz

「初期設定は、全体的なパフォーマンスにそれほど影響を与えないはずです」という声明には同意しません。これは、初期通信でのアプリケーションのエラー率に影響を与える可能性があります。バックエンドアプリケーションが読み取りタイムアウトを3秒以下に設定すると、最初のTCP通信中のネットワークでのパケットドロップ(輻輳を伴う通常のイベント)は、ドロップされたパケットの適切な再送信を許可しません。初期値は、受信側で設定された読み取りタイムアウトよりも小さくなければならず、実行中のネットワークのQOSに基づいて設定する必要があります。
ジョー

3秒はローカルネットワークでは永遠であり、パケットドロップは、ラウンドトリップ時間がミリ秒単位である1つのネットワークで実際に高速で発生します。
ジョー

最近のCPUは3秒で多くのことができることに同意します。私の理解では、この初期遅延はドライバーの初期化時にのみ適用され、システムの最初の起動時にのみ発生します。
ジェイエルストン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.