Remove ads
網際網絡協定 来自维基百科,自由的百科全书
開放式最短路徑優先(英語: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有多種區域類型,其中定義了幾種特殊的區域:
骨幹區域(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定義了以下4種路由器類型:
一台路由器可以同時屬於多種類型,如右圖所示,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定義了以下4種網絡類型:[1]
點到點網絡,例如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完成以下工作:
DR本後的概念是將多路訪問網絡看作一個「偽節點(Pseudo Node)」。當SPF進行計算的時候,把鏈路看作一個節點,與該鏈路相連的路由器也是連接到這個節點上的。從與偽節點相連的路由器到這個偽節點的代價是該路由器與這個多路訪問網絡相連的接口的出站代價,從偽節點到任何與之相連的路由器的代價都為0。一台路由器可能連接到多個多路訪問網絡,該路由器可能是它所連接的其中一個多路訪問網絡的DR,也可能不是它所連接的另一個多路訪問網絡的DR,也就是說,DR是路由器接口的屬性,而不是整個路由器的屬性。
為了避免因DR失效導致的單點故障,多路訪問網絡上還將選舉BDR。DR失效時,BDR將成為DR,由於網絡上其他路由器已經和BDR形成了完全鄰接關係,因此可以將DR失效對網絡的影響降至最低。
DR和BDR的相關選舉規則如下:
在OSPF路由器之間互相交換信息之前,必須先建立鄰接關係。
兩台OSPF路由器要建立完全鄰接關係,以下參數必須相同:
一般來說,建立OSPF完全鄰接時會經過以下狀態:
OSPFv2定義了以下5種協議數據包類型:
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包的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 | ||||
…… |
OSPF定義了11種LSA,所有類型的LSA都以一個20字節的通用LSA頭部開始。這些不同類型的LSA共同描述了OSPF域內的網絡拓撲結構。所有的LSA都保存在LSDB中。SPF算法根據LSDB中的信息計算出最佳路徑。
RFC2370定義了3種新的LSA,稱作不透明LSA(Opaque LSA)。這3種新的LSA為OSPF的擴展性提供了通用的機制。它們可以攜帶用於OSPF的信息,也可以直接攜帶應用的信息。 目前有以下3種不透明LSA,它們的區別主要是洪泛範圍不同:
OSPF使用「開銷(Cost)」作為路由的度量值(Metric),路徑的度量值越低,說明該路徑越好,具有最低度量值的路徑將裝入路由表。開銷是根據接口所配置的帶寬來計算的,帶寬越高,開銷越低。在Cisco路由器上,默認情況下使用公式10^8/帶寬(10^8是基準值,可以調整;帶寬的單位是bit/s)來計算代價。例如,接口帶寬為100Mbit/s,則開銷為1;接口帶寬為1000Mbit/s,計算所得的開銷還是1(如果計算所得的開銷小於1,則按1計算)。 OSPF有以下4種路由類型,優先級由高到低排序如下:
因此如果有多條去往相同目的地的路由具有相同的度量值,那麼將比較它們的路由類型。假設有兩條去往相同目的地的路由A和路由B的度量值都是30,A是內部路由,B區域間路由,則A將會被裝入路由表。如果有多條去往相同目的地的路由具有相同的類型,相同的度量值,則它們都將被裝入路由表,並在不同路由之間進行負載均衡。
大多數運行OSPF的路由器具有一種被稱為(fight back)的安全機制。即當一個路由器收到關於自己的虛假或者不正確的LSA信息時,它將立刻發出一個包含自己正確的LSA的LSU報文,這一機制被稱為反擊或者自反擊。 不過需要注意的是,反擊機制並不是OSPF協議官方規定的安全機制。在RFC2328中,沒有對此機制的任何描述。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.