開放式最短路徑優先
開放式最短路徑優先(英語:Open Shortest Path First,縮寫為 OSPF)是廣泛使用的一種路由協定,它屬於鏈路狀態路由協定,具有路由變化收斂速度快、無路由環路、支援變長子網絡遮罩(VLSM)和匯總、層次區域劃分等優點。
OSPF是一種基於IP協定的路由協定。它是大中型網絡上使用較為廣泛的IGP協定。OSPF是對鏈路狀態路由協定的一種實現,運作於自治系統內部。OSPF分為OSPFv2和OSPFv3兩個版本:OSPFv2定義於RFC 2328(1998),支援IPv4網絡;而OSPFv3定義於RFC 5340(2008),支援IPv6網絡。
它採用戴克斯特拉演算法來計算最短路徑樹。它使用「開銷(Cost)」作為路由度量。鏈路狀態資料庫(LSDB)用來儲存當前網絡拓撲結構,路由器上屬於同一區域的鏈路狀態資料庫是相同的(屬於多個區域的路由器會為每個區域維護一份鏈路狀態資料庫)。
OSPF提出了「區域(Area)」的概念,一個網絡可以由單一區域或者多個區域組成。其中,一個特別的區域被稱為骨幹區域(Backbone Area),該區域是整個OSPF網絡的核心區域,並且所有其他的區域都與之直接連接。所有的內部路由都通過骨幹區域傳遞到其他非骨幹區域。所有的區域都必須直接連接到骨幹區域,如果不能建立直接連接,那麼可以通過虛鏈路(virtual link)和骨幹區域建立虛擬連接。
同一個廣播域(Broadcast Domain)的路由器或者一個對等(Point To Point)連接的兩端的路由器,在發現彼此的時候,建立鄰接(Adjacencies)[註 1]。多路訪問網絡以及非廣播多路訪問網絡的路由器會選舉指定路由器(Designated Router, DR)和備份指定路由器(Backup Designated Router, BDR),DR和BDR作為網絡的中心負責路由器之間的資訊交換從而降低了網絡中的資訊流量。OSPF協定同時使用單播(Unicast)和群播(Multicast)來傳送Hello包和鏈路狀態更新(Link State Updates),使用的群播地址為224.0.0.5和224.0.0.6。與RIP和BGP不同的是,OSPF協定不使用TCP或者UDP協定而是直接承載在IP協定之上,IP協定號為89。
區域
編輯一個OSPF網絡分為多個區域。區域將網絡中的路由器在邏輯上分組並以區域為單位向網絡的其餘部分傳送匯總路由資訊。區域編號由一個長度為32位元的欄位所定義,區域編號有兩種表示方法,一種為點分十進制(如Area 1.1.1.1,寫法規則同IPv4地址);另外一種為十進制數字格式(如Area 1,注意Area 1不等於Area 1.1.1.1,而是0.0.0.1)。根據 RFC2328 描述,區域編號通常使用 32 bits的點分十進位表示。區域編號不是IP位址,用於IPv6網絡的OSPFv3也使用同樣的(形似IPv4地址的)區域編號格式。
區域是以介面(Interface)為單位來劃分的,所以一台多介面路由器可能屬於多個區域。相同區域內的所有路由器都維護一份相同的鏈路狀態資料庫(LSDB),如果一台路由器屬於多個區域,那麼它將為每一個區域維護一份LSDB。 將一個網絡劃分為多個區域有以下優點:[來源請求]
- 某一區域內的路由器只需要維護該區域的鏈路狀態資料庫,而不用維護整個OSPF網絡的鏈路狀態資料庫。
- 將某一區域網絡拓撲變化的影響限制在該區域內,不會影響到整個OSPF網絡,從而減小OSPF計算的頻率。
- 將鏈路狀態通告(LSA)的洪泛限制在本區域內,從而降低OSPF協定產生的數據量。
- 劃分區域可以對網絡進行層次化結構設計。
- 劃分區域有利於資源合理調配,核心區域部署效能較好的裝置資源,邊緣區域部署效能較差的裝置資源即可。
OSPF有多種區域類型,其中定義了幾種特殊的區域:
骨幹區域
編輯骨幹區域(Backbone Area),Area 0(點分十進制表示為0.0.0.0),是整個OSPF域的核心區域。所有其他非骨幹區域必須和骨幹區域直接或間接相連。骨幹區域的功能是在不同的非骨幹區域之間分發路由資訊。
骨幹區域必須是唯一而且連續的,但不需要在物理上連續:它可以使用虛擬連接。
傳送區域
編輯傳送區域連接至少2個其他區域,它將通告從一個區域傳送到另一個區域。
末梢區域
編輯末梢區域(Stub Area)是一個不允許AS外部路由通告(AS External LSA,即類型5 LSA)在其內部進行洪泛擴散的區域。末梢區域的ABR會通告一條預設路由(default route)到該區域內所有路由器,任何發往AS外部網絡的數據流都將依據預設路由來轉發。
不完全末梢區域
編輯非純末梢區域(Not-So-Stubby Area,NSSA)允許引入AS外部路由並且擴散到其他區域,但是NSSA仍舊不允許其他區域通告的AS外部路由進入該區域。為了使NSSA能夠引入AS外部路由,OSPF定義了新的LSA類型,即NSSA External LSA(類型7 LSA)。NSSA ASBR將產生類型7 LSA,並在NSSA區域內洪泛。NSSA ABR將會把類型7 LSA轉換成5類LSA,並洪泛到其他區域。
完全末梢區域
編輯完全末梢區域(Totally Stubby Areas)是 Cisco 特有的區域類型。完全末梢區域不僅不允許AS外部路由通告在其內部洪泛,還不允許區域間匯總路由(Network Summary LSA ,即類3 LSA)在其內部洪泛。同末梢區域一樣,完全末梢區域ABR也會向該區域內所有路由器通告一條預設路由,任何發往其他區域以及AS外部網絡的數據流都將依據預設路由來轉發。將區域設置為完全末梢區域可以顯著的降低路由表條目的數量。
完全非純末梢區域
編輯完全非純末梢區域(Totally NSSA)也是 Cisco 特有的區域類型,該種區域除了擁有和NSSA相同的特性外,還不允許類型3 LSA在該區域內部洪泛。完全非純末梢區域ABR也會向該區域內所有路由器通告一條預設路由。將區域設置為完全非純末梢區域也會顯著的降低路由表條目的數量。
OSPF路由器類型
編輯OSPF定義了以下4種路由器類型:
- 內部路由器(Internal Router)
- 骨幹路由器(Backbone Router)
- 區域邊界路由器(Area Border Router,ABR)
- 自治系統邊界路由器(Autonomous System Boundary Router,ASBR)
一台路由器可以同時屬於多種類型,如右圖所示,R2同時屬於多種類型路由器。
每一台OSPF路由器都有一個路由器識別碼(Identifier),一般寫作路由器ID。路由器ID由一個長度為32 bits的欄位所定義,通常用IPv4地址格式來表示(如1.2.2.2)。如果沒有顯式的設置路由器ID,則該路由器上最大的活躍邏輯介面IP位址將成為路由器ID;如果路由器不存在邏輯介面,則最大的活躍物理介面IP位址將成為路由器ID。注意,不要將路由器類型和指定路由器(Designated Router,DR)、備份指定路由器(Backup Designated Router,BDR)混淆,DR和BDR是路由器介面屬性,而不是整個路由器的屬性。
內部路由器
編輯如果一台路由器上所有啟用了OSPF的介面都在同一區域,那麼這台路由器就是內部路由器。
骨幹路由器
編輯骨幹路由器是指至少有一個啟用了OSPF的介面是和骨幹區域(Area 0)相連的路由器。一台骨幹路由器也可以同時是ABR或ASBR,如上圖中的R2和R3。
區域邊界路由器
編輯區域邊界路由器是指連接一個或者多個區域的路由器。區域邊界路由器為每一個與之相連的區域維護一份鏈路狀態資料庫,因此區域邊界路由器需要比內部路由器更多的主記憶體資源和更高效能的處理器。
自治系統邊界路由器
編輯自治系統邊界路由器(ASBR)用來把從其他路由協定(如BGP、EIGRP、其他行程號的OSPF等)學習到的路由以路由重分發的方式注入到OSPF行程中,從而使得整個OSPF域內的路由器都可以學習到這些路由(除了末梢區域內的路由器)。一台ASBR可以是OSPF域內非末梢區域的任何路由器,它可以是內部路由器、區域邊界路由器、骨幹路由器。
OSPF網絡類型
編輯OSPF定義了以下4種網絡類型:[1]
- 點到點網絡(point-to-point)
- 廣播網絡(broadcast)
- 非廣播多路訪問網絡(non-broadcast multi-access,NBMA)
- 點到多點網絡(Point-to-MultiPoint)
點到點網絡
編輯點到點網絡,例如E1、SONET,是單獨連接一對路由器的網絡。點到點網絡上的一對OSPF路由器形成完全鄰接關係(Full Adjacency),並且不進行DR和BDR的選舉。點到點網絡上的路由器使用群播地址224.0.0.5傳送OSPF協定封包。
廣播網絡
編輯廣播網絡即可以同時連接多於兩台裝置的網絡,如乙太網路、權杖環網、FDDI。廣播網絡上的路由器傳送的群播/廣播封包會被其他與之相連的路由器收到。在廣播網絡上的OSPF路由器會選舉一台指定路由器(DR)和一台備份指定路由器(BDR)。所有始發於DR和BDR的OSPF封包使用目的地址224.0.0.5,以群播方式傳送到所有其他OSPF路由器,所有其他的路由器都將使用目的地址224.0.0.6,以群播方式傳送OSPF封包到DR和BDR。所有其他的路由器只與DR和BDR建立完全鄰接關係。
非廣播多路訪問網絡
編輯NBMA網絡,諸如X.25、幀中繼、ATM等,可以同時連接兩台以上的路由器,但是這種網絡沒有廣播封包的能力。一台處於NBMA網絡上的路由器傳送的群播/廣播封包將不能被其他與之相連的路由器收到。在NBMA網絡上需要選舉DR和BDR,並且所有的OSPF封包都是單播傳送的。
點到多點網絡
編輯點到多點網絡是NBMA網絡的一個特殊設置,可以看作是一群點到點鏈路的集合,因此在該種網絡上不必選舉DR和BDR。點到多點網絡上OSPF的行為和點到點網絡OSPF的行為一樣,也使用群播地址224.0.0.5傳送OSPF協定封包。
虛鏈路
編輯虛鏈路被路由器認為是沒有編號的點到點網絡的一種特殊設置,在虛鏈路上OSPF封包是以單播方式傳送的。不能人工設置一個介面的網絡類型為虛鏈路。
此外還有一種特殊的網絡類型,稱之Loopback類型。OSPF路由器上的環回介面在預設狀態下均為此類型。不能人工設置一個介面的網絡類型為Loopback。
指定路由器和備份指定路由器
編輯在廣播多路訪問網絡和NBMA網絡上會選舉DR和BDR。所有其他路由器只與DR和BDR建立完全鄰居關係,其他路由器之間的鄰居狀態停留在2-Way狀態。所有其他路由器使用群播目的地址224.0.0.6向DR和BDR傳送鏈路狀態更新。
如果在多路訪問網絡中不選舉DR,所有路由器之間都建立完全鄰接關係,會產生很多不必要的LSA。假設一個多路訪問網絡上有n台路由器,那麼就會建立n(n-1)/2個鄰接關係。每台路由器都會產生n-1條LSA到與之建立鄰接關係的路由器,再加上1條網絡LSA,最終這個網絡上會產生n²條LSA,並且其中很多都是重複的LSA副本。
DR完成以下工作:
- 描述該多路訪問網絡和與其相連的路由器。
- 管理該多路訪問網絡上的LSA洪泛擴散過程。
DR本後的概念是將多路訪問網絡看作一個「偽節點(Pseudo Node)」。當SPF進行計算的時候,把鏈路看作一個節點,與該鏈路相連的路由器也是連接到這個節點上的。從與偽節點相連的路由器到這個偽節點的代價是該路由器與這個多路訪問網絡相連的介面的出站代價,從偽節點到任何與之相連的路由器的代價都為0。一台路由器可能連接到多個多路訪問網絡,該路由器可能是它所連接的其中一個多路訪問網絡的DR,也可能不是它所連接的另一個多路訪問網絡的DR,也就是說,DR是路由器介面的屬性,而不是整個路由器的屬性。
為了避免因DR失效導致的單點故障,多路訪問網絡上還將選舉BDR。DR失效時,BDR將成為DR,由於網絡上其他路由器已經和BDR形成了完全鄰接關係,因此可以將DR失效對網絡的影響降至最低。
DR和BDR的相關選舉規則如下:
- 如果一台OSPF路由器的介面優先級(Priority)為0,那麼這台路由器永遠不能成為DR或BDR。
- 具有最高優先級的路由器將會選舉為DR,具有次高優先級的路由器將會選舉為BDR。
- 如果同時有多台路由器具有相同的優先級,那麼具有最高路由器ID的路由器將會選舉為DR。
- 當DR失效時,BDR將成為DR,並將重新選舉一個BDR。
- 優先級的取值範圍為0-255,更高的優先級意味着路由器有更大的機會成為DR。
- 如果一台具有更高優先級的路由器在選舉完DR和BDR之後接入網絡,該路由器將不會成為DR或BDR,直到DR和BDR失效,當DR失效,具有更高優先級的路由器也只會成為BDR。即DR和BDR的選舉不是搶佔式的。
OSPF鄰接關係
編輯在OSPF路由器之間互相交換資訊之前,必須先建立鄰接關係。
兩台OSPF路由器要建立完全鄰接關係,以下參數必須相同:
- Hello時間間隔
- Dead時間間隔
- 區域編號
- 認證(如果啟用了認證)
- 鏈路MTU大小
- 子網絡遮罩
- 子網絡號
- 末梢區域設置
一般來說,建立OSPF完全鄰接時會經過以下狀態:
- 失效狀態(Down):這是鄰居對談的初始狀態,表示最近沒有從鄰居收到資訊。在NBMA網絡上,可能仍然會以較低頻率向處於Down狀態的鄰居傳送Hello封包。
- 嘗試狀態(Attempt):該狀態僅僅適用於連接在NBMA網絡上的鄰居。該狀態表示最近沒有從鄰居收到資訊,但仍需要作進一步的嘗試,來聯絡鄰居。這時按某一特定間隔向鄰居傳送Hello封包。
- 初始狀態(Init):在此狀態下,表示最近收到了從鄰居發來的Hello封包。但是,仍然沒有和鄰居建立雙向通訊(Bidirectional Communication),例如,路由器自身並沒有出現在鄰居傳送的Hello封包中。
- 雙向通訊狀態(2-Way):此狀態意味着兩台路由器之間建立了雙向通訊。在此狀態下還將進行DR和BDR的選舉(只有處於2-Way狀態的路由器才有資格參選DR和BDR)
- 資訊交換初始狀態(ExStart):這個狀態是建立鄰接關係的第一步。該狀態的目標是決定資訊交換時路由器的主從關係,並確定初始資料庫描述(DD)封包的序列號。具有最高路由器ID的路由器將成為主路由器。
- 資訊交換狀態(ExChange):在此狀態的路由器通過向鄰居傳送DD封包來描述其完整的鏈路狀態資料庫。每一個DD封包都有一個序列號,並且需要被顯式的確認。在任何時候,每次只能傳送一個DD封包。在此狀態下,路由器也可以傳送鏈路狀態請求封包,用來向鄰居請求最新的LSA。實際上,這些狀態的鄰接關係完全有能力傳送和接收所有類型的OSPF協定封包。
- 資訊載入狀態(Loading):在此狀態下,路由器將會向鄰居路由器傳送鏈路狀態請求封包,用來請求資訊交換狀態發現的最新的LSA。
- 完全鄰接狀態(Full):在此狀態下,鄰居路由器形成完全鄰接關係。這些鄰接關係將會在路由器LSA和網絡LSA中被描述。
OSPFv2封包類型和格式
編輯OSPFv2定義了以下5種協定封包類型:
- Hello包 HELLO
- 資料庫描述包 DBD
- 鏈路狀態請求包 LSR
- 鏈路狀態更新包 LSU
- 鏈路狀態確認包 LSAck
OSPF包頭
編輯5種OSPF訊息有共通的24位元組的頭部結構。其結構如下:
位 | 第1位元組 | 第2位元組 | 第3位元組 | 第4位元組 |
---|---|---|---|---|
0~31 | Version # | type | Packet length | |
32~63 | Router ID | |||
64~95 | Area ID | |||
96~127 | Checksum | AuthType | ||
128~159 | Authentication | |||
160~191 | Authentication |
Hello包
編輯Hello包的OSPF包類型為1。這些包被周期性的從各個介面(包括虛鏈路)發出,用來建立和維護鄰居關係。另外,在支援群播或廣播的物理網絡上,Hello包使用群播地址(通常為224.0.0.5)傳送。 Hello包的傳送間隔由HelloInterval指定(通常為10s),路由器將會先發出不包含鄰居欄位的空Hello包,當收到鄰接路由器的Hello包之後,將對方的路由器標識放入本機的Hello包中進行群播,這種包含鄰居欄位的包,也被稱為HelloSeen包。假如在間隔達到RouterDeadInterval所規定的時長(通常為40s)內仍未收到一個已建立連接的路由器的Hello包,路由器將會終止這一連接。將對方的狀態轉為Down。 Hello包的格式如下:
位 | 第1位元組 | 第2位元組 | 第3位元組 | 第4位元組 |
---|---|---|---|---|
0~191 | OSPF包頭 | |||
192~223 | Network Mask | |||
224~255 | HelloInterval | Options | Rtr Pri | |
256~287 | RouterDeadInterval | |||
288~319 | Designated Router | |||
320~351 | Backup Designated Router | |||
352~383 | Neighbor | |||
…… |
資料庫描述包
編輯資料庫描述包(Database Description)的OSPF包類型為2。當鄰接關係初始化後,便開始交換這些封包。它們描述了鏈路狀態資料庫的摘要資訊(只包含LSA的頭部資訊)。
資料庫描述包包含兩種,即空資料庫描述包和包含LSA頭部資訊的資料庫描述包。
當兩個路由器互相收到HelloSeen包之後,他們將會開始互相傳送空資料庫描述包,空資料庫描述包被用來進行主從關係的確定。 通常以路由標識較大的為Master,當主從關係確立之後,從機將會使用主機的序號向主機傳送第一個包含LSA頭部資訊的資料庫描述包。主機將會在收到從機的資料庫描述包之後傳送自己的序號加一的資料庫描述包,作為對於從機的收到確認。在這樣的互動過程中,只有主機可以更改序號(DD sequence number),從機使用主機序號。資料庫描述包的格式如下:
位 | 0~7 | 8~15 | 16~23 | 24 | 25 | 26 | 17 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|
第1位元組 | 第2位元組 | 第3位元組 | 第4位元組 | ||||||||
0~191 | OSPF包頭 | ||||||||||
192~223 | Interface MTU | Options | 0 | 0 | 0 | 0 | 0 | I | M | MS | |
224~255 | DD sequence number | ||||||||||
256~287 | An LSA Header | ||||||||||
288~319 | |||||||||||
320~351 | |||||||||||
352~383 | |||||||||||
384~415 | |||||||||||
…… |
鏈路狀態請求包
編輯鏈路狀態請求包(Link State Request)的OSPF包類型為3。在交換資料庫描述包之後,路由器便知道其自身鏈路狀態資料庫缺少哪些LSA,以及哪些LSA是過期的。這時就可以傳送鏈路狀態請求包來請求對方傳送缺少的LSA和最新的LSA。鏈路狀態請求包格式如下:
位 | 第1位元組 | 第2位元組 | 第3位元組 | 第4位元組 |
---|---|---|---|---|
0~191 | OSPF包頭 | |||
192~223 | LS type | |||
224~255 | Link State ID | |||
256~287 | Advertising Router | |||
…… |
鏈路狀態更新包
編輯鏈路狀態更新包(Link State Update)的OSPF包類型為4。LSA的洪泛就是由此類型的包實現的。每一個鏈路狀態更新包可能包含多條LSA資訊。這裏的LSA資訊是完整的,而不像資料庫描述包只包含LSA的頭部資訊。
鏈路狀態更新包的格式如下:
位 | 第1位元組 | 第2位元組 | 第3位元組 | 第4位元組 |
---|---|---|---|---|
0~191 | OSPF包頭 | |||
192~223 | # LSAs | |||
224~255 | LSAs | |||
256~287 | ||||
288~319 | ||||
…… |
鏈路狀態確認包
編輯鏈路狀態確認包(Link State Acknowledgement)的OSPF包類型為5。為了確保LSA的洪泛是可靠的,LSA資訊必須被顯式的確認。鏈路狀態確認包的格式如下:
位 | 第1位元組 | 第2位元組 | 第3位元組 | 第4位元組 |
---|---|---|---|---|
0~191 | OSPF包頭 | |||
192~223 | An LSA Header | |||
224~255 | ||||
256~287 | ||||
288~319 | ||||
320~351 | ||||
…… |
LSA類型
編輯OSPF定義了11種LSA,所有類型的LSA都以一個20位元組的通用LSA頭部開始。這些不同類型的LSA共同描述了OSPF域內的網絡拓撲結構。所有的LSA都儲存在LSDB中。SPF演算法根據LSDB中的資訊計算出最佳路徑。
- 路由器LSA(Router-LSA):路由器LSA的類型為1。每一台OSPF路由器生成一條路由器LSA。該LSA描述了路由器的介面狀態,以及每一個介面的出站代價。路由器LSA只能在始發他們的OSPF區域內進行洪泛,不能洪泛到其他區域。
- 網絡LSA(Network-LSA):網絡LSA的類型為2。網絡LSA是DR為了描述連接到多路訪問網絡並且和DR建立了完全鄰接關係的路由器而生成的,包括DR本身。和路由器LSA一樣,網絡LSA也只能在始發這條LSA的區域內進行洪泛。
- 匯總LSA(Summary-LSA):匯總LSA的類型為3。此類LSA描述了區域間的網絡,由ABR生成。對於末梢區域,匯總LSA同樣被用於描述預設路由。
- ASBR匯總LSA(ASBR Summary-LSA):ASBR匯總LSA的類型為4,也是由ABR生成。ASBR匯總LSA通告的是一台區域外部的ASBR路由器,而不像匯總LSA通告的是區域外的網絡。
- 自治系統外部LSA(AS-External-LSA):自治系統外部LSA的類型為5,由ASBR生成。此類LSA描述AS外部的網絡,並可以洪泛到所有非末梢區域中去。
- 組成員LSA(Group-Membership-LSA ):組成員LSA類型為6。組成員LSA是對標準OSPF的一個擴充,使其支援群播路由功能,擴充後的OSPF稱之Multicast Open Shortest Path First(MOSPF)。
- NSSA外部LSA(NSSA-External-LSA):NSSA外部LSA類型為7。此類LSA由NSSA區域內的ASBR生成,也用來描述AS外部的網絡。NSSA外部LSA僅僅在始發他們的NSSA區域內進行洪泛,而不像自治系統外部LSA可以洪泛到所有非末梢區域。
- 鏈路本地LSA(Link-Local LSA):鏈路本地LSA類型為8。該LSA專門用於OSPFv3(用於IPv6網絡的OSPF)。鏈路本地LSA包含了每一個介面的鏈路本地地址和一個IPv6地址列表。
RFC2370定義了3種新的LSA,稱作不透明LSA(Opaque LSA)。這3種新的LSA為OSPF的擴充性提供了通用的機制。它們可以攜帶用於OSPF的資訊,也可以直接攜帶應用的資訊。 目前有以下3種不透明LSA,它們的區別主要是洪泛範圍不同:
- 類型9不透明LSA:洪泛範圍僅僅是本地鏈路。
- 類型10不透明LSA:洪泛範圍是始發該LSA的區域。
- 類型11不透明LSA:洪泛範圍是整個OSPF域。
OSPF路徑選擇
編輯OSPF使用「開銷(Cost)」作為路由的度量值(Metric),路徑的度量值越低,說明該路徑越好,具有最低度量值的路徑將裝入路由表。開銷是根據介面所組態的頻寬來計算的,頻寬越高,開銷越低。在Cisco路由器上,預設情況下使用公式10^8/頻寬(10^8是基準值,可以調整;頻寬的單位是bit/s)來計算代價。例如,介面頻寬為100Mbit/s,則開銷為1;介面頻寬為1000Mbit/s,計算所得的開銷還是1(如果計算所得的開銷小於1,則按1計算)。 OSPF有以下4種路由類型,優先級由高到低排序如下:
- 內部路由:去往區域內聯網的路由。
- 區域間路由:去往不同區域網絡的路由。
- 類型1的外部路由:去往OSPF域外的路由,類型1的外部路由的度量值包括了外部路由的度量值和到ASBR的度量值。
- 類型2的外部路由:去往OSPF域外的路由,類型2的外部路由的度量值只包括了外部路由的度量值。
因此如果有多條去往相同目的地的路由具有相同的度量值,那麼將比較它們的路由類型。假設有兩條去往相同目的地的路由A和路由B的度量值都是30,A是內部路由,B區域間路由,則A將會被裝入路由表。如果有多條去往相同目的地的路由具有相同的類型,相同的度量值,則它們都將被裝入路由表,並在不同路由之間進行負載均衡。
OSPF的反擊機制
編輯大多數執行OSPF的路由器具有一種被稱為(fight back)的安全機制。即當一個路由器收到關於自己的虛假或者不正確的LSA資訊時,它將立刻發出一個包含自己正確的LSA的LSU報文,這一機制被稱為反擊或者自反擊。 不過需要注意的是,反擊機制並不是OSPF協定官方規定的安全機制。在RFC2328中,沒有對此機制的任何描述。
註釋
編輯- ^ 實際上,廣播網路中的路由器彼此之間並不一定建立鄰接,這取決於網絡中指定路由器的選舉結果,所有的路由器都與同一個廣播網絡中的指定路由器以及備份指定路由器建立鄰接,而非指定路由器之間彼此僅僅紀錄對方為雙工通訊可能而不建立鄰接。
參考文獻
編輯參照
編輯- ^ RFC 2328 - OSPF Version 2. RFC. [2017-07-20]. (原始內容存檔於2021-04-27).
The neighborhood of each network node in the graph depends on the network's type (point-to-point, broadcast, NBMA or Point-to-MultiPoint) and the number of routers having an interface to the network.
來源
編輯- Jeff Doyle; Jennifer Carroll. Routing TCP/IP. Volume I Second Edition. America: Cisco Press. 2005-10-19 (英語).
相關條目
編輯- 中間系統到中間系統 - Intermediate system to intermediate system (IS-IS)
- IEEE 802.1aq - Shortest Path Bridging (SPB)
- 進階綜合
- 網狀網絡
- 路由
- 最短路問題
外部連結
編輯- IETF OSPF Working Group
- Zebra (頁面存檔備份,存於互聯網檔案館) free router software which supports OSPF
- Quagga (頁面存檔備份,存於互聯網檔案館) a fork of Zebra
- OSPF Design Guide On Cisco.com (頁面存檔備份,存於互聯網檔案館)
- RFC 5187 OSPF Version 3 Graceful Restart, Juni 2008
- RFC 2740 OSPF Version 3, Dezember 1999
- RFC 2370 OSPF Opaque LSA Option, Juli 1998
- RFC 2328 OSPF Version 2, April 1998
- RFC 1850 OSPF Version 2 MIB, November 1995
- RFC 1793 Extending OSPF to Support Demand Circuits, April 1995
- RFC 1587 OSPF NSSA Option, März 1994
- RFC 1253 OSPF Version 2 MIB, August 1991, ersetzt durch RFC 1850
- RFC 1247 OSPF Version 2, Juli 1991, ersetzt durch RFC 2370
- RFC 1131 OSPF Version 2, Juli 1991, ersetzt durch RFC 1247