Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

WBOY
リリース: 2016-07-12 08:57:32
オリジナル
1528 人が閲覧しました

Linux でのタイムアウトと再送信時間 (RTO) の実装に関する研究

最近、チェックする必要があるネットワーク タイムアウトの問題があります。大まかに図に従って確認します

1。問題、TCP 関連の問題の可能性、バグ、カーネル パラメーター、その他の問題。

2. KVM の問題をトラブルシューティングすると、同じホスト上の別の KVM でタイムアウトの問題が再発しました。

異常な接続継続時間のほとんどは 1 秒程度であることがわかります。パケット キャプチャ分析により、パケットのこの部分が再送信されており、再送信時間は 1 秒に固定されていることがわかります。

ここでの再送信時間はなぜ 1 秒ですか? 関連する規格と実際の実装は何ですか?

この記事では主にこの部分について説明します (centos 2.6.32-358 に基づいています)

RFC 標準


再送時間 (RTO) は現在のネットワーク状態 (RTT) によって決定され、次に基づいていますアルゴリズムが判断します。この部分の関連内容は『TCP/IP詳解 第1巻』に記載されていますが、古いものです。

RFCにアクセスして確認してください。再送信タイムアウトに関する最新のものはRFC1122を更新し、RFC2988を廃止しました

興味がある場合は、クリックして読んでください

1はRTOを繰り返します 基本的な計算方法:

最初にクロックによって取得される時間パラメータRTO_MINがあります

初期化:

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

最初の計算:

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

後の計算:

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

RTO の最小値は 1 秒であることが推奨され、最大値は 60 秒より大きくなければなりません

2 同じパケットを複数回再送信する場合は、Karn アルゴリズムを使用する必要があります。これは、先ほど見た 2 倍の増加です

さらに、タイムスタンプ パラメーターが有効になっていない限り、RTT サンプリングでは再送信されたパケットを使用できません (RTT を正確に計算するには、このパラメーターを使用します)

3 4*RTTVAR が 0 になる傾向がある場合、取得される値は次のようになります。 RTO_MIN 時間に近い

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

経験上、時計が正確であればあるほど、最良の誤差は 100ms 以内です

4 RTO タイマー管理

(1) データを送信 (再送信を含む)、タイマーが有効かどうかを確認します。が開始されます。開始されていない場合は開始します。データのACK受信時にタイマーを削除

(2) バックオフにはRTO = RTO * 2を使用

(3) 新しいFALLBACK機能: SYNメッセージの待機中にタイマーが期限切れになった場合、現在のTCPが実装されている場合3 秒未満の RTO を使用する場合、接続ペアの RTO を 3 秒にリセットする必要があります。リセットされた RTO は、正式なデータ送信 (つまり、3 ウェイ ハンドシェイクの完了後) に使用されます。 Linux の実際の実装 スリーウェイ ハンドシェイクによって送信された syn パケットをキャプチャして分析します


123456

01:00:00.129688 IP 172.16.3.14.1868 > 172.16.10.40.80: Flags [S], seq 377407 9837、win 14600、オプション [mss 1460,nop,nop,sackOK,nop,wscale 7]、長さ 001:00:01.129065 IP 172.16.3.14.1868 > 172.16.10.40.80: フラグ [S]、シーケンス 3774079 837 、勝利 14600、オプション [mss 1460,nop,nop,sackOK,nop,wscale 7]、長さ 001:00:03.129063 IP 172.16.3.14.1868 > 172.16.10.40.80: フラグ [S]、シーケンス 3774079837、勝利14600、オプション [mss 1460 ,nop,nop,sackOK,nop,wscale 7]、長さ 001:00:07.129074 IP 172.16.3.14.1868 > 172.16.10.40.80: フラグ [S]、シーケンス 3774079837、win 14600、オプション [mss 1460,nop ,nop,sackOK,nop,wscale 7]、長さ 001:00:15.129072 IP 172.16.3.14.1868 > 172.16.10.40.80: フラグ [S]、シーケンス 3774079837、win 14600、オプション [ MSS 1460、NOP、NOP、Sackok、Nop、Wscale 7]、長さ001:00:31.129128 IP 172.16.3.14.1868> ,nop,nop,sackOK ,nop,wscale 7]、長さ 0

