天天看點

OSPF路由協定之單域的原理與配置

    在上一章我們學習了動态路由協定RIP,但是對于某些應用來說,RIP路由協定還有些不足。例如:計算路徑的成本以跳數作為唯一的路徑成本,不能根據帶寬來計算成本;跳數最大為15跳,限制了網絡的規模;收斂慢等。而OSPF适用于更大型的網絡、收斂快、根據帶寬計算路徑成本等優點,是以在實際應用中,OSPF應用更廣泛。

    開放式最短路徑優先協定(OSFP)是基于開放标準的鍊路狀态路由選擇協定,它完成各路由選擇協定算法的兩大主要功能:路徑選擇和路徑交換。

OSPF路由協定概述

1. OSPF是内部網關路由協定

    在共同管理域下的一組運作相同路由選擇協定的路由器的集合為一個自治系統(Autonomous System,AS)。在網際網路中,一個自制系統是一個有權決定本系統使用哪種路由協定的機關,它可以是一個企業、一座城市或一個電信營運商。随着網絡的發展,上述對AS的定義已經不是十分準确了,網絡的發展使得網絡之間經常出現網絡合并情況,導緻同一個自治系統中使用的路由協定也越來越多,是以自治系統的定義應該是在共同管理下的網際網路絡。

<a href="http://yangshufan.blog.51cto.com/13004230/1961182" target="_blank"></a>

  内部網關路由協定(IGP):用于在單一自治系統(Autonomous System,AS)内決策路由。内部網關路由協定包括RIP、OSPF等。

  與内部網關路由協定相對應的叫做外部網關路由協定(EGP),外部網關路由協定用于在多個自治系統之間執行路由。BGP協定就是外部網關路由協定。

IGP是用來解決AS内部通信的,而EGP是解決AS間通信的。

2. OSPF是鍊路狀态路由協定

    鍊路狀态路由協定通過與鄰居路由器建立鄰接關系,互相傳遞鍊路狀态資訊,來了解整個網絡的拓撲結構。在鍊路狀态資訊中,包括有哪些鍊路,這些鍊路與哪個路由器相連,連接配接的路徑成本是多少等資訊,是以,在鍊路狀态路由協定收斂後,一台路由器可以了解本區域完整的鍊路資訊。

    運作鍊路狀态路由協定的路由器就好像各自“繪制”自己所了解的網段資訊,然後通過與鄰居路由器建立鄰接關系,互相“交流”鍊路資訊,學習整個區域内鍊路資訊,來“繪制”出整個區域内的鍊路圖。在一個區域内的所有路由器都儲存着完全相同的鍊路狀态資料庫。

鄰居路由器:位于同一條實體鍊路或實體網段上的路由器。

鍊路狀态資料庫:也稱為拓撲資料庫,它包含所有路由器、路由器的鍊路以及這些鍊路的狀态,還包含所有網路以及到這些網絡的所有路徑。

鄰接關系:當兩台運作OSPF協定的鄰居路由器的鍊路狀态資料庫達到一緻(同步)時,它們就是完全鄰接的。

OSPF的工作過程

    運作RIP的路由器隻需要儲存一張路由器,而使用OSPF路由協定的路由器需要儲存三張表。

鄰居表:列出每台路由器已經建立鄰接關系的全部鄰居路由器。

鍊路狀态資料庫(LSDB):列出網絡中其他路由器的資訊,由此顯示了全網的網絡拓撲。

路由表:列出通過SPF算法計算出的到達每個相連網絡的最佳路徑。

    運作OSPF的路由器試圖與鄰居路由器建立鄰接關系,在鄰居之間互相同步鍊路狀态資料庫。使用最短路徑算法(OSPF依據的算法是Dijkstra算法),從鍊路狀态資訊計算得到一個以自己為樹根的“最短路徑樹”。到最後,每一台路由器都将從最短路徑樹中建構出自己的路由表。OSPF的路由器也仍然是依據路由表進行資料轉發的。

SPF(Shortest Path Tree):最短路徑優先算法。

Edsger Wybe Dijkstra(艾茲格W迪科斯徹):是Dijkstra最短路徑算法的創造者。

OSPF的基本概念

1. OSPF區域

* OSPF是一種鍊路狀态型的路由協定,不會産生環路問題,是以不需要使用最大跳數等限制來防止環路的産生。

