ospf協議基礎和鄰居的建立


網絡互通:

-交換,同網段之間的設備通信;使用的互聯設備是,叫交換機;

           *核心工作表:MAC地址表

                                 - MAC地址    ~~~~    端口

-路由,不同網段之間的設備通信,使用的互聯設備是,叫路由器;

            *核心工作表:路由表

                                  -網段   ~~~~  端口

            *路由器的類型:即路由表中的每個條目的學習方式

                         &直連路由

                         &非直連路由

                                    #靜態路由

                                    #動態路由

                                              IGP(internal gateway protocol ):內部網關協議,即在一個公司內部運行的路由協議

                                                      % DV(distance vector):距離矢量。該協議在路由器之間互相發送的是路由

                                                                 1. RIP(routing information protocol):路由信息協議,適用於小型網絡

                                                                  2. EIGRP:增強型的內部網關路由協議;該協議是Cisco的私有協議;

                                                        %LS(link state):鏈路狀態。該協議在路由器之間互相發送的是‘鏈路狀態信息’

                                                                   1. ISIS;當年提出是為了傳遞 CLNP 協議的路由;現在的ISIS也支持IPv4 / IPv6;

                                                                    2.OSPF:open shortest path first ,開放式最短路徑優先級協議,對網絡規模理論來說是沒有任何限制的

                                         #EGP(external gateway protocol):外部網關協議,即運行在公司之間的路由協議

                                                                    1. BGP(border gateway protocol):邊界網關協議

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·

OSPF:

      - 概述:

             該協議屬於IGP中的LS類型,位於OSI模型的第三層,即該協議的數據包時包含在IP頭部 后面

              該協議運行在路由器之間,通過互相建立鄰居,同步數據庫的過程中,確保路由器之間的鏈路狀態信息完全一致,從而可以計算出路由條目信息,實現不同網段之間的互                           通。

        -工作原理:

               1. 建立鄰居表,包含的是鄰居路由器;

               2. 同步數據庫,包含的是鏈路狀態信息;

               3. 計算路由表,包含的是每個路由器基於自己的數據庫條目信息‘獨立計算’出來的路由條目

          -報文類型:

                 1. 發送hello包,用於鄰居的建立,維護和拆除

                 2. DD(database description),數據庫描述報文。

                 3. LSR(link state  request),鏈路狀態請求

                 4. LSU(link state  update),鏈路狀態更新

                 5. LSACK(link state ack),鏈路狀態確認報文,確保LSR和LSU的可靠傳輸;

實例:

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 display  ospf  peer  brief  //查看ospf的鄰居表

結果如下:

OSPF Process 1 with Router ID 192.168.12.1
              Peer Statistic Information
----------------------------------------------------------------------------
Area               Id Interface                         Neighbor id                   State
0.0.0.0           GigabitEthernet0/0/0           192.168.12.2              Full
----------------------------------------------------------------------------

#process,表示OSPF的進程號,用於在同一個路由器上區分不同的 OSPF 協議;進程號不同的兩個OSPF互相不能通信;
#router-id,表示OSPF協議為該路由器起的名字。作用:在一個企業內網中,唯一的表示一個OSPF路由器。
                    router-id的格式類似於IP地址,是“點分十進制” 的表示方法。確定方式有兩種:
                                 --手動指定:手動指定的router-id,數值隨意,比如1.1.1.1或2.2.2.2

                                 --自動選舉:首先會選擇設備上的接口IP地址最大的 loopback接口,如果沒有這種接口,就選擇一個IP地址大的物理接口

#area ID,表示OSPF的接口所在的區域號。OSPF協議為了支持將企業網絡分為兩層,所以引入了“區域”這個概念

                  OSPF協議可以將網絡分為“骨干區域”和“非骨干區域”。每個不同的區域都有一個區域號,該字段是4個字節;

                   取值范圍是0---4294967295.其中的區域 0  表示骨干區域。其中非 0 的區域,稱之為非骨干區域。

                   不同區域之間的互聯原則是:所有的非骨干區域,必須連着骨干區域

#interface,表示的是本地設備上用於和對方設備監理鄰居時所使用的接口;

#neighbor ID ,表示的是鄰居設備的router-id

#state ,表示的是鄰居設備的狀態。兩個OSPF路由器之間的完美的狀態,應該是FULL。此時兩邊的數據庫完全同步!

              但是中間也有很多中間狀態:down--->init --> two-way-->exstart -->exchange-->loading --> full

如何修改R1的router-id ?

例:修改R1的router id 為1.1.1.1,修改R2的route ID為2.2.2.2

        R1: ospf 1 router-id 1.1.1.1

        R2:ospf 1 route-id 2.2.2.2

        但是配置后使用display ospf peer brief 查看route id還是原來的route-id,配置並沒有生效。

        需要重啟OSPF協議進程分別在R1和R2路由器上的用戶模式使用命令:reset  ospf  process  選擇 Y,就可以了。

