HCNA Routing&Switching之動態路由協議OSPF建立鄰居的條件


  前文我們了解了OSPF的router id、數據包結構、類型、不同類型的數據包作用以及OSPF狀態機制,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15027272.html;今天我們來了解下OSPF建立鄰居的條件;

  我們知道OSPF動態路由協議能夠正常學習到別的路由器的路由,最重要的是相鄰的路由器必須建立起鄰居關系,然后才能學習到對方的路由;那么兩個相鄰的路由器,怎么樣才能建立起鄰居呢?

  1、router id必須唯一;

  實驗:如下實驗拓撲,把兩個路由器的router id都設置成5.5.5.5,兩者是否建立起鄰居?

  配置R1

  配置R2

  提示:此時把R2的router id和R1都配置成5.5.5.5,ospf進程給我們提示了一條router id沖突的日志;此時兩者鄰居關系並沒有建立起來;說明router id不唯一,是建立不起鄰居關系的;

  驗證:把R2的router id修改成2.2.2.2 ,然后重啟ospf進程,看看對應鄰居是否能夠建立起來呢?

<R2>sys
Enter system view, return user view with Ctrl+Z.
[R2]ospf 1 router-id 2.2.2.2
Jul 19 2021 22:01:28-08:00 R2 %%01OSPF/4/CONFLICT_ROUTERID_INTF(l)[0]:OSPF Router id conflict is detected on interface. (ProcessId=256, RouterId=5.5.5.5, AreaId=5.0.0.0, InterfaceName=GigabitEthernet0/0/0,  IpAddr=2.0.0.12, PacketSrcIp=1.0.0.12) 
[R2]ospf 1 router-id 2.2.2.2
Info: The configuration succeeded. You need to restart the OSPF process to validate the new router ID.
[R2-ospf-1]q
[R2]q
<R2>reset ospf process
Warning: The OSPF process will be reset. Continue? [Y/N]:y
<R2>sys
Enter system view, return user view with Ctrl+Z.
[R2]
Jul 19 2021 22:01:46-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[1]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=HelloReceived, NeighborPreviousState=Down, NeighborCurrentState=Init) 
[R2]
Jul 19 2021 22:01:46-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[2]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=2WayReceived, NeighborPreviousState=Init, NeighborCurrentState=2Way) 
[R2]
Jul 19 2021 22:01:46-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[3]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=AdjOk?, NeighborPreviousState=2Way, NeighborCurrentState=ExStart) 
[R2]
Jul 19 2021 22:01:46-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[4]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=NegotiationDone, NeighborPreviousState=ExStart, NeighborCurrentState=Exchange) 
[R2]
Jul 19 2021 22:01:47-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[5]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=ExchangeDone, NeighborPreviousState=Exchange, NeighborCurrentState=Loading) 
[R2]
Jul 19 2021 22:01:47-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[6]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=1.0.0.12, NeighborEvent=LoadingDone, NeighborPreviousState=Loading, NeighborCurrentState=Full) 
[R2]dis ospf peer brief

         OSPF Process 1 with Router ID 2.2.2.2
                  Peer Statistic Information
 ----------------------------------------------------------------------------
 Area Id          Interface                        Neighbor id      State    
 0.0.0.5          GigabitEthernet0/0/0             5.5.5.5          Full        
 ----------------------------------------------------------------------------
[R2]

  提示:可以看到我們修改了R2的router id 重置了ospf以后,對應就和R1建立起鄰居;

  2、區域id必須相同

  驗證:還是上述實驗拓撲,我們把R2的區域id修改為2,看看對應鄰居關系是否還會一直建立呢?

  提示:可以看到把R2的區域id 修改為2,對應R2並沒有和R1建立起鄰居關系,其原因是R1的hello包只會在area5這個區域泛洪,而R2的hello包只會在area2這個區域泛洪,所以R1只會和area5區域中的路由器建立鄰居,不會和area2區域中的路由器建立鄰居;

  3、Hello/Dead時間間隔一致 

  驗證:我們把上述實驗中R2的hello包發送時間間隔修改為5秒一次,看看對應R1和R2是否會建立起鄰居呢?

  提示:默認情況hello包是每隔10秒發一次,死亡時間是發送間隔時間的4倍;修改hello包的發送間隔時間,需要進入到對應的接口進行修改;其次修改了hello包發送間隔時間以后,它不會立馬斷開,而是要等,等40s,等到hello包死亡,此時ospf進程會給我們日志說接口參數不匹配,導致鄰居從full狀態轉變為down狀態;如下圖

  驗證:我們把R1ospf接口時間和R2修改成一樣,看看對應鄰居是否會重新建立起來呢?

  提示:我們修改了R1對應接口上ospf發送hello包的間隔時間和R2接口發送hello包間隔時間一樣以后,對應R1就和R2迅速建立起鄰居;

  4、如果配置了認證,對應認證必須一致

  驗證:在上述實驗中我們把R2上運行的ospf配置上認證,看看是否還能和R1建立起鄰居?

  提示:可以看到我們在R2的ospf區域中配置了認證以后,對應鄰居關系就從full狀態轉變為down狀態,說明如果ospf配置了認證,對應都應該配置認知,否則不予建立鄰居關系;

  驗證:在R1的相關接口配置和R2相同模式的相同密碼認證,看看對應鄰居關系是否會恢復呢?

  提示:可以看到當R1的相關接口配置了和R2相同認證模式,相同認證密碼以后,對應鄰居關系又迅速建立起來了;這里提一下,ospf的認證的配置可以在接口上配置,也可以在ospf進程區域中配置,不管是在接口上配置還是在區域中配置認證,只要模式,對應模式相關參數和密碼相同,都能通過認證;上述截圖中md5 后面的數字是key的值,兩邊配置認證,這個key也必須相同,否則認證會失敗;

  5、子網掩碼和網絡地址一致(以太網環境)

  驗證:把上述實驗中的R2的g0/0/0接口的ip地址掩碼修改為8,看看對應鄰居關系是否還會存在呢?

  提示:我們修改了R2 上的g0/0/0接口地址的掩碼以后,立刻R1和R2的鄰居關系就down了,這里只是告訴我們接口發生了變化;

  抓包看看,對應R1和R2發送到hello包有什么不同?

  提示:可以看到修改R2接口的掩碼以后,對應R2發送到hello包,對應掩碼就變成了255.0.0.0,而R1的接口掩碼沒有發生變化,還是255.255.255.0;所以當兩個路由器發送到hello包中掩碼不一致也會導致鄰居關系建立不起來;其實掩碼的主要作用就是用來計算網絡地址,網絡地址的作用就是確定兩個ip地址是否是同一網絡,如果不在同一網絡,則無法建立鄰居;

  如何判斷兩個ip地址是否是同一網絡呢?

首先我們需要把a地址同自身掩碼計算出網絡地址x,然后把a地址的掩碼和b地址做與運算,算出網絡地址為y,如果x=y我們就說a和b在同一網絡;反之a和b不在同一網絡;這里一定要記住判斷a和b是否在同一網絡中,需要把a地址同a的掩碼進行計算得出網絡地址,同時b地址也需要同a的掩碼進行計算;同樣的道理,我們如果要判斷b和a是否在同一網絡中,就需要把b的地址同b的掩碼進行計算得出網絡地址,a地址同b的掩碼進行計算得出網絡地址,如果兩者計算出來的網絡地址一樣,則表示兩者在同一網絡中,反之亦然;這樣一來就存在a和b在同一網絡,但b和a就不一定在同一網絡;

  示例:a主機的地址是192.168.0.129/24 b主機地址是192.168.0.3/27  

a和b在同一網絡,因為a的網絡地址是192.168.0.0 b的網絡地址是192.168.0.0(b的網絡地址此時需要同a的掩碼進行與運算)

b和a不再同一網絡,因為b的網絡地址是192.168.0.0 a的網絡地址是192.168.0.128(此時a網絡地址就需要同b的掩碼進行與運算)

  通過上述的解釋我們在以太網環境中跑ospf,兩個接口的ip地址的掩碼和網絡地址必須一致才能建立起鄰居;

  6、末梢區域設置一致

  末梢區域設置表現在ospf的數據包中的字段就是外部路由選項,如下圖

  提示:默認情況兩個路由器紅框中的字段是一樣的;

  驗證:設置R2的ospf區域為nssa區域,看看對應鄰居是否會down?

  提示:可以看到我們一旦把R2中ospf的區域設置為nssa區域以后,對應鄰居關系就down了;這里要提示一下,骨干區域是不允許設置為nssa區域;

  抓包分析

  R2發送的hello包

  R1發送的hello包

  從上面的抓包來看,在R2的外部路由選項中,對應nssa區域字段被置為1,和R1中的字段不同,所以兩者信息不匹配,所以兩者之前建立好的鄰居關系會down掉;

  驗證:把R1的區域也設置成nssa區域,看看對應鄰居是否會恢復呢?

  提示:可以看到把R1ospf區域也修改為nssa區域,對應鄰居又恢復正常;這是因為R1和R2都是nssa區域,所以對應外部選項對應字段的值都是一樣,所以鄰居建立了;


免責聲明!

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



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