* OSPF将自治系統分割成多個小的區域,OSPF的路由器隻在區域内部學習完整的鍊路狀态資訊,而不必了解整個自治系統内部所有的鍊路狀态。

    區域0為骨幹區域,它用來連接配接自治系統内部的所有其他區域。用來連接配接骨幹區域和其他區域的路由器叫做區域邊界路由器,它了解所連接配接的兩個區域的完整的鍊路狀态資訊,并将鍊路狀态資訊彙總後發給區域内的其他路由器。這樣,減小了路由器儲存的鍊路狀态資料庫的大小,可以解決路由器記憶體容量有限的問題。

    區域是通過一個32位的區域ID(Area ID)來辨別的。

    區域ID可以表示成一個十進制的數字,也可以表示成一個點分十進制的數字。在Cisco的路由器中這兩種表示方式都可以使用。

    區域0(或者區域0.0.0.0)是為骨幹區域保留的區域ID号。OSPF的骨幹區域(Backbone Area)是一個特殊的OSPF區域,它擔負着區域間路由資訊傳播的重任。

名詞解釋:

   區域:區域ID相同的一組邏輯上的OSPF路由器,區域中的所有路由器的鍊路狀态資料庫都相同。在OSPF配置中,區域是分别在各個接口上定義的。

2. Router ID

    因為運作OSPF的路由器要了解每條鍊路是連接配接在哪個路由器上的,是以,就需要有一個唯一的辨別來标記OSPF網絡中的路由器,這個辨別稱為Router ID。

    Router ID是在OSPF區域内唯一辨別路由器的IP位址。Cisco路由器通過下面的方法得到它們的Router ID。

    首先,路由器選取它所有Loopback接口上數值最高的IP位址。

    如果路由器沒有配置Loopback接口的IP位址,那麼路由器就在所有活動實體端口中選取一個數值最高的IP位址作為路由器的Router ID。用作Router ID的路由器接口不一定非要運作OSPF協定。

    使用Loopback接口作為Router ID的主要好處是Loopback接口比任何其他的實體端口都更穩定。一旦路由器啟動成功,這個回環接口就會處于活動狀态,隻有整個路由器失效時它才會失效。

    在OSPF協定中可以通過router-id指令指定路由器的Router ID,是以網絡管理者可以配置便于識别和記憶的Router ID值。

    在實際工程中配置OSPF時都需要手工指定路由器的Router ID,這已經成為了一種标準配置。

3. DR和BDR

(1) DR和BDR的概念

    運作OSPF的路由器通過與鄰居路由器建立鄰接關系,互相傳遞鍊路狀态資訊。如果每兩個路由器之間都要建立鄰接關系,那麼,就會構成n(n-1)/2個鄰接關系。每台路由器都要與其他所有的鄰居路由器互相傳遞鍊路狀态資訊。

    那麼這種情況就會顯得比較混亂,而且也會浪費許多不必要的網絡資源。

    為了避免這些問題的發生,可以在這個網段上選舉一個指定路由器(Designated Router,DR)。由DR同網絡中的其他路由器建立鄰接關系,并負責将網段上的變化告知它們。

    網絡上的每一台路由器都和DR構成一個鄰接關系,那麼隻需要建立n-1個鄰接關系就可以了。

    為了實作備援,當DR失效時,需要有一個新的指定路由器來接替它,這個路由器就是備份指定路由器(Backup Designated Router,BDR)。網絡上所有的路由器将和DR、BDR同時形成鄰接關系,DB和BDR之間也将形成鄰接關系。如果DR失效了,BDR将成為新的DR。

(2) DR和BDR的選舉

    可以由OSPF自動選擇DR和BDR,也可以手工選擇。

自動選擇DR和BDR

    網段上Router ID最大的路由器将被選舉為DR,第二大的将被選舉為BDR。這樣的選舉結果可能不是最佳的,例如:如果網段中有Cisco7200和3800系列路由器,那麼3600路由器可能由于Router ID較大而被選舉為DR。

