延遲預算計算器
輸入
| 傳播延遲 | 20 ms |
|---|---|
| 序列化延遲 | 1 ms |
| 佇列延遲 | 5 ms |
| 處理延遲 | 2 ms |
延遲預算計算器
把網路延遲拆成四個組成部分——傳播、序列化、佇列與處理延遲——以求出單向延遲與往返時間。可用於診斷一條連線把時間花在哪裡。
輸入
延遲組成
結果
輸入數值即可顯示計算結果。
往返時間
單向延遲
延遲預算
網路延遲很少是單一數字。一個封包從路徑一端到另一端所經歷的延遲,是好幾種不同效應的總和,每一種都有自己的成因與自己的解方。延遲預算把總延遲視為這些部分的總和,讓你看清時間花在哪裡,以及當應用程式感覺遲鈍時該針對哪個組成下手。
四個組成
單向延遲是四個經典組成的總和,往返時間則是對稱路徑下單向延遲的兩倍:
t1=tp+ts+tq+td RTT=2×t1其中 是傳播延遲, 是序列化延遲, 是佇列延遲, 是處理延遲。
- 傳播延遲()。 訊號跨越實體距離所需的時間,由介質中的光速主宰。光在光纖中以其真空速度約三分之二行進,因此一條路徑每個方向每 1,000 公里約增加 5 ms 的傳播延遲。距離是唯一的槓桿。
- 序列化延遲()。 把一個封包的每個位元送上線路所需的時間,等於封包大小除以鏈路速率。一個 1,500 位元組訊框在 1 Gbps 鏈路上約需 12 微秒完成序列化。更快的鏈路與更小的封包會縮短它。
- 佇列延遲()。 一個封包在緩衝區中排在其他流量後方等待的時間。在閒置鏈路上接近於零,並隨使用率逼近 100% 而急遽攀升。這是變動最大的組成,也是抖動的常見成因。
- 處理延遲()。 每台裝置花在剖析表頭、查找路由與轉送上的時間。在現代硬體上它很小且穩定,每一跳通常是微秒等級。
計算範例
考慮一條路徑:20 ms 傳播延遲、1 ms 序列化延遲、5 ms 佇列延遲、2 ms 處理延遲。單向延遲為:
t1=20+1+5+2=28 ms往返時間是其兩倍:
RTT=2×28=56 ms因此跨越這條路徑的 ping 約會讀到 56 ms,而單向串流會經歷 28 ms 的延遲。傳播延遲在此主導全局,這對中等距離的網際網路路徑而言相當典型。
哪個組成主導
組成的比例會隨情況改變,而這會告訴你該把心力花在哪裡。
| 情況 | 主導組成 |
|---|---|
| 長距離/跨洲鏈路 | 傳播 |
| 飽和或壅塞的鏈路 | 佇列 |
| 緩慢的最後一哩鏈路、大封包 | 序列化 |
| 多跳數、深度檢測 | 處理 |
在跨洲鏈路上,傳播延遲可達數十毫秒並淹沒其他一切,因此再快的硬體都幫不上忙——唯有把端點移得更近才行。在壅塞的鏈路上,佇列延遲可能飆到數百毫秒,而增加容量或採用主動佇列管理就是解方。
為什麼往返時間很重要
往返時間是多數協定真正在意的數字。一個請求必須抵達目的地,回覆必須傳回來,因此對對稱路由而言,一趟往返涵蓋了單向距離兩次——這就是那個乘以二的由來。TCP 確認資料的速度不可能快過一趟 RTT,這意味著高延遲鏈路即使頻寬充裕,仍會抑制吞吐量。延遲與吞吐量之間的這種耦合,正是為什麼又長又快的鏈路需要大的傳送視窗,也是本計算器與頻寬延遲乘積估算之間的連結。
真實路徑並不總是完全對稱:去程與回程路由可能不同,因此量測到的 ping 未必正好是單向量測的兩倍。這個乘以二是穩健的規劃假設,而非保證。
削減預算
一旦你知道哪個組成主導,補救之道也就隨之而來。傳播延遲只對更短的路徑有反應,實務上意味著用內容傳遞網路或邊緣節點把伺服器放在使用者附近。佇列延遲對更多容量、流量整形,以及讓緩衝區不致塞滿的佇列管理有反應。序列化延遲對更快的鏈路與更小的訊框有反應。處理延遲通常已經很小,但在繁忙的裝置上能受益於硬體轉送。先量測每個部分,才能確保你拉的是真正能撼動總和的那根槓桿。
相關計算器
一旦你知道往返時間,可用 頻寬延遲乘積計算機 計算器估算傳輸中資料量與 TCP 視窗。若想了解延遲如何在有遺失的鏈路上限制吞吐量,請使用 TCP 吞吐量計算機 計算器。若想估算一筆大量傳輸端到端要花多久,請參閱 資料傳輸時間計算機 計算器。
常見問題(FAQ)
什麼是延遲預算?
延遲預算是把總網路延遲拆解成造成它的各個部分,讓你看清時間花在哪裡,以及在應用程式變得無回應之前還剩多少餘裕。網路單向延遲有四個經典組成:傳播(距離)、序列化(把位元送上線路)、佇列(在緩衝區中等待)與處理(裝置處理)。
把它們相加得到單向延遲;乘以二得到往返時間。把延遲當成一筆預算來看,能清楚知道該針對哪個組成下手:長距離鏈路由傳播主導,而壅塞鏈路則由佇列主導。
傳播延遲與處理延遲有什麼差別?
傳播延遲純粹是距離與介質的函數:光在光纖中以真空光速約三分之二的速度行進,因此一條 3,000 公里的路徑每個方向約增加 15 ms,無論設備多快都一樣。
處理延遲則是每台路由器或交換器檢視並轉送一個封包所花的時間,在現代硬體上通常是數十微秒。在長途鏈路上傳播延遲通常主導全局,而處理延遲只有在封包跨越許多跳數或經過深度封包檢測時才會變得顯著。
為什麼往返時間是單向延遲的兩倍?
一個請求必須前往目的地,而回應必須傳回來,因此對對稱路徑而言,一趟往返涵蓋了單向距離兩次。這就是為什麼在本計算器中 RTT 等於單向延遲的兩倍。
真實路徑並不總是對稱——去程與回程路由可能不同——因此量測到的 ping 未必正好是單向量測的兩倍。RTT 之所以重要,是因為像 TCP 這類協定確認資料的速度不可能快過一趟往返,這會在高延遲鏈路上限制吞吐量。
我該如何降低延遲?
針對主導你預算的那個組成下手。要削減傳播延遲,可用 CDN 或邊緣節點把伺服器移到更靠近使用者的地方,因為你無法勝過光速。
要削減佇列延遲,可增加容量、套用流量整形,或啟用主動佇列管理,讓緩衝區不會塞滿。要削減序列化延遲,可使用更快的鏈路或更小的封包。處理延遲通常已經很小,但在繁忙的裝置上,卸載與硬體轉送會有幫助。先量測每個組成,才能告訴你哪根槓桿真正能撼動那個數字。