Loading AI tools
網際網路協定 来自维基百科,自由的百科全书
開放式最短路徑優先(英語: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.