手工選舉DR和BDR

    要手工選擇DR和BDR,需要設定路由器的優先級。每台路由器的接口都有一個路由器優先級(Router Priority),用一個八位的無符号整數來表示,大小範圍是0-255,數值越大,優先級越高。Cisco路由器上預設的優先級是1。接口優先級可以通過指令ip ospf priority來更改。如果路由器的優先級被設定為0,它将不參與DR和BDR的選舉。

    優先級越高,赢得選舉的可能性越大。如果優先級相同,則需要比較Router ID。

DB和BDR的選舉過程

    當一台OSPF路由器啟動并發現它的鄰居路由器時,它将去檢查有效的DB和BDR路由器。

如果DR和BDR路由器存在的話,這台路由器将接受已經存在的DR和BDR路由器。

如果BDR路由器不存在,将執行一個選舉過程,選出具有最高優先級的路由器作為BDR路由器。如果存在多個路由器具有相同的優先級,那麼Router ID最大的路由器将被選中。

如果沒有有效的DR路由存在,那麼BDR路由器将被提升為DR路由器,然後再執行一個選舉過程選舉BDR路由器。

    這裡需要注意的是,路由器的優先級可以影響一個選舉過程,但是它不能強制更換已經存在的DR或BDR路由器。也就是說,在已經選舉了DR和BDR路由器後,如果一台具有更高優先級的路由器接入網絡,這台新的路由器并不會馬上替換DR或BDR路由器中的任何一個。是以,在一個廣播多路通路網絡上,最先初始化啟動的兩台具有選舉資格的路由器将成為DR和BDR路由器。

(3) OSPF的多點傳播位址

    一旦DR和BDR路由器選舉成功,其他路由器(成為DRother)将隻與DR與BDR路由器形成鄰接關系。多點傳播位址224.0.0.5代表所有參與OSPF的路由器(AIISPFRouter),而多點傳播位址224.0.0.6隻有DR和BDR路由器去偵聽這個位址,但BDR隻偵聽不響應。在廣播多路通路網絡上,鍊路更新資訊先發送到244.0.0.6,再由DR路由器使用多點傳播位址244.0.0.5泛洪更新封包到其他所有路由器。

4. OSPF的路徑成本

    OSPF的用來度量路徑優劣的路徑成本稱為Cost(開銷),是指從該接口發送出去的資料包的出站接口開銷。鍊路開銷使用16位的無符号的整數表示,大小範圍是1-65535。

    Cisco公司使用的預設代價是108/BW,表示為一個整數,在這裡BW是指在接口上配置的帶寬,而108是Cisco路由器使用的參考帶寬。

    路由器接口的開銷值可以通過指令ip ospf cost來改變,當在一個有多家廠商産品的網絡環境中配置Cisco的路由器時,這個指令變得十分重要。例如:有些廠商的路由器在其所有的接口上使用的預設開銷值是1。如果網絡中所有的路由器沒有使用同一種計算開銷的方式來指定OSPF的開銷,那麼OSPF協定将不能正确的進行路由選擇。

    使用108作為接口的參考帶寬在現代一些帶寬高于100Mb/s的網絡媒體中會産生一個問題。108/110Mb/s=1,這就意味着更高帶寬的傳輸媒體在OSPF協定中将會計算出一個小于1的數,這在OSPF協定中是不允許的。是以,從IOS 11.2版開始,Cisco可以在OSPF程序模式下使用指令auto-cost reference-bandwidth修正這個問題,這個指令允許管理者更改預設的參考帶寬。

OSPF鄰接關系的建立

1. OSPF的資料包類型

   OSPF資訊不使用TCP或UDP,它承載在IP資料包内,使用協定号89(十進制)。

   OSPF路由協定依靠五種不同類型的包來辨別它們的鄰居以及更新鍊路狀态資訊。這五種類型的包使得OSPF具備了進階和複雜的通信能力,如下表所示列出了OSPF常用的包類型。

2. OSPF鄰接關系的建立

    當兩台或多台路由器同時啟動運作OSPF路由協定時将開始建立鄰接關系的過程,此過程将經曆七種狀态:

    OSPF啟動的第一個階段是使用Hello封包建立雙向通信的過程,如圖:

(1) 失效(Down)狀态

    這是OSPF建立互動關系的初始化狀态,路由器沒有與任何鄰居交換資訊。

