跳轉到內容

路由協議和體系結構/開放最短路徑優先

來自 Wikibooks,開放書籍,開放世界
Previous page
IGRP 和 EIGRP
路由協議和體系結構 Next page
域間路由:網際網路中的對等和轉運
開放最短路徑優先

開放最短路徑優先 (OSPF) 是一種基於鏈路狀態 (LS) 演算法的域內路由協議。前兩個版本與 IPv4 一起使用,而版本 3 被認為適合 IPv6。

與其他域內路由協議相比,OSPF 的主要優勢在於可擴充套件性(最多數百個路由器)

  • LS 演算法:瞭解網路拓撲結構可以相對於基於距離向量演算法的協議獲得更大的穩定性;
  • 分層路由:OSPF 建議在一個區域內不要超過 200 個路由器
    • 關於其他區域的路由資訊可以被彙總;
    • 一個區域中的路由更改不會影響其他區域。
OSPF 網路示例。

OSPF 定義了自己的術語,這些術語並不總是與其他協議的術語一致

自治系統 (AS)
管理的角度來看,由單個實體控制的域(例如 GARR)
OSPF 自治系統
技術角度來看,由單個實體控制的域(即裝置配置),並由單個 OSPF 協議例項處理
自治系統邊界路由器 (ASBR)
位於 OSPF AS(通常是區域 0)和外部路由域(EGP,或如果 OSPF AS 與其他具有不同 IGP 協議的路由域一起位於 AS 本身內,則為 IGP)之間的邊界路由器
邊緣區域
OSPF AS 分割成的分層子域之一,由一個物理上連續的網路組成:每個內部路由器無需退出區域本身即可與同一區域內的任何其他路由器通訊
區域 0
骨幹區域,不一定是物理上連續的( #分割槽區域),所有從一個邊緣區域到另一個邊緣區域或從一個邊緣區域到 OSPF AS 外部的流量都必須透過
  • 無瓶頸:鏈路不應過小
  • 健壯:它不應成為一個分割槽區域
區域邊界路由器 (ABR)
位於區域 0 和邊緣區域之間的邊界路由器
從區域 1 檢視網路。

每個路由器都完全瞭解它所屬區域的拓撲結構,但其他區域的精確拓撲結構是未知的:該路由器可能瞭解其區域外部可到達目標的列表,該列表可以被彙總或替換為預設路由。

內部路由器的資料庫包含三種類型的記錄

  • 鏈路狀態:它們由區域內的其他內部路由器生成,幷包含區域內的內部路由,包括拓撲資訊,這些資訊從不進行彙總。
    ABR 瞭解它連線的兩個區域的鏈路狀態:它具有多個數據庫,每個區域一個,當然它們會產生一個路由表;
  • 彙總/外部記錄:它們包括區域外部的外部路由器,不包括拓撲資訊(僅網路地址 + 網路掩碼),可以進行彙總
    • 彙總記錄:它們由 ABR 生成,幷包含同一 OSPF AS 內其他區域(包括區域 0)內的外部路由;
    • 外部記錄:它們由 ASBR 生成,幷包含 OSPF AS 外部的外部路由。

區域 0 中的路由器通常被配置為聚合網路地址,以便將網路彙總從一個區域傳播到另一個區域。但是,必須由操作員手動指定聚合,以免出現網路彙總問題。

存根區域

[編輯 | 編輯原始碼]

除了瞭解區域本身內所有內部路由的拓撲結構的詳細資訊外,普通邊緣區域還會從區域 0 匯入所有外部路由,而無需進一步聚合。

當某些外部路由被單個預設路由替換以減少從外部匯入的路由資訊時,一個區域是存根

  • 存根區域:它保留彙總記錄,但刪除外部記錄;
  • 完全存根區域:它刪除彙總記錄和外部記錄,只保留鏈路狀態和通往出口的單個預設路由;
  • 非完全存根區域:它類似於存根區域,但它可以向其他區域注入 OSPF AS 外部的外部路由(不將其匯入區域)。

存根區域是在網路管理員的顯式配置下啟用的

  • 存根區域區域 xx 存根
  • 完全存根區域區域 xx 存根無彙總
  • 非完全存根區域區域 xx nssa

雖然 OSPF 並不阻止存根區域擁有多個 ABR,但當存根區域僅透過一個 ABR 連線到區域 0 時,配置存根區域更有意義:不需要傳播外部路由,因為只有一個路徑連線該區域到網路的其餘部分,而外部路由只有在存在多個出口路由器時才有用。

[編輯 | 編輯原始碼]

虛擬鏈路是兩個路由器之間的一種“隧道”,其中至少一個屬於區域 0,它在邏輯上屬於區域 0,但在物理上由邊緣區域內的連結序列組成。目的是讓 OSPF 相信這兩個路由器透過區域 0 中的虛擬鏈路連線。

啟用虛擬鏈路只需要跨越的區域(只有一個)和兩個涉及的路由器的路由器 ID,而不是它們的介面的 IP 地址:OSPF 會自動推匯出正確的 IP 地址。OSPF 路由訊息被封裝到跨越鏈路的 IP 單播資料包中 → 為了建立雙向隧道,需要在兩端路由器上都配置虛擬鏈路。

分割槽區域

[編輯 | 編輯原始碼]

處理分割槽區域的問題,OSPF 在處理方式上有所不同,具體取決於區域的型別

  • 邊緣區域:ABR 不會彙總邊緣區域中所有網路的資訊,而只會通告它能夠到達的網路 → 發往分割槽的包只會傳送給存在到達目標的內部路徑的 ABR;
  • 區域 0: OSPF 無法自動解決骨幹網中分割槽區域的問題(總是選擇最近的 ABR 作為出口點),但在某些情況下,操作員可以在兩個 ABR 之間手動啟用虛擬鏈路,該鏈路在物理上跨越邊緣區域:當資料包到達 ABR 時,它會返回到該區域,到達隧道另一端的 ABR,最後進入區域 0 → 區域 0 必須始終在邏輯上,但不一定是物理上連續的。

擴充套件骨幹網區域

[編輯 | 編輯原始碼]

屬於不同邊緣區域的兩個路由器之間的連結通常不能使用:實際上,來自一個區域到另一個區域的流量必須始終穿過區域 0。

由於虛擬鏈路,可以將邊緣區域中的路由器(直接連線到單個骨幹網路由器)引入骨幹網:該內部路由器成為訪問區域 0 的 ABR,然後連線到它的所有連結都可以用於流量。

指標和成本

[編輯 | 編輯原始碼]

OSPF 在單個連結上同時支援多種指標:最佳路徑可以根據資料包,例如

  • 最短路徑;
  • 具有最佳頻寬容量的路徑;
  • 具有最低延遲的路徑。

OSPF 允許根據 IP 資料包中的“服務型別”(ToS)欄位定義指標→ 理論上,64 種服務型別,然後 64 種不同的路由樹是可能的,但實際上此功能幾乎未使用,因為每個路由器上 LS 演算法所需的處理負載會為每個 ToS 複製。

OSPF 採用等成本多路徑路由。與 IGRP 不同,OSPF 沒有定義計算連結成本的明確方法:成本由網路裝置製造商分配→ 每個製造商都有自己的預設值,在多廠商網路中可能產生不一致→ 最好在最重要的連結上(在兩端)自定義成本值。

路由器 ID

[編輯 | 編輯原始碼]

每個 OSPF 路由器都由一個路由器 ID 唯一標識,該 ID 用作 OSPF 資料包中路由器的“名稱”(例如,作為 OSPF 標頭中的源)。

OSPF 沒有指定如何確定路由器 ID,但只是指定它必須是 32 位長的唯一識別符號。在思科裝置上,路由器 ID 可以透過兩種方式獲得

  • 手動:網路管理員明確配置路由器 ID 的值(在 IPv4 中,通常不這樣做,而在 IPv6 中,這是強制性的: B6. Instradamento IPv6#OSPFv3
  • 自動:一種演算法從路由器的 IPv4 地址獲取路由器 ID
    • 如果至少存在一個迴環介面,則路由器 ID 等於迴環介面中最大的地址:迴環介面不依賴於物理介面的狀態,因此更穩定;
    • 如果沒有迴環介面,則路由器 ID 等於OSPF 網路介面中最大的地址。

鏈路狀態通告(LSA)是包含在鏈路狀態更新資料包中的資料結構,其中包含 OSPF 路由資訊

  1. 路由器 LSA:它描述了透過點對點鏈路的鄰接關係;
  2. 網路 LSA:它列出了連線到中轉網路的路由器,由中轉網路的指定路由器生成;
  3. 網路彙總 LSA:它包含同一個 OSPF AS 中其他區域內的外部路由(彙總記錄),由 ABR 生成;
  4. ASBR 彙總 LSA:如果 ASBR 不在區域 0 而是邊緣區域,它會通知 ASBR 的位置;
  5. AS 外部 LSA:它包含 OSPF AS 之外的外部路由(外部記錄),由 ASBR 生成。

路由器 LSA

[編輯 | 編輯原始碼]

OSPF 定義了兩種型別的鏈路

  • 路由器鏈路(預設):如果兩個路由器之間存在點對點鏈路(例如序列介面),則每個路由器都將其視為邏輯上分為兩個點對點鏈路
    • 與相鄰路由器(由其自身的路由器 ID 標識)的點對點連線;
    • 與相鄰 IP 網路的點對點連線,稱為存根網路[1],即路由器網路介面所屬的網路。
      如果路由器介面已啟用但未連線到任何其他路由器,則只有與存根網路的連線(單個路由器圖形);
  • 網路鏈路(網路鏈路圖形):如果存在廣播網路(例如乙太網),稱為中轉網路,則連線到它的兩個[2]或多個路由器中,每個路由器都將其視為邏輯上與相鄰中轉網路的點對點連線。

LSA 路由器可以描述透過點對點鏈路的多種型別的鄰接關係

  1. 路由器的鄰接關係:由彼此相鄰的兩個路由器中的每一個生成;
  2. 中轉網路的鄰接關係:由連線到中轉網路的每個路由器(包括指定路由器)生成;
  3. 存根網路的鄰接關係:由其介面與存根網路相鄰的路由器生成;
  4. 虛擬鏈路的鄰接關係:由虛擬鏈路兩端的每個路由器生成。

OSPF 資料包

[編輯 | 編輯原始碼]

所有 OSPF 資料包都直接封裝到 IP 中(協議型別 = 89),無需任何中間傳輸協議的幫助。

所有資料包都相同的 OSPF 標頭指定了傳輸的 OSPF 資料包的型別

  • 型別 1:Hello
  • 型別 2:資料庫描述
  • 型別 3:鏈路狀態請求
  • 型別 4:鏈路狀態更新
  • 型別 5:鏈路狀態確認

Hello 協議

[編輯 | 編輯原始碼]

Hello 協議執行故障檢測,而不依賴於物理層。

Hello 資料包每隔 HelloInterval(預設 = 10 秒)傳送一次,一旦在物理層檢測到故障,鄰接關係就會被視為消失,並且不再通告

  • 只要在物理層檢測到故障;
  • 如果在物理層無法檢測到故障,則在一定數量的丟失 Hello 資料包(預設 RouterDeadInterval = 40 秒,相當於 4 個 Hello 資料包)之後。

但是,LSA 仍然保留在 OSPF 資料庫中,如果沒有更新,它將在等於 MaxAge(預設 = 1 小時)的時間段後過期。

路由器 ID 在 OSPF 程序啟動時計算,即使路由器上的 IP 地址被修改,它也不會被修改→ 路由器可能會在 OSPF 程序重啟時(例如,在故障或停電後)以不同的路由器 ID 出現→ 在由 LS 演算法計算出的拓撲中,一個不再存在的節點將保留,直到它的 LSA 過期。

交換協議

[編輯 | 編輯原始碼]

交換協議用於執行鄰接關係建立,即在兩個路由器變為相鄰時同步它們的資料庫存。

鄰接關係建立僅在需要時執行,即當路由器資料庫中存在一些未更新的資訊時。

  • 檢查資料庫更新需求是在以下情況下執行的:
  • 網路發生變化後(例如在啟動時或當新的鏈路變為活動狀態時);

當LSA重新整理計時器到期時(預設值為30分鐘),以重新整理仍然有效的LSA的年齡,以防它們過期。

  1. 在鄰接關係建立過程中,只交換舊的或丟失的LSA。
  2. 資料庫描述:主路由器傳送其資料庫中所有LSA的序列號列表;
  3. 鏈路狀態請求:從路由器傳送其資料庫中舊的或丟失的LSA相關的序列號列表;
  4. 鏈路狀態更新:主路由器傳送請求的LSA,鏈路狀態更新資料包以選擇性泛洪的方式傳播;

鏈路狀態確認:從路由器確認已收到鏈路狀態更新。

參考資料
  1. [edit | edit source]
  2. '樁網路' 不應與 '樁區域' 混淆。
Previous page
IGRP 和 EIGRP
路由協議和體系結構 Next page
域間路由:網際網路中的對等和轉運
開放最短路徑優先
OSPF 不阻止將兩臺路由器之間的點對點鏈路配置為傳輸網路。
華夏公益教科書