鏈路狀態路由算法(LS算法)
工作原理
- 每個路由器
將自己的鏈路狀態信息洪泛
到網絡上的所有路由器
。tips:(每個路由器都洪泛會給網絡帶來負擔) - 每個路由器最終會知道
整個網絡的拓撲結構
(LSDB)。 - 每個路由器
使用Dijkstra最短路徑算法計算本路由器到其他路由器的最短路徑
,更新路由表。 - 路由器的
鏈路狀態發生變化時會繼續洪泛自身的鏈路狀態信息
到其他路由器。
鏈路與鏈路狀態
鏈路
的本質上是路由器上的一個接口
鏈路狀態
是有關各條鏈路的狀態信息
鏈路狀態數據包洪泛
路由器一旦接收到來自相鄰路由器的LSP,立即
將該LSP從除接收該LSP的接口以外的所有接口發出
Dijkstra算法(直接見圖)
Dijkstra算法分析
算法複雜度:n個節點
- 每次迭代需要檢查不在N的節點
- 最差的複雜度:n*(n - 1)/2次比較:O(n^2)
- 平均的複雜度:O(nlogn)
路由振盪
- 假設,link cost = amount of carried traffic(鏈路代價與流量和有關),且鏈路代價的具有方向性,LS算法可能會讓分組一會逆時針轉發,一會順時針轉發,形成振盪。
- 本質:
同時執行
最短路徑算法導致路由振盪
,可以採用隨機數解決同時問題
OSPF協議
概述
- Open Shortest Path First,
開放式最短路徑優先路由協議
鏈路狀態路由算法
,無路由自環- 用於AS內部,屬於
IGP
- 使用
區域劃分,適用於大規模網絡
- 支持VLSM和CIDR
- 使用組播方式發送協議報文
- 支持驗證
- OSPF是基於IP的,協議號爲89
- OSPF是典型的
停止等待協議
,自身實現了可靠傳輸
路由器標識(Router ID)
- 用於唯一確定OSPF路由器
- 一個32位的無符號整數,整個自治系統內唯一
- 若不手動配置,一般取該路由器的所有接口的IP地址的最大值(loopback地址優先)
OSPF的鏈路代價
一條OSPF鏈路的代價定義爲:10^8/BandWidth
一條OSPF路由的代價爲其經過的所有鏈路代價的總和
OSPF規定的網絡類型
網絡類型 | 舉例 |
---|---|
廣播 | 以太網 |
非廣播多路訪問NBMA | 幀中繼、X.25 |
點到點 | PPP,HDLC |
點到多點 | 多個點到點鏈路的集合 |
全連通網絡的處理
選取DR和BDR
DR:指定路由器 (村長)
BDR:備份指定路由器 (副村長)
DR負責通告路由
BDR備份
選取規則
選取優先級最大的
選取router id 最大的
選取方式
投票制和終身制
OSPF的數據包格式
ODPF包類型 | 描述 |
---|---|
Hello (不需要確認) | 用戶鄰居路由器之間建立和維護鄰接關係 |
數據庫描述包DBD | 描述每臺OSPF路由器的鏈路狀態數據庫的內容 |
鏈路狀態請求包LSR | 請求鏈路狀態數據庫的部分內容 |
鏈路狀態更新包LSU | 傳送鏈路狀態數據通告LSA給鄰居路由器 |
鏈路狀態確認包LSAck(不需要確認) | 確認鄰居發過來的LSA已經收到 |
OSPF劃分區域
目的
:減少洪泛的範圍
工作方式:
- 同一個區域內部路由器之間使用鏈路狀態算法,
洪泛的範圍限於一個區域內部
。 - 不同區域之間的路由通過
ABR
(區域邊界路由器)負責通告(距離矢量算法) - 必須要有
骨幹區域(area 0),且所有區域應當和骨幹區域物理上直連,保證不會出現路由環路問題
。 - 區域劃分可以和IP地址結合在ABR上通告彙總的路由。