什麼是頻寬延遲乘積(BDP)?
頻寬延遲乘積(Bandwidth-Delay Product,簡稱 BDP)指的是在任一瞬間,網路連線上能同時「在途傳輸」的最大資料量。它等於連線頻寬乘以來回延遲時間(RTT)。BDP 是 TCP 調校的核心觀念:想要充分發揮「高速度、高延遲」連線(也就是俗稱的「長肥網路」,Long Fat Network)的效能,TCP 接收視窗至少必須大於等於 BDP,否則實際傳輸速率將遠遠低於可用頻寬。
如何使用本計算機
先輸入連線頻寬並選擇單位(bit/s、Kbit/s、Mbit/s 或 Gbit/s),接著填入以毫秒(ms)為單位的來回延遲時間,也就是 ping 指令通常會回報的數值。計算機會同時給出以位元、位元組與 KB 表示的 BDP。設定 socket 緩衝區或 TCP 視窗大小時,請以位元組(byte)的數值為依據。
公式說明
BDP(位元)= 頻寬(bits/s)× RTT(秒)。計算時先把頻寬換算成每秒位元數,並將 RTT 由毫秒換算成秒(除以 1000)。將位元結果除以 8 即得位元組數,再將位元組除以 1024 就得到 KiB(KB)。
$$\text{BDP (bytes)} = \frac{\text{Bandwidth} \times \text{Unit} \times \dfrac{\text{RTT (ms)}}{1000}}{8}$$
實際範例
假設一條 100 Mbit/s 的連線,RTT 為 40 ms。此時頻寬=100,000,000 bit/s,RTT=0.040 秒。\(\text{BDP} = 100{,}000{,}000 \times 0.040 = 4{,}000{,}000\) 位元=500,000 位元組 ≈ 488.28 KB。若要讓這條連線跑滿頻寬,TCP 視窗至少應設定為約 500 KB。
解釋您的 BDP 結果
BDP 是發送方必須能夠保持在線上的未確認數據量,以充分利用鏈路。TCP 在必須等待確認之前,只能有一個窗口大小的數據處於未完成狀態,因此接收窗口必須滿足:
$$\text{TCP 窗口} \ge \text{BDP}$$如果窗口小於 BDP,發送方會傳輸一個窗口的數據,然後在等待 ACK 的整個往返時間內空閒。可實現的吞吐量則會受到限制,無論鏈路提供多少帶寬:
$$\text{吞吐量} \approx \frac{\text{窗口(字節)} \times 8}{\text{RTT(秒)}}$$例如,在 150 毫秒跨洲路徑上的經典 64 KB 窗口只能產生 \(\frac{65{,}536 \times 8}{0.150} \approx 3.5\) Mbit/s — 遠低於 100 Mbit/s 鏈路的容量。
- 預設窗口(無縮放):原始的 16 位 TCP 窗口字段的最大值為 65,535 字節(64 KB)。在低延遲的區域網上,通常已足夠。
- 窗口縮放 (RFC 1323 / RFC 7323):任何 BDP 超過 64 KB 的路徑都需要 TCP 窗口縮放選項,該選項將公告窗口乘以 2 的某個冪次,最高可達約 1 GB。必須在兩個端點上啟用該選項(並且不被中間設備剝離)。
- 窗口過小:吞吐量受限於窗口 ÷ RTT;延遲增加一倍會使固定窗口的可達成速度減半。這就是為什麼「長胖網路」(高 BDP)即使在快速鏈路上也感覺很慢。
- 窗口過大:將窗口設定遠大於 BDP 會浪費記憶體,並可能增加緩衝/延遲,但不會改善穩定狀態吞吐量。
作為實踐規則,應將最大 TCP 緩衝區設定為至少 BDP(通常使用 BDP 的 2 倍以吸收 ACK 時序和重傳)。現代作業系統會自動向上調整窗口至接近 BDP,因此主要要驗證的是窗口縮放是否在端到端都允許。
典型 RTT 和帶寬參考值
當您沒有測量的 RTT 時,請使用這些典型範圍作為輸入。實際 RTT 取決於物理距離、路由、佇列和介質;衛星鏈路主要由地球同步軌道的傳播延遲決定。
| 網路路徑 | 典型 RTT | 說明 |
|---|---|---|
| 同一局域網 / 資料中心 | < 1 ms | 交換式乙太網、本地子網 |
| 同一城市 / ISP | 1–10 ms | 本地對等互聯、區域伺服器 |
| 同一國家 | 10–40 ms | 跨區域陸地光纖 |
| 跨洲 / 洲際 | 80–150 ms | 例如 US–Europe、US–Asia |
| 地球同步軌道衛星 | 500–700 ms | ~每跳上下各 36,000 公里 |
按連線類型的常見存取帶寬(下行、標稱):
| 連線類型 | 典型帶寬 |
|---|---|
| ADSL | 5–24 Mbit/s |
| VDSL / 固定無線 | 25–100 Mbit/s |
| Cable (DOCSIS) | 100–1000 Mbit/s |
| 光纖到府 (FTTH) | 100 Mbit/s – 10 Gbit/s |
| 4G LTE | 10–100 Mbit/s |
| 5G | 100 Mbit/s – 1 Gbit/s+ |
| 千兆乙太網 (局域網) | 1 Gbit/s |
| 10 千兆乙太網 | 10 Gbit/s |
在計算 BDP 之前,為了在單位之間轉換引用的計劃速度,Gbps-to-Mbps 或 Kbps-to-Mbps 轉換可能會有幫助;記住 BDP 公式需要原始的每秒位元數。
常見問題
為什麼延遲會影響傳輸速率?因為傳送端在任何時間點只能有「一個視窗」份量、尚未收到確認(ACK)的資料在途中。若視窗小於 BDP,傳送端就得停下來等待 ACK,導致頻寬閒置浪費。
該看位元組還是位元?頻寬通常以位元(bit)標示,但緩衝區與視窗大小是以位元組(byte)設定,因此調校時以位元組的結果最實用。
RTT 該填多少?請填入兩端點之間的來回延遲時間,一般可用 ping 量測,或依地理距離概估。