(2) 初始(Init)狀态

    路由器的各個接口通過224.0.0.5發送Hello封包,這裡以R1發送Hello封包為例。當鄰居路由器R2收到第一個Hello封包,這時就進入Init狀态。在該狀态時,路由器R2已經接收到Hello封包,但自身的ID并沒有出現在該Hello封包内。

(3) 雙向(2-Way)狀态

    路由器R2向路由器R1發送一個Hello回應封包,該Hello回應封包含有路由器R1的ID。當路由器R1收到該Hello回應封包,發現含有自身的ID,這是就進入2-Way狀态,雙向通信已經建立。DR和BDR的選舉正是在這個狀态完成的。

OSPF啟動的第二個階段是建立完全鄰接關系,如圖:

(4) 準啟動(ExStart)狀态

    在選舉出DR和BDR之後,路由器就被認為是處于ExStart狀态。在該狀态中,DR和BDR與網路中其他各路由器建立鄰接關系。在這個過程中,兩個鄰接路由器之間建立起一個主/從(Master/Slave)關系,路由器ID大的作為主路由器,用來發起通信。

(5) 交換(Exchange)狀态

    主/從路由器之間交換一個或多個資料庫描述包(DBD),路由器進入Exchange狀态。DBD包含的是鍊路狀态資料庫中的LSA條目的摘要資訊,主/從路由器之間交換DBD時要確定雙方都接收到。

(6) 加載(Loading)狀态

    如果收到的DBD有更新的LSA條目的摘要資訊,路由器将向對方發送鍊路狀态請求包(LSR)請求更詳細的資訊,對方路由器用鍊路狀态更新(LSU)回應該LSR,此過程稱為Loading狀态。鍊路狀态更新包(LSU)需要對方确認收到。

(7) 完全鄰接(Full)狀态

    當路由器之間完成了資料庫同步,它們的鍊路狀态資料庫已經完全一緻,此時就達到了Full狀态。

到此,路由器中的鍊路狀态資料庫已經完全一緻了,路由器可以根據這個一緻的鍊路狀态資料庫通過最短路徑優先算法(SPF)來計算到目的網絡的最佳路徑并形成路由表。

OSPF的網絡類型

    根據路由器所連接配接的實體網絡不同,OSPF将網絡劃分為以下四種類型:

1. 點到點網絡(Point-to-Point)

    點到點網絡連接配接單獨的一對路由器。在點到點網絡上的有效鄰居總是可以形成鄰接關系,不需要DR和BDR。在這些網絡上的OSPF封包的目的位址也總是224.0.0.5。(s接口)

點到點網絡一般采用PPP協定、HDLC協定等。

2. 廣播多路通路網絡(BMA)

    廣播多路通路網絡,像以太網和光纖分布式數字網(FDDI)等,它們可以連接配接多于兩台的裝置。而且由于它們是廣播型的,因而連接配接在這種網絡上的所有裝置都可以接收到傳送的封包。在廣播型網絡上的OSPF路由器會選擇DR和BDR。OSPF封包采用多點傳播方式發送。(單點傳播)

3. 非廣播多路通路網絡(NBMA)

    NBMA網絡,像X.25和幀中繼等,可以連接配接兩台以上的路由器,但是它們沒有廣播資料包的能力。在NBMA網絡上的OSPF路由器需要手工配置鄰居,選舉DR和BDR,并且所有的OSPF封包都是單點傳播的。(多點傳播)

4. 點到多點網絡(Point-to-MultiPoint)

    點到多點網絡是NBMA網絡的一個特殊配置,可以被看作是一群點到點鍊路的集合。在這些網絡上的OSPF路由器不需要選舉DR和BDR,OSPF封包時多點傳播的。

名詞解釋

* HDLC(High Level Data Link Control,進階資料鍊路控制):是常用的資料鍊路層協定之一。許多常用的資料鍊路層協定的封裝方式都是基于HDLC的封裝格式。HDLC是ISO組織制定的一個标準化規程,它适用于點到點和點到多點的資料鍊路。由于各個廠家對DHLC标準的實作不盡相同,是以一般不同廠家裝置之間互連不能采用HDLC協定進行封裝。Cisco路由器序列槽使用的預設協定時HDLC。

* PPP(Point to Point Protocol,點對點協定):是應用最廣泛的廣域網連接配接時使用的資料鍊路層協定。它支援多種網絡層協定,并且支援使用者認證。