1 秒から 2 倍増加します

5 回目のタイムアウトの後は、6 回目 (合計 63 秒) まで上位層に接続タイムアウトが通知されないことに注意してください

スリーウェイ ハンドシェイク syncak パケットが送信されます

1234567 01:17:20.084839 IP 172.16.3.15.2535 > 172.16.3.14.80: フラグ [S]、シーケンス 1297135388、win 14600、オプション [mss] 1460、いいえ、いいえ、サックOK ,nop,wscale 7]、長さ 001:17:20.084908 IP 172.16.3.14.80 > 172.16.3.15.2535: フラグ [S.]、シーケンス 1194120443、ack 1297135389、win 14600、オプション [mss 1460,nop,いや、sackOK、nop、w スケール 7 ]、長さ 001:17:21.284093 IP 172.16.3.14.80 > 172.16.3.15.2535: フラグ [S.]、シーケンス 1194120443、ack 1297135389、win 14600、オプション [mss 146] 0、 NOP、NOP、SACKOK、NOP、WSCALE 7]、長さ001:17:23.284088 IP 172.16.3.14.80> 1460,nop,nop,sack OK, nop,wscale 7]、長さ 001:17:27.284095 IP 172.16.3.14.80 > 172.16.3.15.2535: フラグ [S.]、シーケンス 1194120443、ack 1297135389、win 14600 、オプション[MSS 1460、NOP、NOP、SACKOK、NOP、WSCALE 7]、長さ001:17:35.284097 IP 172.16.3.14.80> 14600、オプション [mss 1460,nop 、nop、sackOK、nop、wscale 7]、長さ 001:17:51.284093 IP 172.16.3.14.80 > 172.16.3.15.2535: フラグ [S.]、シーケンス 1194120443、ack 129713 5389 、win 14600、オプション [mss 146 0、nop、nop、sackOK、nop、wscale 7]、長さ 0
1秒から2倍

通常のパケット送信

123456789101112131415 16

0.2 秒から最大 120 秒まで 2 倍の増分、合計 15 回

32 分から開始して 47 分で終了することに注目してください。つまり、約 15 分 25 秒です

Linux はフォールバック機能? 簡単なテスト

01:32 :20. 443757 IP 172.16.3.15 .2548 > 172.16.3.14.80: フラグ [P.]、シーケンス 3319667389:3319667400、ack 1233846614、win 115、長さ 1101:32:20.644600 IP 172.16.3.15.2548 > 172 .16.3.14.80: フラグ [P .]、seq 3319667389:3319667400、ack 1233846614、win 115、長さ 1101:32:21.046579 IP 172.16.3.15.2548 > 172.16.3.14.80:フラグ [P.]、配列番号 3319667 389:3319667400、ack 1233846614、win 115、長さ 1101:32:21.850632 IP 172.16.3.15.2548 > 172.16.3.14.80: フラグ [P.]、シーケンス 3319667389:33196674 00、ack 1233846614、win 115、長さ 1101: 32:23 .458555 IP 172.16.3.15.2548 > 172.16.3.14.80: フラグ [P.]、シーケンス 3319667389:3319667400、ack 1233846614、win 115、長さ 1101:32:26.674594 IP 172.16.3.15.2548 > 172.16.3. 14.80: フラグ [P.] 、シーケンス 3319667389:3319667400、ack 1233846614、win 115、長さ 1101:32:33.106601 IP 172.16.3.15.2548 > 172.16.3.1 4.80: フラグ [P.]、シーケンス331966738 9:3319667400、ack 1233846614、win 115、長さ 1101:32:45.970567 IP 172.16.3.15.2548 > 172.16.3.14.80: フラグ [P.]、シーケンス 3319667389:3 319667400、ack 1233846614、win 115、長さ 1101 :33:11.69 8415 IP 172.16.3.15.2548 > 172.16.3.14.80: フラグ [P.]、シーケンス 3319667389:3319667400、ack 1233846614、win 115、長さ 1101:34:03.15430 0 IP 172.16.3.15.2548 > 172.16.3.14.8 0: フラグ [P.]、seq 3319667389:3319667400、ack 1233846614、win 115、長さ 1101:35:46.065892 IP 172.16.3.15.2548 > 172.16.3.14。 80: フラッグ[P.]、シーケンス 3319667389:33 19667400、ACK 1233846614、勝利 115、長さ 1101: 37:46.065382 IP 172.16.3.15.2548 > 172.16.3.14.80: フラグ [P.]、シーケンス 331966738 9:3319667400、ack 1233846614、win 115、長さ1101:39:46.064917 IP 172.16.3.15.2548 > 172.16: フラグ [P.]、シーケンス 3319667389:3319667400、ack 1233846614、win 115、長さ 1101:41:46。 064466 IP 172.16.3.15.2548 > 172.16.3.14.80: フラグ [P. ]、シーケンス 3319667389: 3319667400、ack 1233846614、長さ 1101:43:46.064060 IP 172.16.3.15.2548 > 172.16.3.1 4.80: フラグ [P.]、シーケンス3319667389:3319667400、ack 1233846614、win 115、長さ 1101:45: 46.063675 ​​IP 172.16.3.15.2548 > 172.16.3.14.80: フラグ [P.]、シーケンス 3319667389:3 319667400、ack 1233846614、win 115、length 11
123456789101112131415161718192021222324252627282930 サーバーが iptables を開いた後、クライアントはサーバーに接続し、5 タイムアウト以内に iptables を閉じます23:35:0 1.036565 IP 172.16.3.14.6071 > 172.16.10.40.12345:フラグ [S ]、シーケンス 2364912154、win 14600、オプション [mss 1460,nop,nop,sackOK,nop,wscale 7]、長さ 023:35:02.036152 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [ S]、シーケンス 2364912154、win 14600、オプション [mss 1460,nop,nop,sackOK,nop,wscale 7]、長さ 023:35:04.036126 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [S] 、シーケンス 236 4912154 、勝利 14600、オプション [mss 1460,nop,nop,sackOK,nop,wscale 7]、長さ 023:35:08.036127 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [S]、シーケンス 2364912154、勝利 14600、オプション [mss 1460,nop,nop,sackOK,nop,wscale 7]、長さ 023:35:16.036131 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [S]、シーケンス 236 4912154 、勝利 14600 、オプション [mss 1460,nop,nop,sackOK,nop,wscale 7]、長さ 023:35:16.036842 IP 172.16.10.40.12345 > 172.16.3.14.6071: フラグ [S.]、シーケンス 3634006739、 ack 2364912155、win 14600、オプション [mss 1460]、長さ 023:35:16.036896 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [.]、ack 3634006740、win 14600、長さ0 その後、サーバーが回転した後、 iptables では、クライアントはデータ パケットを送信します。iptables23:35:48.129273 IP 172.16.3.14.6071 > 172.16.10.40.12345: Flags [P.]、seq 2364912155:2364912156、ack 3634006740、win 146 00、長さ 123: 35: 51.129120 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [P.]、シーケンス 2364912155:2364912156、ack 3634006740、勝利 14600、長さ 123:35:57.1 2907 0 IP 172.16.3.14.6071 > 172.16 .10.40。12345: フラグ [P.]、seq 2364912155:2364912156、ack 3634006740、win 14600、長さ 123:36:09.129068 IP 172.16.3.14.6071 > 172.16.10.40 .12345: フラグ [P.]、シーケンス 2364912155 :2364912156、ack 3634006740、win 14600、長さ 123:36:09.129802 IP 172.16.10.40.12345 > 172.16.3.14.6071: Flags [.]、ack 2364912156、win 14600、長さ 0 サーバーが iptables を開いていない場合、クライアントはデータ パケット 23:36:15.217231 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [P.]、シーケンス 2364912156:2364912157、ack 3634006740、win 14600、長さ 123 を送信します。 36:15 .217766 IP 172.16 .10.40.12345> 172.16.3.14.6071: フラグ [.]、ACK 2364912157、Win 14600、長さ 0 が iptables を開き続け、クライアントがデータ パケットを送信 23:36:26.658172 ip 172.16.3.6071 & gt; .16.40.12345 : フラグ [P .]、seq 2364912157:2364912158、ack 3634006740、win 14600、長さ 123:36:26.859055 IP 172.16.3.14.6071 > フラグ [P.] 、シーケンス 23 64912157:2364912158、 ack 3634006740、win 14600、長さ 123:36:27.261065 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [P.]、シーケンス 2364912157:2364912158、ack 36340 06740、勝利 14600、長さ 123:3 6:28.065106 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [P.]、seq 2364912157:2364912158、ack 3634006740、win 14600、長さ 123:36:29.673132 IP 172.16。 3.14.6071 > 172.16.10.40.12345 : フラグ [P.] 、seq 2364912157:2364912158、ack 3634006740、win 14600、長さ 123:36:32.889068 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [P.] 、シーケンス 2364 912157:2364912158、 ack 3634006740、win 14600、長さ 123:36:39.321091 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [P.]、シーケンス 2364912157:2364912158、ack 363400 6740、勝利 14600、長さ 123:36:5 2.185135 IP 172.16.3.14.6071 > 172.16.10.40.12345: フラグ [P.]、seq 2364912157:2364912158、ack 3634006740、win 14600、長さ 123:37:17.913091 IP 172.16。 3.14.6071 > 172.16.1 0.40。 12345: Flags [P.]、seq 2364912157:2364912158、ack 3634006740、win 14600、length 1

このテストから、スリーウェイ ハンドシェイク中に RTT が 1 秒を超えた場合、データ送信フェーズの RTO は 3 秒であることがわかります (サーバー側の SYNACK タイムアウトについても同様です)

その後通常の RTT では、RTO は約 200 ミリ秒に収束します

タイムスタンプのサポートを見てみましょう


1234567891011121314151617 サーバーが iptables を開いた後、クライアントはサーバーに接続し、内部で iptables を閉じます。 5 タイムアウト23:47: 47.754316 IP 172.1 6.3.14.8603 > 172.16.10.40 .12345: フラグ [S]、シーケンス 479022248、win 14600、オプション [mss 1460、sackOK、TS val 2336007392 ecr 0、nop、wscale 7] ]、長さ 023:47:48.754079 IP 172.16.3.14.8603 > 172.1 6.10.40 .12345: フラグ [S]、シーケンス 479022248、win 14600、オプション [mss 1460、sackOK、TS val 2336008392 ecr 0、nop、wscale 7]、長さ 023:47 : 50.754088 IP 172.16.3.14.8603 > 172.1 6.10.40 .12345: フラグ [S]、シーケンス 479022248、win 14600、オプション [mss 1460、sackOK、TS val 2336010392 ecr 0、nop、wscale 7] ]、長さ023:47 :54.754083 IP 172.16.3.14.8603 > 172.1 6.10.40 .12345: フラグ [S]、シーケンス 479022248、win 14600、オプション [mss 1460、sackOK、TS val 2336014392 ecr 0、nop、wscale 7]、長さ023: 48:02.754094 IP 172.16.3.14.8603 > 172.1 6.10.40 .12345: フラグ [S]、シーケンス 479022248、win 14600、オプション [mss 1460、sackOK、TS val 2336022392 ecr 0、nop、wスケール 7]、長さ 023 :48:02.754683 IP 172.16.10.40.12345 > .16.3.14 .8603: フラグ [S.]、シーケンス 697602971、ack 479022249、win 14480、オプション [mss 1460、nop、nop、TS val 40446596] 41 ECR 2336022392]、長さ 023:48:02.754742 IP 172.16.3.1 4.8603 > 172.16.10.40.12345: フラグ [.]、ack 697602972、win 14600、オプション [nop、nop、TS val 2336022392 ecr 40446596] 41]、長さ 0 サーバーの電源が入った後iptables、クライアントはデータ パケットを送信し、15 タイムアウト以内に iptables を閉じます23: 48:11.944170 IP 172.16.3.14.8603 > 172.16.10.40.12345: Flags [P.]、seq 479022249:479022250、ack 697602 972、勝利 14600、オプション[nop,nop,TS val 23360 31582 ecr 4044659641]、長さ 123: 48:12.145036 IP 172.16.3.14.8603 > 172.16.10.40.12345: フラグ [P.]、シーケンス 479022249:47902 2250、ack 697602972、win 14600、オプション [nop、nop、TS val 23360 31783 ecr 4044659641]、長さ 123: 48:12.547084 IP 172.16.3.14.8603 > 172.16.10.40.12345: フラグ [P.]、シーケンス 479022249:4790 22250、ack 697602972、win 14600 、オプション [nop、nop、TS val 23360 32185 ecr 4044659641]、長さ 123: 48:13.351106 IP 172.16.3.14.8603 > 172.16.10.40.12345: フラグ [P.]、シーケンス 479022249:47 9022250、ack 697602972、勝利14600、オプション [nop、nop、TS val 23360 32989 ecr 4044659641]、長さ 123: 48:14.959080 IP 172.16.3.14.8603 > 172.16.10.40.12345: フラグ [P.]、シーケンス 4790222 49:479022250、ack 697602972、 win 14600、オプション [nop、nop、TS val 23360 34597 ecr 4044659641]、長さ 123: 48:18.175092 IP 172.16.3.14.8603 > 172.16.10.40.12345: フラグ [P.]、シーケンス 479022 249:479022250、確認応答 697602972 、勝利 14600、オプション [nop、nop、TS val 23360 37813 ecr 4044659641]、長さ 123: 48:24.607088 IP 172.16.3.14.8603 > 172.16.10.40.12345: フラグ [P.]、シーケンス 4790 22249:479022250、確認697602972、勝利 14600、オプション [nop,nop,TS val 23360 44245 ecr 4044659641]、長さ 1

タイムスタンプをオンにすると、RTO を 3 秒にリセットする FALLBACK メカニズムが機能しなくなることがわかります


Linux での RTO 計算の微調整

Linux での RTO 計算の実際の実装は、依然として RFC とは異なりますドキュメント はい、RFC ドキュメントに従って画像を検索するだけだと、実際の RTO 推定で道を誤ることになります

1 前の段落によると、彼は RTO の最小値を 200ms に設定していることがわかります (たとえubuntu では 50 ミリ秒、RFC では 1 秒を推奨しています)、最大値は 120 秒に設定されています (RFC では 60 秒以上が強制されています)

2 Linux コードの分析によると、RTT が激しくジッターすると、Linux 実装は大きく変化するRTTの干渉を軽減し、RTOを改善 トレンドチャートがより滑らかになります

これは、2つの微調整に反映されます:

微調整1

以下の条件を満たす場合

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

これは、R'の変動が大きすぎることを意味しており、平滑化されたRTT値と比較すると、RTTVAR

よりも差が大きいことが分かります

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

そして、RFCドキュメントは

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

と比較するとわかります。 RFC ドキュメントでは、平滑化係数は 1/8 倍されます。これは、RTTVAR に対する R' の影響が軽減され、RTTVAR がよりスムーズになり、RTO もよりスムーズになります

微調整 2

RTTVAR が減少すると、RTTVAR RTO が下がりすぎて急な傾向グラフを引き起こさないように平滑化されます

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

ここで、RTTVAR' は、RTT に基づいて計算された現在の値を指します。この値は、下限 (RTO_MIN) を制限し、前回の RTT の RTTVAR と比較して、減少が見つかった場合は 1/4 係数を使用して平滑化します

RTO が増加しても問題ないためだと思います。減少が大きい場合、スプリアス再送信が発生する可能性があります (この用語の詳細については、上記の RFC を参照してください) 文書)


人間の介入によって RTO を変更する方法

元の質問に戻り、RTO の値を短縮できるかどうか、そして、実際の Linux 実装に基づいてこの RTO 値を見積もる方法

当然ですが、RTO (FALLBACK を含む) の初期値は変更できません、この部分はコードに記述されています

