帯域幅遅延積(BDP)の計算
入力
| 帯域幅 | 1 Gbps |
|---|---|
| ラウンドトリップタイム(RTT) | 30 ms |
帯域幅遅延積(BDP)の計算
回線の帯域幅とラウンドトリップタイムから帯域幅遅延積(BDP)を計算します。BDP は経路上を流れているデータ量であり、その経路を十分に使い切るために推奨される TCP ウィンドウサイズでもあります。
入力
回線の特性
結果
値を入力すると計算結果が表示されます。
帯域幅遅延積
流れているビット数
帯域幅遅延積(BDP)
帯域幅遅延積(BDP)とは、ある瞬間にネットワーク経路上を占有できるデータ量、すなわち送信側と受信側のあいだを「流れている」データの量です。高速接続をチューニングするうえで最も役立つ単一の数値で、確認応答を待って遊ばせるのではなく回線を十分に使い切るために、TCP ウィンドウやソケットバッファをどれだけ大きくすべきかを教えてくれます。
計算式
BDPbits=B×T BDPbytes=8B×Tここで はビット毎秒(bps)で表した帯域幅、 はラウンドトリップタイム(RTT)で、いずれも一秒を時間の基準とします。積 は回線上のビット数を与え、8 で割るとそれをバイト、つまり TCP ウィンドウやバッファを設定する単位に変換できます。
役に立つイメージは、水を運ぶパイプです。帯域幅はパイプの断面積、RTT はその長さに当たり、帯域幅遅延積はパイプの総容積に相当します。途切れなく水を流し続けるには、常に少なくともその容積分の水を中で動かしておく必要があります。
計算例。 30 ms のラウンドトリップタイムを持つ 1 Gbps の回線:
BDPbits=1,000,000,000×0.030=30,000,000 bits BDPbytes=830,000,000=3,750,000 bytes≈3.75 MBつまり、ある瞬間におよそ 3.75 MB のデータが流れており、回線を飽和させるには少なくともそのサイズの TCP ウィンドウが必要です。帯域幅を半分の 100 Mbps にすると BDP は 1.25 MB に下がり、同じスループットに必要なバッファは 3 分の 1 で済みます。
なぜ BDP がウィンドウサイズを決めるのか
TCP はスライディングウィンドウプロトコルです。送信側は、ウィンドウが許す分しか未確認のバイトを抱えられません。ウィンドウがいっぱいになると、送信側は止まり、確認応答が戻ってくるまで丸 1 往復分待ってから次を送ります。
ウィンドウが BDP より小さいと、最初の確認応答が戻る前に送信側はそれを使い切ってしまい、回線は毎往復の残りの時間ずっと遊んでしまいます。すると到達可能なスループットは次の値に頭打ちになります。
throughput=RTTwindowこれは回線がどれだけ生の帯域幅を持っていても変わりません。受信ウィンドウとソケットバッファを少なくとも 1 BDP に設定すれば、このボトルネックがなくなり、接続は全容量を使えるようになります。
ロングファットネットワーク
帯域幅遅延積が大きい経路、すなわち高帯域幅と高レイテンシがともに揃った経路は、ロングファットネットワーク(LFN)と呼ばれます。大陸横断の光ファイバー、大陸間経路、衛星回線が典型例です。これらが扱いにくいのは、ウィンドウが往復全体をカバーできるほど大きくなければならないためです。
元の TCP ヘッダーはウィンドウフィールドに 16 ビットしか確保しておらず、上限は 64 KB でした。下表の 1 Gbps、100 ms の経路では BDP は 12.5 MB で、その上限のほぼ 200 倍にもなります。ウィンドウスケーリングオプション(RFC 7323)は、広告されるウィンドウを 2 のべき乗で倍増させ、まさにこうした経路で接続が BDP へ近づけるようにするためのものです。
| 経路 | 帯域幅 | RTT | BDP |
|---|---|---|---|
| LAN | 1 Gbps | 1 ms | 125 KB |
| 国内インターネット | 100 Mbps | 30 ms | 375 KB |
| 大陸横断 | 1 Gbps | 60 ms | 7.5 MB |
| 大陸間 | 1 Gbps | 100 ms | 12.5 MB |
| 静止衛星 | 50 Mbps | 600 ms | 3.75 MB |
レイテンシが帯域幅と同じくらい重要なことに注目してください。衛星回線は光ファイバー経路よりはるかに遅いにもかかわらず、その巨大な RTT のおかげで、大陸横断接続に匹敵する BDP を持っています。
ビット、バイト、そして RTT の測定
帯域幅はビット毎秒(bps)で広告され、バッファはバイトで設定されるため、係数 8 は不可欠です。BDP をビットで表すと、必要なバッファを 8 倍も過大評価してしまいます。値を選ぶときは、ボトルネックの帯域幅(経路上で最も遅い回線)と、ping やパケットキャプチャで測定した現実的な RTT を使ってください。多くの広域経路では、RTT は伝搬遅延、すなわち光が距離を伝わるのにかかる時間が支配的で、これはどれだけバッファを増やしても短縮できません。
実用上の帰結として、帯域幅が同じ 2 本の回線でも、必要なチューニングは大きく異なり得ます。往復が長いほうが BDP が大きく、より大きなウィンドウを要求します。これはまた、遠方のサーバーへの高帯域幅な回線でも、OS やアプリケーションがウィンドウを BDP より低く制限していると、依然として遅く感じられる理由でもあります。
関連する計算
パケットロスと RTT がともに接続の実速度をどう制限するかを見るには、TCP スループットの計算 の計算を使ってください。ラウンドトリップタイムを伝搬・シリアライズ・キューイング・処理の各成分に分解するには、レイテンシバジェットの計算 の計算を使ってください。ビット毎秒とバイト毎秒の単位でレートを変換するには、スループット (bps) 換算 の計算を参照してください。
よくある質問 (FAQ)
帯域幅遅延積とは何ですか?
帯域幅遅延積(BDP)とは、回線の帯域幅にラウンドトリップタイムを掛けたものです。これは、ある瞬間に経路上を「流れている」、すなわち送信済みだがまだ確認されていないデータの最大量に等しくなります。回線をパイプに例えると、帯域幅はその直径、RTT はその長さに当たり、BDP はパイプの容積に相当します。容量を完全に使うには、送信側が少なくとも 1 BDP 分の未確認データを抱えられるようにしておく必要があります。
BDP はどのように TCP ウィンドウサイズを決めるのですか?
TCP は、送受信ウィンドウが許す分しか未確認データを抱えられません。ウィンドウが BDP より小さいと、送信側はそれを使い切ったあと、続きを送る前に確認応答を待って丸 1 往復分待機することになり、回線が遊んでしまいます。
TCP 受信ウィンドウとソケットバッファを少なくとも BDP のバイト数に設定すれば、送信側はパイプを満たし続けられます。最近のスタックはウィンドウスケーリングと自動チューニングを使い、ウィンドウを自動的に BDP へ近づけますが、制約のあるシステムや古いシステムでは、手動でバッファ上限を引き上げる必要がある場合があります。
ロングファットネットワーク(LFN)とは何ですか?
ロングファットネットワークとは、帯域幅遅延積が大きい経路、すなわち高帯域幅と高レイテンシが組み合わさった経路のことで、大陸横断回線や衛星回線などが該当します。こうした経路は満たし続けるために大きなウィンドウを必要とします。100 ms の RTT を持つ 1 Gbps の回線の BDP は 12.5 MB で、スケーリングなしの TCP における最大 64 KB をはるかに上回ります。ロングファットネットワークこそ、ウィンドウスケーリング、大きなバッファ、最新の輻輳制御アルゴリズムが最も効いてくる場面です。
なぜ帯域幅だけでなくレイテンシがスループットを制限するのですか?
TCP は確認応答を待つため、回線がどれだけ生の帯域幅を持っていても、スループットはウィンドウサイズを RTT で割った値に上限が決まります。RTT が 2 倍になれば BDP も 2 倍になり、同じ速度を出すのに必要なウィンドウも 2 倍になります。これが、遠方のサーバーへの高速な回線が遅く感じられる理由です。ウィンドウが往復をカバーできないと、接続は送信よりも待機にほとんどの時間を費やすことになります。