什麼是 TCP 吞吐量計算器?
這個工具會根據 TCP 接收視窗大小與網路來回傳輸時間(RTT),估算單一 TCP 連線在理論上的最大吞吐量。由於 TCP 在同一時間只能有「一個視窗大小」的未確認資料正在傳輸途中,因此視窗大小與 RTT 兩者結合起來,就決定了資料傳輸速度的上限——這個上限與實體線路本身的頻寬無關。這正是著名的頻寬延遲乘積(bandwidth-delay product)限制。
使用方式
請以 KB(千位元組)輸入 TCP 視窗大小,並以 ms(毫秒)輸入來回傳輸時間。計算器會將視窗換算成位元、把 RTT 換算成秒,再相除,分別以 Mbps、Kbps 與 bps 顯示吞吐量。視窗越大、RTT 越低,可達到的吞吐量就越高。
公式說明
核心公式很簡單:吞吐量 = 視窗大小 ÷ RTT。為了讓單位一致,我們會做換算:1 KB = 1024 位元組 = 8192 位元,而以毫秒為單位的 RTT 需除以 1000 換算成秒。因此以每秒位元數表示的吞吐量為(視窗 KB × 8192)÷(RTT ÷ 1000)。再除以 1,000,000 即可得到 Mbps。
$$\text{Throughput (Mbps)} = \frac{\text{Window (KB)} \times 1024 \times 8}{\text{RTT (ms)} / 1000} \times \frac{1}{10^{6}}$$
實際範例
假設 TCP 視窗為 64 KB,RTT 為 50 ms。換算成位元:\(64 \times 1024 \times 8 = 524{,}288\) 位元。RTT 換算成秒:\(50 / 1000 = 0.05\) 秒。吞吐量 $$= \frac{524{,}288}{0.05} = 10{,}485{,}760 \text{ bps} \approx \mathbf{10.49 \text{ Mbps}}$$ 若想完整發揮更高速線路的效能,就需要更大的視窗(也就是 TCP 視窗縮放,window scaling)。
常見問題
為什麼我的吞吐量達不到線路速度?因為在高 RTT 的路徑上使用較小的視窗,會限制同時能在途中傳輸的資料量。這也是長距離連線通常需要啟用視窗縮放的原因。
要達到目標速度需要多大的視窗?把公式調換一下即可:視窗(位元)= 吞吐量 × RTT。這個乘積就是頻寬延遲乘積,也就是理想的緩衝區大小。
這個計算有考慮封包遺失嗎?沒有——這是無遺失情況下的最大值。在會丟封包的線路上,實際吞吐量會更低,用 Mathis 公式來估算會更準確。