そして 3 つ以外の RTO 値-way ハンドシェイクは推定可能です

推定時にネットワークが安定していると仮定すると、RTT が R になることはありません (そうでない場合は 1 と 2 を微調整するため、非常に複雑になります)

その場合、SRTT は常に R、RTTVAR は R になります。常に 0.5R

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

)それ以外の場合は

Linux_PHP チュートリアルでの再送信タイムアウト (RTO) の実装に関する研究

そのため、RTO_MIN の値を変更するだけで RTO の値に大きな影響を与える可能性があります

RTO_MIN の設定

RTO_MIN の設定は、

を達成するための IP ルートに基づいています。
12345678910111213[root@ localhost.localdomain ~]# ping www.baidu.comPING www.a.shifen.com (180.97.33.107) 56(84) バイトのデータ。180.97.33.107 からの 64 バイト: icmp_seq=1 ttl=51 time=30.8 ms64 バイトfrom 180.97.33.107: icmp_seq=2 ttl=51 time=29.9 ms Baidu の IP を取得後 [root@localhost.localdomain ~]# ip Route add 180.97.33.108 /32 via 172.16.3.1 rto_min 20[root@localhost.localdomain ~] # nc www.baidu.com 80[root@localhost.localdomain ~]# ss -eipn '( dport =:www )'State Recv-Q Send-Q Local Address:Port Peer Address:PortESTAB 0 0 172.16.3.14:14149 180.97.33.108:80 ユーザー:(("nc",7162,3)) ino:48057454 sk:ffff88023905adc0sack cubic wscale:7,7 rto:81 rtt :27/13.5 cwnd:10 send 4.3Mbps rcv_space:14600

RTO_MIN < 2R であるため、RTO = 3R = 27 * 3 = 81 です

イントラネットの場合、RTT は非常に小さいです

1234567[root@localhost.localdomain ~]# ip Route add 172.16 3.16/32 (172.16.3.1 経由) rto_min 20[root@localhost.localdomain ~]# nc 172.16.3.16 22SSH-2.0-OpenSSH_5.3[root@localhost.localdomain ~]# ss -eipn '( dport =:22 )'状態 Recv-Q Send-Q ローカル アドレス:ポート ピア アドレス:PortESTAB 0 0 172.16.3.14:57578 172.16.3.16:22 users:(("nc",7272,3)) ino:48059707 sk:ffff88023b7c7000sack cubic wscale:7 , 7 rto:21 rtt:1/0.5 ato:40 cwnd:10 send 116.8Mbps rcv_space:14600

RTO_MIN > 2Rなので、RTO = R + RTO_MIN = 1 + 20 = 21

ネットワーク全体に自信がある場合は、次のように、ターゲット IP を設定せずに、すべての接続に直接適用することもできます

1ip Route change dev eth0 rto_min 20ms

概要

1 Linux タイムアウト リセット 送信の実装は一般に RFC を参照しますが、いくつかの微調整があります:

RFC には RTO 初期値が 1 つだけあり、それは 1 秒です。 Linux 実装では、スリーウェイ ハンドシェイク フェーズのパケットの RTO が 1 秒に設定され、残りのパケットの初期時間が 0.2 秒に設定されます。RFC で指定されているアルゴリズムが不完全であるため、Linux の実際の実装では鮮明さが低下します。重大な RTT ジッターの場合の RTT の変化。RTT 干渉の変更により、RTO トレンド グラフがより滑らかになります

2 接続の SYN 再送信時間はカーネルを再コンパイルしない限り調整できませんが、プッシュ パケットの再送信時間は調整できます。調整済み

3 比較 安定したネットワークでは、rto セットの最小値は RTO_MIN であると想定されます

http://www.bkjia.com/PHPjc/1108029.html

本当http://www.bkjia.com/PHPjc/1108029.html技術記事 Linux でのタイムアウトおよび再送信時間 (RTO) の実装に関する研究。最近、ネットワーク タイムアウトの問題が発生しており、次の図に示す考えに従ってトラブルシューティングを行う必要があります。 1. コード ロジックの問題と、考えられる TCP 関連の問題を排除します。バグ...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!