網路層:路由

最低成本路徑(least-cost path)

假設你要從你的城鎮開車到朋友的城鎮,而每條路都要收過路費。最低成本路徑(least-cost path)是過路費加總起來最小的那條路線——不一定是沿途經過城鎮最少的那條,也不一定是地圖上看起來最直的那條。在網路裡,『過路費』就是連結成本,而找出這條最便宜的路線正是路由的核心工作。

精確地說:給定一張加權圖與一個來源節點,到某目的地的最低成本路徑,是一串從來源到目的地的連結,其成本總和在所有可能的這類串列中是最小的。若每條連結成本都是 1,這就退化成跳數最少的路徑(按跳數計的字面上最短路徑)。當成本不相等時,最便宜的路徑可能比一條較貴的直連繞過更多路由器。演算法會利用一個有用的事實:最低成本路徑的任一子路徑,本身就是其兩端點之間的最低成本路徑——正是這個『最佳子結構』讓 Dijkstra 與 Bellman-Ford 能一塊一塊地建出答案。

這件事很重要,因為路由演算法的整個重點就是算出每台路由器到每個目的地的最低成本路徑,而轉送表本質上就是這些路徑各自的第一跳。路徑算對了,封包就流動得有效率;算錯了,流量就會繞遠路,更糟的是繞圈。

一個誠實的提醒:『最低成本』有多大意義,全看你餵進去的成本。若成本沒反映真實狀況(比方說它忽略了當下的壅塞),紙上談兵的最低成本路徑在實務上未必最快。此外,多數網域內協定是用靜態、預先設定好的成本來算路徑,而非即時流量——所以它們最佳化的是網路的一個模型,而非它瞬間的真實狀態。

從 A 出發,連結為 A-B(1)、B-D(1)、A-D(4):到 D 的最低成本路徑是 A -> B -> D,成本 2,勝過成本 4 的單一連結 A -> D,即便後者只有一跳。

贏家是總成本最低者,而非跳數最少者——除非每條連結剛好成本都相同。

最低成本最佳化的是設定好的成本度量,而這通常是靜態的。在兩次重算之間,它不會自動閃避壅塞或故障。

又称
shortest pathminimum-cost path最短路徑