階層式路由(hierarchical routing)
想像要記住通往地球上每一棟房子的路線——這不可能。郵政系統改用一個階層:你只需要知道怎麼抵達正確的國家,再到正確的城市,再到正確的街道,再到那棟房子。階層式路由(hierarchical routing)把同樣的想法套用到網路上:路由器對自己所在的本地區域保有詳細知識,對其他所有地方只保有粗略、摘要過的知識。
在實務上,一個大型網路被切分成多個區域(OSPF 稱之為 area;整個網際網路則使用自治系統)。一台路由器只對自己所在區域握有完整拓樸,並在那裡詳細地跑它的路由演算法。要抵達其他區域的目的地,它不需要那些區域的內部地圖;它只需要知道哪台邊界路由器通往各個遠端區域,而各區域會把它們的位址以精簡的摘要(路由聚合)來通告,而非以一長串個別網路來通告。這讓每台路由器的路由表與計算量保持小巧,即便整體網路長得非常龐大。
這件事重要,是因為扁平路由根本無法擴展。如果每台路由器都得儲存並重算到網際網路上每一個個別目的地的路徑,路由表與氾流流量都會大到無法管理。階層化正是不可或缺的訣竅,讓連結狀態協定(OSPF 的區域)與全球網際網路(自治系統)都能應付數以百萬計的網路。
一個誠實的提醒:階層化以最佳性換取可擴展性。因為一台路由器對遙遠區域只看到摘要,它跨越區域邊界所挑的路徑,可能比真正的全域最低成本路徑略長一些——摘要可能藏起了最便宜的內部路由。設計者接受這點小小的低效率,因為另一個選項——處處都有完美的全域知識——在網際網路規模下是不可能的。
一個含區域 0、1、2 的 OSPF 網路:區域 1 裡的一台路由器儲存區域 1 的完整地圖,但對區域 2 只存像『10.2.0.0/16 位於邊界路由器 R 之後』這樣的摘要。它從不見到區域 2 的內部連結——這讓它的資料庫保持小巧。
本地詳細、全域摘要——這正是郵遞區號與 OSPF 區域背後的同一個原則。
階層化是讓路由得以擴展的關鍵,但跨邊界的摘要路徑可能略微次佳。可擴展性是用一點點路徑品質的代價換來的。