主動量測(active measurement)
想像你想知道一條路有多塞,於是你派出自己的一輛車,帶著碼錶開上去,計時整趟跑了多久。你看的不是剛好已經在路上的那些車——你加進了自己的一輛,再從它跑得如何來得知狀況。主動量測(active measurement)對網路來說正是這個想法:你注入自己的探測流量,再觀察網路對它做了什麼。著名的工具 ping 與 traceroute 都是主動量測,速度測試也是。
具體而言,主動工具會刻意產生封包,內容往往經過仔細挑選,並記錄什麼東西在什麼時間回來。ping 送出一個小探測,計時直到回覆返回為止。像 iperf 這類頻寬測試工具會在數秒內以最快速度灌出資料,再報告它達到的速率。單向延遲量測則在封包離開時打上時戳,到達時再打一次。在每一種情況下,網路都是透過被餵入它本來不會承載的流量而被問了一個問題,而答案就從時間、遺失,或探測所走的路徑中讀出來。
誠實的取捨是:你正在改變你所量測的那個東西。探測流量會消耗頻寬與緩衝區空間,所以一個重度的主動測試本身就可能造成它試圖偵測的壅塞——這是一種網路版的測不準問題。主動量測也只是抽樣:每秒一次的 ping 只告訴你那些瞬間的狀況,而不是兩次之間發生了什麼。它在你需要當場直接問一個問題時(這台主機通不通?這條連結現在多快?)非常寶貴,但若要對真實使用者流量取得連續、低干擾的全貌,你會改用被動量測(passive measurement)。
你懷疑一個很慢的網站是網路的問題。你執行「ping example.com」,看到穩定的 20 ms 回覆,再執行「iperf3 -c testserver」,看到 90 Mbps。兩者都是主動量測:你製造了本來不存在的流量,再從它的表現讀出答案。
主動工具透過注入探測流量,在需要時回答一個問題——代價是增加負載,而且只在時間上抽樣某些瞬間。
主動量測會擾動它所量測的對象:一個重度的吞吐量測試會消耗它正在回報的那份頻寬,而單一一次 ping 只是快照,不是連續的真相。把它的數字當成你所製造的條件下的一次抽樣。