OSPF計算環路:RFC:2328與RFC1583

一、前提知識

OSPF V2在發展的過程經過了很多次改進,其中比較重要的兩個標準是RFC1583和RFC2328。這兩個標準在計算路由的時候使用的計算方法不一樣。華爲的VRP默認是開啓了兼容RFC1583的功能,即默認採用最小COST來選路,如果部分路由器關閉了RFC1583兼容能力,OSPF在選路的時候還會參考區域類型等因素(如它會優先經過普通區域而不是骨幹區域)可能會導致網絡產生環路。

本實驗就主要用來理解“取消兼容RFC1583引發環路”這個知識點。

二、實驗拓撲

三、基礎配置

 --------------------------------------------------------------------------------------------
R1的配置
#
 sysname R1
#
router id 1.1.1.1 
#
interface GigabitEthernet0/0/0
 ip address 12.1.1.1 255.255.255.0 
#
interface LoopBack100
 ip address 100.100.100.100 255.255.255.255 
#
ospf 1 
 import-route direct type 1
 area 0.0.0.0 
  network 12.1.1.1 0.0.0.0 
#
---------------------------------------------------------------------------------------------
R2的配置
#
 sysname R2
#
router id 2.2.2.2 
#
interface GigabitEthernet0/0/0
 ip address 12.1.1.2 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 23.1.1.1 255.255.255.0 
#
ospf 1  
 area 0.0.0.0 
  network 12.1.1.2 0.0.0.0 
 area 0.0.0.1 
  network 23.1.1.1 0.0.0.0 
#
---------------------------------------------------------------------------------------------
R3的配置
#
 sysname R3
#
router id 3.3.3.3 
#
interface GigabitEthernet0/0/0
 ip address 23.1.1.2 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 34.1.1.1 255.255.255.0 
#
ospf 1 
 area 0.0.0.1 
  network 23.1.1.2 0.0.0.0 
  network 34.1.1.1 0.0.0.0 
#
---------------------------------------------------------------------------------------------
R4的配置
#
 sysname R4
#
router id 4.4.4.4 
#
interface GigabitEthernet0/0/0
 ip address 34.1.1.2 255.255.255.0 
#
interface LoopBack100
 ip address 100.100.100.100 255.255.255.255 
#
ospf 1 
 import-route direct type 1
 area 0.0.0.1 
  network 34.1.1.2 0.0.0.0 
#
---------------------------------------------------------------------------------------------

四、環路觀察

1、修改配置生成環路

配置思路如下圖黃底字所示R2上取消RFC1583兼容,R3上修改接口修改g0/0/1接口COST。

[R2]ospf

[R2-ospf-1]undo rfc1583 compatible

 

[R3]inter g0/0/1

[R3-GigabitEthernet0/0/1]ospf cost 10

2、觀察環路的現象

在R2或R3上tracert 100.100.100.100,發現數據包在R2和R3之間打環

[R2]tracert 100.100.100.100
 traceroute to  100.100.100.100(100.100.100.100), max hops: 30 ,packet length: 40,press CTRL_C to break 
 1 23.1.1.2 80 ms  1 ms  20 ms 
 2 23.1.1.1 10 ms  1 ms  1 ms 
 3 23.1.1.2 20 ms  10 ms  20 ms 
 4 23.1.1.1 10 ms  10 ms  10 ms 
 5 23.1.1.2 30 ms  20 ms  20 ms 
 6 23.1.1.1 30 ms  10 ms  20 ms 
 7 23.1.1.2 20 ms  30 ms  20 ms 
 8 23.1.1.1 40 ms  20 ms  20 ms 
 9 23.1.1.2 30 ms  30 ms  40 ms 