router-id的特點:

      穩定,即一旦OSPF進程的router-id確定了,那么就不會再改動。除非設備重啟或者OSPF協議重啟

OSPF建立的影響因素:

@確保兩邊的IP地址可以互通

      *可以ping通

@確保設備可以發送OSPF報文

      *設備互聯接口網段進行了network

      *設備之間的互聯接口沒有被配置為“被動接口”/“靜默接口”

             #命令:ospf 1 

                           silent-interface GigabitEthernet 0/0/0 //配置g0/0/0為靜默接口

@確保設備之間發送的方式相同

      *要么都是組播,要么都是單播【單播的鄰居,只有在“NBMA”環境下才會有!】

@確保設備可以接收OSPF報文

     *設備互聯接口網段進行了network

      *設備之間的互聯接口沒有被配置為“被動接口”/“靜默接口”

      *設備之間配置的ACL沒有拒絕OSPF報文

@比較hello報文參數。

        --router-id,必須不同

        --area ID,必須相同

        --認證必須成功

        --掩碼必須相同(特殊情況下-即選舉DR的情況下)

        --子網掩碼必須相同

        --hello計時器必須相同(默認是10s發送一次hello包)

        --dead計時器必須相同(默認是40s)

        --特殊標記位必須相同

        --優先級不能全為0(兩個同域的ospf接口不能同時為0)

                   特殊情況下-即選舉DR的情況下優先級不能全為0

                     修改優先級命令:int g0/0/0

                                                  ospf dr-priority   0     //范圍0-255,默認是1

 

 

hello計時器和dead計時器配置命令:

               查看hello計時器時間:display ospf  int g0/0/0   //就是ospf協議的出接口

                

 

 

                修改hello的時間使用命令:int g 0/0/0

 

                                                            ospf  timer  hello 5  //修改hello發送時間為5s,注意修改hello時間后 Dead (router dead  interval)時間也會被動改變

 

                                                                                              dead的時間總是hello時間的4倍,所以修改hello時間為5S后,dead時間被動變為20s。

 

                                                                                            *Dead(router dead interval):表示維護ospf鄰居關系的超時時間,默認40s,超時后未收到對方發送                                                                                                                                                  的hello報文,鄰居關系斷裂。

 

                  修改dead的時間使用命令:int g0/0/0

 

                                                               ospf timer dead   15   // 單位為S,修改dead的時間不會影響hello的時間改變。                                            

 

OSPF的網絡類型:

          任何一個運行了OSPF協議的鏈路,都對應這一個默認的網絡類型。在不同的網絡類型下,OSPF的工作方式不同的,並且,在數據庫中表示這個鏈路的方式也是不相同的(即LSA也是不相同的)。

           但是,我們可以基於需要,人為的修改每個鏈路的OSPF網絡類型。

類型分類:

          *broadcast,廣播

          *nbma,非廣播(non-broadcast mulit-access)

          *p2p,點到點(point to point)

          *p2mp,點到多點(point to multi-point)

OSPF有多個鄰居的情況下:

OSPF路由器建立鄰居之后,就會在不同的路由器之間“同步數據庫”。

如果一個接口上同時連着多個OSPF路由器,那么就會認為建立了多個OSPF鄰居。所以后面再進行同步數據庫的時候,就會出現:

               &同網段中存在多個路由器的情況下,數據庫的同步過程中,會出現大量的重復信息,降低了數據庫的同步效率。

為了提高數據庫的效率,我們可以:在多個路由器之間指定一個OSPF路由器,用來收集和擴散其他鄰居設備的數據庫信息,從而提高數據庫的同步效率。

                &這個指定的OSPF路由器稱之為:DR(designated router) 指定路由器,該網段中的所有路由器都僅僅和DR路由器同步數據庫信息。

                &但是,如果DR故障了,那么數據庫就無法同步了。所以為了安全,我們可以再次選舉一個備份的DR出現,即BDR-backup DR。

如果在一個網段中存在多個OSPF路由器的情況下,我們選舉DR和BDR,那么其他的設備,就只能稱之為DRother。

那么他們的關系是:

                 &所有的設備都和DR/BDR 同步數據庫,之間的狀態時FULL

                          --224.0.0.5,表示的是所有的OSPF路由器;224.0.0.6,表示的是DR和BDR。即DRother發送數據庫更新時,是給該地址

                 &DRother之間的狀態時two-way

                          --DR指的並不是一個路由器,而是一個接口

DR的特點:

       即當一個網段中需要選舉DR的時候,並且已經選定了DR.那么即使后續該網段中再次接入其他優先級更高的路由器,也不會搶占DR的身份,除非重啟OSPF協議進程。

