多媒體、即時通訊與服務品質

盡力而為服務(best-effort service)

想像把一張明信片投進郵筒。郵政會試著遞送它,通常也送到了——但它不給你任何承諾:不保證會到、不保證何時到、不保證相對於你其他明信片的順序、也不保證完好送達。你得到的是它的盡力而為,僅此而已。網際網路基本的傳遞模型正是如此。盡力而為服務意味著網路試著轉送每一個封包,但對傳遞、時序、順序或速率毫無保證。它不保留資源、不排優先、也不承諾任何最低品質。

具體來說,在盡力而為之下,一個封包逐跳被轉送,在每一台路由器它就只是加入輸出連結的一條先進先出佇列。當太多流量抵達、佇列溢位時,封包就被丟棄——沒有道歉,網路本身也不重送。延遲隨佇列有多滿而變動(那就是抖動),封包可能走不同的路徑、亂序抵達,而且沒有「某條流比另一條重要」的概念。應用程式所需的任何可靠性、順序或時序,都必須在端主機、在這個樸素服務之上建立——這正是 TCP 為可靠性所做的,也是 RTP 加上播放緩衝區為即時時序所做的。

為什麼重要:盡力而為是整個網際網路的預設行為,理解它既解釋了為什麼網路如此簡單、便宜、可擴展,也解釋了為什麼即時媒體要花這麼多額外功夫。它是這整個領域誠實的背景。重大的實務結論是:雖然有 IntServ 與 DiffServ 這類服務品質架構能做得更好,公共網際網路大致選擇維持盡力而為,改以超額配置——加上足夠的容量讓壅塞罕見——因為在數千個獨立網路之間,這比協調端到端的保證更簡單也更便宜。盡力而為與其說是一個待修的缺陷,不如說是一個刻意、極其成功的設計選擇。

你在同一條連結上同時串流影片並下載一個大檔案。網路不知道也不在乎哪個比較重要;兩者都以先進先出共享佇列。若連結飽和了,任一者的封包都可能被丟棄,你的影片可能頓挫——除非有額外的東西(一個緩衝區,或服務品質)來補償。

盡力而為對所有封包一視同仁;即時媒體的平順必須在邊緣另行加上。

盡力而為並非意外地「壞掉」或低品質——它是讓網際網路簡單又可擴展的刻意設計。實務上業者保留它並超額配置容量,而非部署複雜的端到端服務品質。

又称
best-effort deliverybest-effort model盡力而為服務盡力傳遞