TCP スループットの計算
入力
| 最大セグメントサイズ | 1,460 B |
|---|---|
| 往復遅延時間 | 30 ms |
| パケット損失 | 0.1 % |
TCP スループットの計算
Mathis の式を用いて、セグメントサイズ・往復遅延時間・パケット損失率から、長時間維持される単一の TCP コネクションが達成できる最大スループットを推定します。高遅延でパケット損失のある経路では、なぜ単一フローのスループットがリンク速度をはるかに下回るのかが分かります。
入力
コネクションの条件
結果
値を入力すると計算結果が表示されます。
推定スループット
TCP スループット
TCP スループットとは、単一の TCP コネクションがネットワーク経路上で維持できる持続的なデータ速度のことです。これはリンク速度とは異なります。経路の遅延が大きく、ときおりパケット損失が起きる場合、1 Gbps のリンクであっても 1 つのコネクションには数 Mbps しか届けられないことがあります。この計算では Mathis の式を使ってこの単一フローの上限を推定します。これはバックアップ、レプリケーション、大容量アップロード、その他 1 本の TCP ストリームに乗るあらゆる転送で問題になる値です。
Mathis の式
ランダムなパケット損失によって制限される長時間維持の TCP フローは、おおよそ次のスループットに落ち着きます。
T≈RTT×pMSS×8ここで はバイト単位の最大セグメントサイズで、八を掛けることでバイトをビットに変換します。往復遅延時間 は秒を単位とし、 はパケット損失確率を分数で表したものです。結果 はビット毎秒(bps)で得られます。
この形は TCP の輻輳制御の振る舞いから生まれます。損失のたびに TCP は輻輳ウィンドウを半分にし、その後 1 往復あたり 1 セグメントずつ再構築していきます ── おなじみの加算増加・乗算減少のノコギリ波です。このノコギリ波を多数のサイクルにわたって平均すると、ウィンドウは に比例し、それを RTT で割ると上記のスループットが得られます。Matthew Mathis らは 1997 年にこの結果を発表し、これは今なお損失制限下の TCP の標準的な概算モデルとなっています。
計算例
セグメントサイズを 1250 バイト、往復遅延時間を 100 ms、パケット損失率を 0.01% (分数で 0.0001) とします。
p=0.0001=0.01 T=0.1×0.011250×8=0.00110000=10000000 bpsこれは単一フローで 10 Mbps です ── 基盤となるリンクが 100 Mbps であろうと 10 Gbps であろうと変わりません。上限を決めるのは経路の遅延と損失であって、生のキャパシティではありません。
遅延と損失が支配的な理由
分母にある 2 つの項が、速いリンクでも遅く感じられる理由を説明します。
- 往復遅延時間。 スループットは RTT に反比例します。2 つの端点間の距離が 2 倍になると単一フローの速度はおよそ半分になります。ウィンドウの調整がすべて 1 往復ぶん待ってから効くからです。
- パケット損失。 スループットは損失率の平方根に反比例して低下します。損失が 0.01% から 1% へ ── 100 倍に ── 増えると、スループットは 10 分の 1 になります。経路が長いと回復が遅いため、まれな損失でも悪く積み重なります。
この高遅延と非ゼロの損失の組み合わせは「ロングファットネットワーク」と呼ばれることがあり、まさに単一フローの TCP が振るわない領域です。
モデルが当てはまらないとき
Mathis の式は、フローが損失制限であることを前提としています。経路がクリーンで、TCP 受信ウィンドウがパイプを満たし続けるのに十分な大きさであれば、コネクションは代わりにリンク速度かウィンドウそのものによって制限されます。その領域では帯域遅延積 ── 帯域に RTT を掛けたもの ── が、リンクを飽和させるために必要なウィンドウの大きさを教えてくれ、Mathis の式はもはや支配的ではありません。
BBR のような最新の輻輳制御アルゴリズムも状況を変えます。これらはすべての損失に反応するのではなく、測定した帯域と RTT に基づいて送信のペースを調整するため、古典的な損失ベースのモデルが予測するよりもはるかにうまく損失のある経路に耐えます。Mathis の推定は従来の損失ベースの TCP に対する控えめな上限とみなし、複数の並列コネクションを走らせれば単一フローの結果が何倍にもなることを忘れないでください。
スループットの改善
平方根の関係があるため、損失を減らすのが最も大きな効果を生みます ── まずは不安定なケーブル、輻輳したホップ、故障したハードウェアを突き止めましょう。サーバーをユーザーに近づけたり、コンテンツを CDN に置いたりして RTT を短縮すると、比例して効果が出ます。経路上のすべてのホップが対応していれば、ジャンボフレームを有効にして MSS を上げられます。そして単一フローではどうしてもパイプを満たせない場合は、並列ストリームか損失に強い輻輳制御アルゴリズムが差を埋めます。
関連する計算
クリーンで高遅延のリンクを満たすのに必要な TCP ウィンドウを求めるには、帯域幅遅延積(BDP)の計算 の計算を使ってください。実効速度が分かっているときにファイルの転送にかかる時間を見積もるには、データ転送時間の計算 の計算を使います。スループットの値をビット毎秒とバイト毎秒の単位間で変換するには、スループット (bps) 換算 の計算を使ってください。
よくある質問 (FAQ)
Mathis の式とは何ですか?
Mathis の式は、ランダムなパケット損失によって制限される、長時間維持される単一の TCP コネクションのスループットを表すシンプルなモデルです。スループットはおおよそ (MSS × 8) を (RTT × 損失率の平方根) で割った値になる、というものです。
この式は 1997 年に Matthew Mathis らによって、TCP の輻輳制御が損失のたびに送信ウィンドウを半分にし、その後ゆっくりと再構築していく挙動から導かれました。あくまで上限の近似であって厳密な値ではありませんが、遅延と損失の支配的な影響を驚くほどよく捉えています。
ごくわずかなパケット損失でも、なぜスループットが大きく落ちるのですか?
パケットが 1 つ失われるたびに、TCP は輻輳ウィンドウを半分にし、その後 1 往復あたり 1 セグメントずつ再構築します。Mathis の式が示すとおり、スループットは損失率の平方根の逆数に比例するため、損失が 0.01% から 1% へ ── つまり 100 倍に ── 増えると、スループットは 10 分の 1 になります。高遅延の経路では各ステップが 1 RTT ぶん待つため再構築が遅く、これが長距離転送がたまの損失にすら敏感になる理由です。
Mathis の式が当てはまらないのはどんなときですか?
この式は、フローが受信ウィンドウやリンク速度ではなく、パケット損失によって制限されていることを前提としています。経路がクリーンで TCP ウィンドウが帯域遅延積を満たすほど大きい場合、コネクションはウィンドウ制限あるいはリンク制限となり、実際のスループットは Mathis の式ではなくリンク速度で頭打ちになります。
この計算は損失があり遅延の大きい経路に使ってください。クリーンな経路では、リンクを飽和させるのに必要なウィンドウサイズは帯域遅延積で決まります。
単一フローの TCP スループットを上げるには?
スループットは損失の平方根の逆数に比例して上がるため、まずは損失を減らしてください ── 不安定なリンク、輻輳、故障したハードウェアを修正します。サーバーをユーザーに近づけたり CDN を使ったりして RTT を短縮します。経路上のすべての機器が対応しているなら、ジャンボフレームでより大きなセグメントを有効にします。
さらに、BBR のような最新の輻輳制御アルゴリズムは古典的なモデルが想定するほど損失に敏感ではなく、複数の並列コネクションを使えば単一フローの上限を何倍にも引き上げられます。