017B-OSPF五種報文的頭部,hello報文,鄰居


在這裏插入圖片描述

OSPF報文頭部
Version(版本號),默認是V2 IPv6是V3
Message type :1、hello 2、DD 3、LSR 4 LSU 5、LSACK
Packet Length:報文長度
Source OSPF router:發送者的Router ID
Area ID:區域號:32位的點分十進制(IP地址格式)
Auth Type (認證類型) 0不認證 1 明文認證 2 MD5
Auth Data:認證的密碼
在這裏插入圖片描述
驗證OSPF報文頭部是否合法
1、版本號爲2
2、Area ID必須要和接收端的Area ID一致
3、認證類型和認證密碼也必須一致

RID也不能衝突
在這裏插入圖片描述
[Huawei-GigabitEthernet0/0/0]ospf enable 10 area 0
[Huawei]ospf 10 router-id 2.2.2.2
[Huawei-ospf-10]area 0
[Huawei-ospf-10-area-0.0.0.0]
在這裏插入圖片描述

OSPF五種報文

參考:HCNA網絡技術學習指南8.3節

  1. Hello報文: 週期性的發送,用來發現建立,和維護OSPF鄰居關係的
    鄰居關係:兩臺設備共享同一條鏈路,並且交互了一些參數(Hello報文),形成鄰居關係(2-way狀態)

  2. DD:描述本LSDB的摘要信息,用於兩臺路由器進行數據庫的同步 DD報文只是一個LSA的摘要信息,裏邊不包括LSA
    DBD:Database Description Packet

  3. LSR:用於向對方請求所需的LSA,只有在OSPF鄰居雙方成功交換了DBD後纔會向對方發送LSR
    LSR:Link-Status request
    LSA:Link-Status advertisement 鏈路狀態通告

  4. LSU:用於向對方回覆具體的LSA
    LSU:Link-Status update

  5. LSACK:用來對收到的LSA的一個確認
    LSACK:Link-Status Acknowledgement

Hello報文:

重要字段解釋:
Network Mask:發送Hello報文的接口的網絡掩碼。
只有在廣播網絡或者NBMA網絡纔有意義(在P2P,P2MP鏈路上是不不檢測的
HelloInterval:發送Hello報文的時間間隔。單位爲秒。
在廣播網絡中是10秒一次,在NBMA中是30秒一次
Options:標識發送此報文的OSPF路由器所支持的可選功能。具體的可選功能不在本課程的討論範圍之列。
DN位:Down比特位,是用來防環的(MPLS VPN應用此字段)
O位:用來支持9,10,11類LSA的能力
DC位:當始發鏈路支持按需鏈路時該比特位會置位
N位/P位 N位表明是否支持7 類LSA,N=0 表明不接收和發送7類LSA
P位 用在NSSA LSA(七類LSA),是否做七轉五
E位:能否接收外部路由(五類LSA) 默認E位是1,是可以接收外部路由

Rtr Pri:發送Hello報文的接口的Router Priority,用於選舉DR和BDR。
路由的優先級:用來選舉DR和BDR的
RouterDeadInterval:宣告鄰居路由器不繼續在該網段上運行OSPF的時間間隔,單位爲秒,通常爲四倍HelloInterval。
40 120

Designated Router:發送Hello報文的路由器所選舉出的DR的IP地址。如果設置爲0.0.0.0,表示未選舉DR路由器。
是DR接口的IP地址
Backup Designated Router:發送Hello報文的路由器所選舉出的BDR的IP地址。如果設置爲0.0.0.0,表示未選舉BDR路由器。
Neighbor:鄰居路由器的Router ID列表。表示本路由器已經從該鄰居收到合法的Hello報文。
鄰居路由器的Rtouer ID(表明OSPF的鄰居狀態)

interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
ospf timer hello 5 /修改OSPf的Hello時間,如果修改了Hello時間,Dead時間會自動調整爲4倍
ospf timer dead 40 /修改OSPF的Dead時間,如果修改了Dead時間,Hello時間不會自動調整

驗證一個Hello報文是否合法之前首先需要驗證一個OSPF報文是否合法。
驗證一個接收到的Hello報文是否合法包括:

  1. 如果接收端口的網絡類型是廣播型,點到多點或者NBMA,所接收的Hello報文中Network Mask字段必須和接收端口的網絡掩碼一致,如果接收端口的網絡類型爲點到點類型或者是虛連接,則不檢查Network Mask字段;
  2. 所接收的Hello報文中的HelloInterval字段必須和接收端口的配置保持一致;
  3. 所接收的Hello報文中的RouterDeadInterval字段必須和接收端口的配置保持一致;
  4. 所接收的Hello報文中的Options字段中的E-bit(表示是否接收外部路由信息)必須和相關區域的配置保持一致。關於此比特的具體意義將在《OSPF特殊區域》中詳細解釋。

如果路由器發現所接收的合法Hello報文的鄰居列表中有自己的Router ID,則認爲已經和鄰居建立了雙向連接,表示鄰居關係已經建立。

這是形成鄰居(Neighbor)關係的過程和相關鄰居狀態的變換過程。

Down:這是鄰居的初始狀態,表示沒有從鄰居收到任何信息。在NBMA網絡上,此狀態下仍然可以向靜態配置的鄰居發送Hello報文,發送間隔爲PollInterval,通常和RouterDeadInterval間隔相同。
Attempt:此狀態只在NBMA網絡上存在,表示沒有收到鄰居的任何信息,但是已經週期性的向鄰居發送報文,發送間隔爲HelloInterval。如果RouterDeadInterval間隔內未收到鄰居的Hello報文,則轉爲Down狀態。
Init:在此狀態下,路由器已經從鄰居收到了Hello報文,但是自己不在所收到的Hello報文的鄰居列表中,表示尚未與鄰居建立雙向通信關係。在此狀態下的鄰居要被包含在自己所發送的Hello報文的鄰居列表中。
2-WayReceived:此事件表示路由器發現與鄰居的雙向通信已經開始(發現自己在鄰居發送的Hello報文的鄰居列表中)。Init狀態下產生此事件之後,如果需要和鄰居建立鄰接關係則進入ExStart狀態,開始數據庫同步過程,如果不能與鄰居建立鄰接關係則進入2-Way。
2-Way:在此狀態下,雙向通信已經建立,但是沒有與鄰居建立鄰接關係。這是建立鄰接關係以前的最高級狀態。
1-WayReceived:此事件表示路由器發現自己沒有在鄰居發送Hello報文的鄰居列表中,通常是由於對端鄰居重啓造成的。

兩端同時進入2-way標誌着鄰居關係的建立
進入2-way後,是否要建立鄰接(Adjacency)關係(Full)

1、接口類型爲p2p(點到點),p2MP(點到多)
2、自己爲DR,或者爲BDR
3、鄰居爲DR,或BDR

進入2-way後,開始選擇DR和BDR,40秒(Dead時間)

DR和BDR

DR和BDR的作用:

  1. 減少鄰接關係的數量,從而減少鏈路狀態信息以及路由信息的交換次數,這樣可以節省帶寬,減少路由器硬件的負擔。一個既不是DR也不是BDR的路由器只與DR和BDR形成鄰接關係並交換鏈路狀態信息以及路由信息,這樣就大大減少了大型廣播型網絡和NBMA網絡中的鄰接關係數量

dr和bdr是在hello報文中選舉出的
在這裏插入圖片描述

DR和BDR的選舉規則:
兩端同時進入2-way,開始選舉
1、首先檢查Hello報文中的DR字段和BDR字段是否爲空,如果都爲空(意味着沒有DR和BDR),會首先選舉出BDR,選舉規則:比較優先級,越大越優(默認爲1,取值範圍爲0-255, 0表示不參與選舉),如果相同,比較Router ID,越大越優;BDR選舉出後,會自動升級爲DR,然後重新選舉BDR,規則和之前一樣
2、如果DR字段爲空,BDR不爲空 ,BDR升級爲DR,重新再選舉出BDR
3、如果BDR爲空,DR不爲空,重新選舉出BDR

DR,BDR默認是不支持搶佔的(選舉期除外)

DRother

在主從選舉結束後,會發送DBD報文(空DBD,用於選舉主從),就開始進入Exstart狀態)

DBD報文:
三個字段:I(標識這是一個始化報文)
M(後邊還有一個,M=1意思是後邊還有,不是最後一個,M=0最後一個DBD報文)
MS自己爲主
主從的選舉比較Router ID,越大越優

前兩個DBD報文是空報文,是用來選舉主從

OSPF有兩種確認機制:顯示確認:LSR LSU LSACK
隱示確認
DR,BDR是用來同步數據庫的,
主從只是隱示確認,