OSPF的應用環境

1. 使用OSPF的原因

    OSPF與RIP相比雖然有點很明顯,但是一般情況下,并不是所有的網絡都需要都需要使用OSPF,一些簡單的,路由器配置較低的環境,仍然需要使用靜态路由。當考慮以下幾個方面的因素時,一般需要使用OSPF來搭建:

1)網絡的規模

    當網絡中的路由器在十台以上或大中型規模的網絡。

2)網絡的拓撲結構

    網絡的拓撲結構為網狀,并且任意兩台路由器之間都有互通的需求。

3)其他特殊的需求

    要求路由器變化時能夠快速收斂,路由協定自身的網絡開銷盡量降低。

4)路由器自身的要求

    運作OSPF協定時對路由器CPU的處理能力及記憶體的大小都有一定的要求,性能很低的路由器不推薦使用OSPF協定。

2. OSPF的特點

OSPF主要具有以下幾個特點:

* 可适應大規模網絡

* 路由變化收斂速度快

* 無路由環路

* 支援可變長子網路遮罩VLSM

* 支援區域劃分

* 支援以多點傳播位址發送協定封包

3. OSPF與RIP的比較

(1) 從網絡結構看

    RIP的拓撲簡單,适用于中小型網絡,沒有區域、邊界等概念。最大跳數為15跳,路由是依靠下一跳的個數來描述,無法展現帶寬與網絡延遲。

    OSPF适用于較大規模的網絡。它把自治系統(AS)分成若幹個區域,通過對系統内部路由的不同處理,對區域内和區域間路由的不同處理,減少網絡資料量的傳輸。OSPF對應RIP的“跳數”,引入了“開銷(Cost)”的概念。OSPF還把其他路由協定或者靜态路由作為AS的外部路由引入,處理能力相當強。

    RIP的原始版本不支援變長子網路遮罩VLSM(RIP v2支援),OSPF支援可變長子網路遮罩(VLSM)。

(2) 協定運作有差别

    運作RIP時,首先向鄰居發送請求封包,其他運作RIP的路由器收到請求封包後,馬上把自己的路由表發送過去;在沒收到請求封包時,定期(30s)廣播自己的路由表。

    運作OSPF時,用Hello封包同鄰居建立連接配接,然後迅速建立鄰接關系,隻在建立了鄰接關系的路由器中發送路由資訊;以後靠定期發送Hello封包來維持連接配接,相對RIP的路由表封包來說這個Hello封包要小得多,網絡擁塞也就少了。Hello封包在廣播網上一般每10s發送一次,若在一定時間内(4倍于Hello間隔)沒有收到Hello封包,便認為對方已經死掉,從路由表中去掉,但在鍊路狀态資料庫中并沒有真正的去掉,以備它在啟用時減少資料傳輸量。但在它達到3600s(60分鐘)時便真正去掉它。OSPF的LSA也會重發,重發間隔為1800s(30分鐘)。

(3) 使用情況不同

    一般來說,OSPF占用的實際鍊路帶寬比RIP少,因為它的路由表是有選擇的廣播(隻在建立鄰接的路由器間),而RIP是鄰居之間的廣播。OSPF使用CPU的時間比RIP少,因為OSPF達到平衡後的主要工作是發送Hello封包,而RIP發送的是路由表(Hello封包比路由表小得多)。OSPF使用的記憶體比RIP大,因為OSPF有一個相對大的路由表。OSPF使用了鄰接關系,其收斂速度快。

OSPF的基本配置指令

啟動OSPF路由程序

  與配置RIP不同的是,在配置OSPF的時候需要配置程序号,程序号是本地路由器的程序号,用于辨別一台路由器上的多個OSPF程序,其值可以在1-65535之間選取。配置指令如下:

1

<code>Router(config)</code><code># router ospf  process-id</code>

  指定OSPF協定運作的接口和所在的區域,指令如下:

<code>Router(config-router)</code><code># network  address  inverse-mask  area  area-id</code>

其中,各參數分别表示如下含義:

address:網絡号,可以是網段位址、子網位址或者一個路由器接口的位址。用于指出路由器所要通告的鍊路。

inverse-mask:反向掩碼,用于精确比對所通告的網絡ID。

area-id:區域号,指明同網絡号相關的區域,可以是0、1、2這樣的數字,也可以是192.168.1.0這樣的辨別方法。

修改接口的優先級

<code>Router(config-</code><code>if</code><code>)</code><code># ip ospf priority  priority</code>

其中,priority預設為1,範圍是0-255。設定為0時,表示不參與DR和BDR的選舉。

修改接口的Cost值,Cost值使用16位的無符号整數表示,大小範圍為1-65535。

<code>Router(config-</code><code>if</code><code>)</code><code># ip ospf cost cost</code>

例如:

2

<code>Router(config)</code><code># int f0/0</code>

<code>Router(config-</code><code>if</code><code>)</code><code># ip ospf cost 100</code>

用于診斷的檢視指令

檢視路由表

<code>Router</code><code># show ip route</code>

檢視鄰居清單及其狀态

<code>Router</code><code># show ip ospf neighbor</code>

檢視OSPF的配置

<code>Router</code><code># show ip ospf</code>

檢視OSPF接口的資料結構

<code>Router</code><code># show ip ospf interface type number</code>

OSPF單域的配置執行個體

實驗環境

  如上圖所示為公司的路由器連接配接示意圖,通過配置路由器實作公司内部全網互通,具體規劃如下:

(1)R1和R2的互聯位址為:10.1.1.0/30,R2和R3的互聯位址為:20.2.2.0/30,R3和R4的互聯位址為:30.3.3.0/30,R4和R1的互聯位址為:40.4.4.0/30。

(2)使用路由器的Loopback接口位址作為Route ID,R1的Loopback0:1.1.1.1/32,R2的Loopback0:2.2.2.2/32,R3的Loopback0:3.3.3.3/32,R4的Loopback0:4.4.4.4/32

(3)PC1使用者的IP位址段為192.168.1.0/24,PC2使用者的IP位址段為192.168.2.0/24,PC3使用者的IP位址段為192.168.3.0/24,PC4使用者的IP位址段為192.168.4.0/24。

具體步驟:

1. 配置路由器的接口位址(略)

2. 配置OSPF協定,實作網絡互通。

3

4

5

<code>R1(config)</code><code># router ospf  1                  //啟動ospf程序</code>

<code>R1(config-router)</code><code># router-id 1.1.1.1                //配置Router ID</code>

<code>R1(config-router)</code><code># network 192.168.1.0 0.0.0.255 area 0</code>

<code>R1(config-router)</code><code># network 10.1.1.0 0.0.0.3 area 0</code>

<code>R1(config-router)</code><code># network 30.3.3.0 0.0.0.255 area 0</code>

<code>R2(config)</code><code># router ospf  1</code>

<code>R2(config-router)</code><code># router-id 2.2.2.2</code>

<code>R2(config-router)</code><code># network 192.168.2.0 0.0.0.255 area 0</code>

<code>R2(config-router)</code><code># network 10.1.1.0 0.0.0.3 area 0</code>

<code>R2(config-router)</code><code># network 40.4.4.0 0.0.0.255 area 0</code>

<code>R3(config)</code><code># router ospf  1</code>

<code>R3(config-router)</code><code># router-id 3.3.3.3</code>

<code>R3(config-router)</code><code># network 192.168.3.0 0.0.0.255 area 0</code>

<code>R3(config-router)</code><code># network 20.2.2.0 0.0.0.3 area 0</code>

<code>R3(config-router)</code><code># network 30.3.3.0 0.0.0.255 area 0</code>

<code>R4(config-router)</code><code># router-id 4.4.4.4</code>

<code>R4(config-router)</code><code># network 192.168.4.0 0.0.0.255 area 0</code>

<code>R4(config-router)</code><code># network 20.2.2.0 0.0.0.3 area 0</code>

<code>R4(config-router)</code><code># network 40.4.4.0 0.0.0.255 area 0</code>

3. 使用show ip route指令檢視路由表。

4. 使用ping指令驗證網絡和OSPF協定通信正常。

    在路由表條目中可以看到條目前面的辨別,為O說明是通過OSPF學習到的路由,OSPF的管理距離為110,後面的2、3是開銷值

本文轉自 楊書凡 51CTO部落格,原文連結:http://blog.51cto.com/yangshufan/1961182,如需轉載請自行聯系原作者