10 23.1.1.1 30 ms  30 ms  20 ms 
11 23.1.1.2 40 ms  30 ms  * 
12 23.1.1.1 40 ms  30 ms  50 ms 
13 23.1.1.2 50 ms  40 ms  40 ms 
14 23.1.1.1 30 ms  50 ms  40 ms 
15 23.1.1.2 50 ms  40 ms  60 ms 
16 23.1.1.1 40 ms  40 ms  40 ms 
17 23.1.1.2 50 ms  60 ms  60 ms 
18 23.1.1.1 50 ms  40 ms  50 ms 
19 23.1.1.2 60 ms  70 ms  * 
20 23.1.1.1 50 ms  70 ms  50 ms 
21 23.1.1.2 60 ms  70 ms  60 ms 
22 23.1.1.1 60 ms  110 ms  60 ms 
23 23.1.1.2 60 ms  80 ms  70 ms 
24 23.1.1.1 60 ms  60 ms  70 ms 
25 23.1.1.2 70 ms  90 ms  80 ms 
26 23.1.1.1 70 ms  70 ms  70 ms 
27 23.1.1.2 90 ms  70 ms  70 ms 
28 23.1.1.1 70 ms  80 ms  70 ms 
29 23.1.1.2 80 ms  90 ms  * 
30 23.1.1.1 70 ms  90 ms  90 ms 
[R2]

五、環路生成原因分析

先來觀察下路由的變化,取消引發環路的配置

[R2-ospf-1]rfc1583 compatible

[R2-ospf-1]dis this

ospf 1 
 area 0.0.0.0 
  network 12.1.1.2 0.0.0.0 
 area 0.0.0.1 
  network 23.1.1.1 0.0.0.0

[R3-GigabitEthernet0/0/1]undo ospf cost

即默認配置時,R2和R3針對100.100.100.100的路由分別如下

 

[R2]dis ip routing-table 100.100.100.100
------------------------------------------------------------------------------
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

100.100.100.100/32  O_ASE   150  2           D   12.1.1.1        GigabitEthernet0/0/0


[R3]dis ip routing-table 100.100.100.100
------------------------------------------------------------------------------
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

100.100.100.100/32  O_ASE   150  2           D   34.1.1.2        GigabitEthernet0/0/1 

可見,R2去100.100.100.100的下一跳是R1,R3的下一跳是R4.路由背道而馳,南轅北轍是不會環路的。

 

現在我們重配置下R3接口開銷,再看下路由表

[R3]inter g0/0/1

[R3-GigabitEthernet0/0/1]ospf cost 10

 

[R2]dis ip routing-table 100.100.100.100
------------------------------------------------------------------------------
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

100.100.100.100/32  O_ASE   150  2           D   12.1.1.1        GigabitEthernet0/0/0


[R3]dis ip routing-table 100.100.100.100
------------------------------------------------------------------------------
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

100.100.100.100/32  O_ASE   150  3           D   23.1.1.1        GigabitEthernet0/0/0

這時發現R3的路由轉向了(原因是通過R4去目的地的COST變大了,總和爲11,指向了R2(COST是3,R2不變繼續指向R1.此時兩個路由器的路由是同向的,也不會環路。

 

最後取消上R2的RFC1583兼容,讓R2以RFC2328來選路,再查看下路由表

[R2]ospf

[R2-ospf-1]undo rfc1583 compatible

 

[R2]dis ip routing-table 100.100.100.100
------------------------------------------------------------------------------
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

100.100.100.100/32  O_ASE   150  12          D   23.1.1.2        GigabitEthernet0/0/1


[R3]dis ip routing-table 100.100.100.100
------------------------------------------------------------------------------

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

100.100.100.100/32  O_ASE   150            D   23.1.1.1        GigabitEthernet0/0/0

 

可以發現,此次配置引發了R2路由表的變更。R2捨近求遠放棄了通過R1去目的地的捷徑(COST爲2),而選擇和通過R3去往目的地(COST爲12).因爲R3的路由表是以R2爲下一跳的,此時兩個路由器的路由表互指對方爲下一跳,悲劇就發生了.

 

現在我們來反過來問一下:爲何R2要捨近求遠呢?

因爲RFC2328在選路時,不是最優先考慮COST的,是要考慮路由的類型及區域的類型的,比如它認爲經過經過普通區域的路由好於經過骨幹區域的路由。現在R2有兩條路,一條經過普通區域1到100.100.100.100,COST是12,另一條是經過骨幹區域0去100.100.100.100,COST是2.但是RFC2328就忽略COST的大小選前者,如果開了RFC1583兼容,就會考慮COST小的後者。(結尾有詳細參考參考說明)

六、環路規避


這個環路因不同路由器配置了不同的OSPF選路標準造成,規避方法是要保證所有路由器的標準一樣,要關RFC1583兼容就全關,要開就全開。華爲默認是所有路由器都開了1583兼容的。

 

七、擴展學習(RFC1583 RFC2328選路細節)

通過同一個OSPF進程內的LSA計算的相同路由條目:

1. Intra-area 的路由優於 Inter-area 

2. Inter-area 的路由優於 external-area 

3. 對於external-area 路由,類型1方式記錄路由開銷的優於類型2

4. 對於external-area 路由,且開銷類型相同

  1)同爲外部類型2,重分佈時攜帶M小的最優

  2-------------------------------------------------------------------

        定義兩種開銷值:

        x=內部設備到forwarding-address的開銷;FA0時,X爲到ASBR的開銷

        y=外部路由重分發進來時LSA攜帶的開銷值

      ------------------------------------------------------------------

      此時需要分選擇標準:

       * RFC1583標準:

         ATYPE-1路由比對:

            X+Y值最小路由

         BTYPE-2路由比對:

            X值最小路由

        之後就沒有成型的規範了。基本實現應該是負載

       * RFC2328標準:

         直接比對X路由類型

          (1).backbone areaintra-area路由最優先

          (2).intra-area backbone路由與inter-area路由優先級相同

           如果無法比對出結果,則等同RFC1583繼續比對

           如果多條都是最小開銷,選擇學習到的這些LSA的區域裏,選擇最大area-ID裏面的LSA使用

           之後沒有任何成型規範。所以,如果ID(associated area-ID)相同,基本實現應該是負載

PS:目前思科的算法,依然是使用RFC1583;其進程命令compatible rfc1583,也只是在對OSPF彙總的Metric取值上做標準調整;應該是多RFC標準混用。華爲,Juniper設備也算法調整命令,而且作用在於修改此處算法標準。

5. 如果多external-area LSA參數相同(same destination,cost and non-zero forwarding-address

   此時分情況討論:

   A:同類外部LSA(都是同普通區域同類外部或都是同NSSA區域同類外部)(參考RFC1583-12.4.5RFC2328-12.4.4.1)

      ASBR之間相互可達。RID最大的ASBR重分發路由優,其他ASBR都將自己的外部LSA置爲超時失效狀態,從LSDB清除掉。

      如失去比自己RID大的ASBR的聯繫,則重新產生外部LSA

      另一種情況,NSSA T7-LSA生成T5-LSA.如果多設備都是NSSA ABR,且NSSA區域內相互可達。則只有RID最高的NSSA ABR會執行T7-2-T5

   B:不同類外部LSA

      此時也要分選擇標準:

    * RFC3101標準:

      1. P-bit功能的TYPE-7 LSA

      2. type-5 LSA

      3. RID最高的LSA

    * RFC1587標準:

      1. type 5 LSA

      2. P-bit功能的type 7 LSA

      3. 其他的 type-7 LSA

PS:目前,不同廠商使用標準都不一樣,思科設備在IOS 15.1(2)S前使用的是RFC1587標準,之後默認使用RFC3101標準。OSPF進程配置環境下,通過compatible rfc1587命令可修改。 
 

http://support.huawei.com/ecommunity/bbs/10165355.html?p=1#p0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章