鄰居狀態

  • Down:
    這是鄰居狀態轉換的初始狀態,表示最近沒有從鄰居收到信息。在NBMA 網絡上,仍然使用較低的頻率向”Down”狀態的鄰居發送Hello包(見第9.5.1 節)。
    Attempt:
    該狀態僅對NBMA 網絡上的鄰居有效,表示最近沒有從鄰居收到信息,但仍需作出進一步的嘗試,用以與鄰居聯繫。這時按HelloInterval的間隔向鄰居發送Hello包(見第9.5.1 節)。
  • Init:
    在此狀態時,表示收到了由鄰居發送的Hello 包,但還沒有建立與鄰居的雙向通訊(也就是說,路由器自身沒有出現在該鄰居的Hello包中)。從關聯接口發出的Hello包中列出所有達到此狀態(或更高狀態)的鄰居。
  • 2-Way:
    在此狀態時,兩臺路由器的通訊達到雙向,這是通過Hello 協議而實現的。並且是建立鄰接前的最高狀態。DR(BDR)是從達到2-Way或更高狀態的鄰居中選舉出來的。
  • ExStart:
    這是兩臺鄰居路由器之間建立鄰接的第一步。此步的目標是確定路由器的主從,並確定初始的DD 序號。達到此狀態或更高狀態的鄰居會話被稱爲鄰接。
  • Exchange:
    在此狀態的路由器通過向鄰居發送DD 包,來描述其完整的連接狀態數據庫。每個DD 包都有一個DD 序號,並需要被明確地確認。在任何時候,一次只能發送一個DD 包。在此狀態下,允許向鄰居發送LSR 包來取得較新的LSA。所有達到Exchange或更高狀態的鄰接參與洪泛過程。事實上,這些狀態的鄰接完全有能力傳送和接收所有類型的OSPF路由協議包。
  • Loading:
    在此狀態下,向鄰居發送LSR 包來取得較新的LSA。就是在Exchange狀態下發現(但還沒有接收到)的那些LSA。
  • Full:
    在此狀態下,鄰居路由器達到完全鄰接。現在開始這些鄰接將出現在Router-LSA 和Network-LSA 中。

1、從2-way變爲exstart標誌是發送DBD報文
2、從exstart變爲exchange標誌是主從選舉完畢
3、從exchange變爲Loading是DBD的M位=1,開始發送LSR,接收LSU,Lsack
4、從Loading變爲full 重傳列表爲空

MTU在DBD報文中攜帶,所以MTU不一致不會影響OSPF鄰居關係的建立,但是會影響鄰接的建立
思科高力默認是會檢測MTU的
華爲設備默認是不檢測MTU的,華爲可以通過命令配置檢測,如果MTU不一致,會進入什麼狀態
如果主的MTU大於從的MTU,兩端會同時卡在exstart狀態
如果主的MTU小於從的MTU,從會進入exchange,主會卡在extart狀態
如果忽略MTU檢測,有可能會卡在Loading狀態

OSPF的接口狀態機

端口狀態變化-廣播型網段和NBMA網段
在這裏插入圖片描述
RFC2328文檔
Down:
這是接口的初始狀態,這時下層協議指出接口爲斷開,接口上沒有協議流量的收發。這時,接口上的所有參數都被設爲初始值,關閉所有的接口記時器,該接口上也沒有相關聯的鄰接。
Loopback:
這時,路由器到網絡的接口處於迴環/Loopback,迴環可能以硬件或軟件的方式實現。迴環接口不能用於正常的數據傳輸,但仍能通過ICMP ping或位錯誤檢測來收集接口信息。IP 包仍需要被髮往回環接口。爲此,要在Router-LSA 中宣告此接口爲接口IP 地址的主機路徑

Waiting:
在此狀態時,路由器試圖判定網絡上DR 和BDR。爲此,路由器對其接收到的Hello包進行監聽。在結束等待前,路由器不能被選舉爲DR 或BDR。這可以避免不必要地改變DR 和BDR。

Point-to-point:
這時,連接到物理點對點網絡或虛擬通道的接口開始工作。進入此狀態之後,路由器試圖與鄰居路由器形成鄰接。並按HelloInterval 的間隔發送Hello包。
DR Other:
廣播或NBMA 網絡上的其他路由器被選舉爲DR,其自身也沒有被選爲BDR。路由器開
始與DR 和BDR(如果存在的話)形成鄰接。
Backup:
在此狀態時,路由器是所接入網絡的BDR。並將在當前的DR 失效時成爲DR。該路由器與接入該網絡的所有其他路由器形成鄰接。在洪泛過程中,BDR的工作與DR 稍有不同(見第13.3 節)。關於BDR的工作細節見第7.4 節。
DR:
在此狀態時,路由器是所接入網絡的DR。該路由器與接入該網絡的所有其他路由器形成
鄰接。路由器必須爲網絡節點生成一個Network-LSA。該Network-LSA包含了所有接入該網絡的路由器(包括DR 自身)。關於DR的工作細節見第7.3 節。
前面提到,並非所有的鄰居關係都可以形成鄰接關係進而交換鏈路狀態信息以及路由信息,是否建立鄰接關係與網絡類型有關。所謂網絡類型是指運行OSPF網段的二層鏈路類型。

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