DR的選舉原則:

         只有接口的DR優先級不為0的設備,才有資格參與。【優先級為0的設備,永遠只能稱之為DRother】

                  &首先比較設備的DR的優先級,數值越大越好;默認是1

                  &其次比較設備的router-id,越大越好

           並且,OSPF的工作方式完全取決於一個接口的“網絡類型”,當接口的網絡類型是:廣播和非廣播的時候,才會進行DR/BDR的選舉。

網絡類型:廣播(broadcast)

是否要DR:是

是否發包:是

發包方式:組播,224.0.0.5

hello計時器:10s

dead計時器:40s

 

網絡類型:非廣播(NBMA)

是否要DR:是

是否發包:否

如果要發包,則發包只能是:單播

hello計時器:30s

Dead計時器:120s

 

網絡類型:點到點(P2P

 是否要DR:否

是否發包:是

發包方式:組播,224.0.0.5

hello計時器:10s

Dead計時器:40s

 

網絡類型:點到多點(P2MP)

是否要DR:否

是否發包:是

發包方式:組播,224.0.0.5

hello計時器:30s

Dead計時器:120s

OSPF網絡類型配置命令:

        interface g0/0/0

         ospf  network-type  [ broadcast | nbma | p2p | p2mp ]

手動向鄰居發送hello包:

        ospf 1

        peer  x.x.x.x     //x.x.x.x為鄰居接口的IP地址

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

詳細分析OSPF鄰居的狀態:

Down-表示鄰居掛掉了或者“在Dead時間內”,沒有收到對方發送過來的Hello報文;

init-初始化,表示能夠收到對方設備發過來的hello報文,但是對方的報文中並沒有自己的router-id;

Two-way:雙向通信狀態。表示能夠收到對方設備發送過來的hello報文,並且該報文中還能看到自己的router-id;

                如果此時鄰居之間需要選舉DR,那么這個選舉的過程,就是發生在“該狀態”。此時選舉但是選舉不出來,兩個路由器之間狀態,就會卡在two-way(比如在廣播和非廣播環境下,兩個DRother之                         間,就會卡在two-way)

Exstart:交換初始化狀態。在該狀態的事情,都是為了后續的exchange(交換)過程更加的高效和靠譜。

              所以會在這個階段,雙方互相發送“第一DD”報文,用於選舉出‘主/從’路由器,目的就是為了確保在exchange狀態發送的大量的DD報文,是按照可靠的方式發送的。

              選舉主/從關系的原則:比較設備之間的route-id,越大越好

              選舉出DR/BDR之后:從路由器發送的DD報文的序列號一定要跟隨着主路由器發送DD報文的序列號的變化而變化。

              並且在這個階段,我們還會比較DD報文的"MTU字段",如果兩邊相同,則繼續進入下個狀態;如果兩邊不同那么鄰居之間的狀態,就有可能卡在這里。【默認情況下,華為設備是不檢查這個參數的

               ;但是可以人為打開該功能】

                              *在DD報文中,有三個重要的標記為:

                                       I(init)表示該DD報文是不是第一個DD報文;如果取值為1,表示為第一個DD,如果是0,表示不是第一個;

                                       M(more)表示該DD報文是不是最后一個DD報文;如果取值為1,說明后面還有更多DD,不是最后一個;如果取值為0,說明后續已經沒有更多的DD報文了,即表示當前的DD報文

                                                           是最后一個DD報文;

                                       M/S (master/slave)表示發送這個DD報文的路由器的的身份,是“主”路由器,還是“從”路由器;

                                                               剛進入exstart狀態的時候,大家發送的第一個DD報文中,都認為自己很牛,所以該標記位都是1.

                                                                經過route-id的比較之后,大的路由器發送的MS位就是1;小的路由器發送的MS位就是0;

exchange:交換狀態。在該狀態下就是依據上述的主從關系,進行大量的DD報文的發送,用於描述彼此的數據庫條目信息。

                   當然我們在DD報文中包含的是自己的數據庫中的每個條目的“摘要”信息,不是詳細的。

                    當兩邊的DD報文全都傳輸完畢以后,就會進行DD報文的比較,從而找出兩邊的數據庫的差異

loading:加載狀態。基於上述數據庫的比較結果,我們就知道兩邊數據庫的差異。所以在這個階段就開始向鄰居設備發送LSR進行請求自己沒有的數據庫條目的詳細信息。對方設備收到以后,就會回應一個                   LSU,里面包含的就是鏈路狀態的詳細信息。此時,每次發送LSR和LSU,兩邊都會發送LSACK對上述的兩個報文進行確認。

full:一旦loading狀態完成,說明鄰居之間的數據庫就已經完全一致了。從而進入到了FULL狀態,此時稱之為“鄰接”!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM