TCP チューニング技術は、高帯域幅、高遅延のネットワーク上での伝送制御プロトコル(TCP) 接続のネットワーク輻輳回避パラメータを調整します。適切に調整されたネットワークは、場合によっては最大 10 倍高速に動作します。[ 1 ]しかし、実際の結果を理解せずに指示に盲目的に従うと、パフォーマンスが低下することもあります。
帯域幅遅延積(BDP)は、主にTCPに関連して使用される用語で、 TCPの「パス」を埋めるために必要なバイト数を指します。つまり、送信側と受信側の間で同時に転送される最大ビット数に等しくなります。
高性能ネットワークでは、BDP(ビット遅延パラメータ)が非常に大きくなります。具体的な例を挙げると、往復遅延時間(または往復時間、RTT)が0.5秒、帯域幅が10 Gbit/sの静止衛星リンクを介して通信する2つのノードでは、最大で0.5 × 10 Gbit、つまり5 Gbitの未確認データが伝送される可能性があります。衛星リンクよりもレイテンシがはるかに低いにもかかわらず、地上光ファイバーリンクでも、リンク容量が非常に大きいため、BDPが非常に大きくなることがあります。ネットワークが低速だった数年前に設計されたオペレーティングシステムやプロトコルは、桁違いに小さいBDPに合わせて調整されており、達成可能なパフォーマンスが制限されるという影響がありました。
従来のTCP構成では、TCP受信ウィンドウサイズバッファの最大サイズは65,535(64 KiB - 1)バイトまでサポートされていました。これは、低速リンクやRTT(ラウンドトリップタイム)が短いリンクには十分でした。しかし、後述する高性能オプションでは、より大きなバッファが必要となります。
高性能ネットワークシステムでは、システム遅延に対処するためにバッファリングが広く用いられています。一般的に、バッファサイズは、その時点で「転送中」のデータ量に比例して大きくする必要があります。ネットワーク遅延の影響を受けにくい非常に高性能なアプリケーションの場合、エンドツーエンドシステムに中間データ保存ポイントを設けることで、エンドツーエンドのバッファリングによる大きな遅延を意図的に作り出し、自動化されたスケジュール済みの非リアルタイムデータ転送によってデータを最終エンドポイントに到達させることが可能です。
単一のTCP接続で達成可能な最大スループットは、さまざまな要因によって決まります。分かりやすい制限の一つは、経路上の最も遅いリンクの最大帯域幅です。しかし、TCPスループットには、他にもあまり知られていない制限要因があります。ビットエラーは、RTTだけでなく、接続自体にも制限を与える可能性があります。
コンピュータネットワークにおいて、RWIN(TCP受信ウィンドウ)とは、コンピュータが送信者への確認応答なしに受信できるデータ量のことです。送信者が最初に送信したパケットに対する確認応答を受信していない場合、送信は停止して待機し、この待機時間が一定の制限を超えると再送信を行うことがあります。このようにして、TCPは信頼性の高いデータ伝送を実現しています。
ネットワークでパケット損失が発生しない場合でも、ウィンドウ処理によってスループットが制限される可能性があります。TCPは確認応答を待つ前にウィンドウサイズまでのデータを送信するため、ネットワークの全帯域幅が常に使用されるとは限りません。ウィンドウサイズによる制限は、次のように計算できます。
ここで、RWINはTCP受信ウィンドウ、RTTはパスの往復時間です。
TCPの受信側が通知するウィンドウは、その接続用に割り当てられた空き受信メモリの量に対応しています。そうでなければ、メモリ不足のために受信パケットが破棄されるリスクがあります。
良好なパフォーマンスを得るためには、送信側も受信側と同じ量のメモリを割り当てる必要があります。これは、ネットワーク上でデータが送信された後も、送信側は再送信が必要になる場合に備えて、受信確認が取れるまでデータをメモリに保持する必要があるためです。受信側が遠い場合、確認応答の到着に時間がかかります。送信メモリが小さいと、飽和状態になり、送信がブロックされる可能性があります。簡単な計算で、上記で示した受信メモリサイズと同じ最適な送信メモリサイズが得られます。
ネットワークでパケット損失が発生すると、接続に追加の制限が課されます。 [ 2 ]軽度から中程度のパケット損失が発生し、TCPレートが輻輳回避アルゴリズムによって制限される場合、制限は次の式に従って計算できます(Mathisら)。
ここで、MSSは最大セグメントサイズ、P lossはパケット損失の確率です。パケット損失が非常にまれで、TCPウィンドウが常に完全に拡張される場合は、この式は適用されません。
TCPには長年にわたり、高速でRTTの高いリンク(「ロングファットネットワーク」またはLFN)でのパフォーマンスを向上させるための多くの拡張機能が加えられてきた。
TCPタイムスタンプ(RFC 1323)は二重の役割を果たします。32ビットのシーケンス番号フィールドが折り返されることによる曖昧さを回避するとともに、RTTごとに複数のパケット損失が発生した場合でも、より正確なRTT推定を可能にします。これらの改善により、TCPウィンドウを64kB以上に拡張することが妥当となり、これはウィンドウスケーリングオプション(RFC 1323) を使用して実現できます。
TCPの選択的確認応答オプション(SACK、RFC 2018)を使用すると、TCP受信側はTCP送信側に対し、どのセグメントが失われたかを正確に通知できます。これにより、1ウィンドウあたり複数のパケット損失が発生する可能性がある高RTTリンクでのパフォーマンスが向上します。
パスMTU検出は、ネットワーク内でのフラグメンテーションを不要にし、パケット損失が発生した場合のパフォーマンスを向上させます。
デフォルトのIPキュー長は1000ですが、これは一般的に大きすぎます。Wi -Fi基地局の速度が20 Mbit/s、平均パケットサイズが750バイトだとします。IPキューはどのくらいの大きさにするべきでしょうか?VoIPクライアントは20ミリ秒ごとにパケットを送信できる必要があります。その場合、転送中のパケットの最大推定数は次のようになります。
推定バッファサイズ = 20000000 * 0.020 / 8 / 750 = 66
より適切な待ち行列の長さは次のとおりです。
ifconfig wlan0 mtu 1492 txqueuelen 100