包結構:
OSPF基於IP,協議號89.優先級爲6(QOS會講到)
組播地址224.0.0.5和224.0.0.6
IP頭部後面緊跟的是OSPF包的包頭。
版本號:IPV4中OSPF版本號爲2,IPV6的版本號是3.
類型:表示跟在OSPF包頭後的數據包類型。
長度:OSPF數據包的長度,包括OSPF包頭。
路由器ID:指首發路由器的ID。
區域ID:始發數據包的路由器所在的區域,如果數據在虛鏈路上發送,那麼區域爲0.0.0.0 因爲虛鏈路是骨幹區域的一部分。
校驗和:對整個數據包的標準IP校驗和。
認證類型:正在使用的認證類型。
HELLO包(用來建立和維持鄰居關係,HELLO包中的所有參數都應當和鄰居保持一致):
HELLO間隔:HELLO數據包傳送之間的時間間隔,如果接收路由器沒有一個相同的值,那麼他們不能建立一種鄰接關係。
可選項:其中的參數用來確保鄰居之間的兼容性。
路由器優先級:用來做DR/BDR的選舉,如果爲0,則不能參與DR/BDR的選舉。
指定路由器:指網絡上,指定路由器的IP地址。注:這可能是始發路由器自己認爲的DR,而不是最終的DR,如果是0.0.0.0,可能是網絡類型不需要DR或還沒有選出。
備份指定路由器:指網絡上,備份制定路由器的IP地址。注意細節同上。
鄰居:如果從鄰居的HELLO包中看到了自己的RID,則進入TWO-WAY狀態。
DBD(數據庫描述報文):
作用,描述始發路由器數據庫中的一些或全部LSA信息,以便接收者可以對比,DBD交互過程中,可能需要交換多個DBD,DBD中包含一個主/從控制關係標誌,用來管理這些DBD交互
序列號雙方隨機產生,比較RID,誰的RID大誰就是主。
MTU:不分段的情況下,始發路由器可以發送的最大MTU大小。
可選項:和HELLO包一樣的可選項。(後面講解)
I位:初始位,如果這個DBD是第一個DBD,此位置1
M位:數據包不是最後一個DBD,置1代表後續還有更多的數據包
MS位:主從位,置1代表爲主,置0代表從。
序列號:用來確保路由器能收到完整的DBD序列。序列號將由主路由器在最初設置數值,而後遞增。
LSA頭部:包含一個完整的LSA頭部信息。
LSR(鏈路狀態請求包):
DBD報文同步過程中,路由器會查看發來的LSA哪些本地沒有,或者相同的LSA比本地更新。
路由器會將這些LSA記錄在鏈路狀態請求列表中,然後,路由器發送一個或多個鏈路狀態請求,來請求自己記錄在鏈路狀態請求列表中的這些LSA。
鏈路狀態類型:用來指明LSA類型。
鏈路狀態ID:不同的LSA類型此字段代表不同的意思。
通告路由器:始發LSA通告路由器的RID。
LSU(用於LSA泛洪或相應鏈路狀態請求報文):
LSA只能傳送到直連的鄰居,由直連的鄰居重新封裝傳給下一個設備。TTL=1
LSA數量:標示此LSU包含多少個LSA的詳細信息。
LSA:LSA數據包格式中描述的全部LSA。
LSAck:
LSAck用來做LSA的可靠泛洪,路由器從鄰居收到的每條LSA都需要經過LSAck的確認。LSAck包含需要確認的LSA的頭部信息。多個LSA可以通過一個LSAck去確認。
確認分爲延時確認和直接確認
延時確認:通過此方法確認,更多的LSA可以被單個確認包來確認,被延時確認的數據包延時時間必須要小於5S,以避免不必要的重傳
直接確認:直接確認總是以單播發送,發生在下面兩種情況,1.從鄰居收到了重複的LSA,意味着鄰居沒有收到我的LSA確認2.收到一條LSA老化時間達到了最大的生存時間,說明鄰居沒有此LSA的實例了
可選項字段:
DC:表示始發路由器具有支持按需電路的OSPF能力。
NP:N位和P位都用於NSSA區域,因此可以使用在同一位置,N位,僅用於HELLO包,置1時表示支持NSSA的外部LSA,如果N位置1,那麼E位必須爲0. P位表示可以路由器可以將7類轉爲5類LSA。
MC:具有轉發組播IP數據包的能力,用於MOSPF。
E位:具有接受外部LSA的能力的路由器。此位置1,意味着,如果是Stub區域的話,所有STUB區域的路由器發出的LSA,此位應該爲0,HELLO包中可以表示爲一個接口是否有轉發5類LSA的能力。
MT:多拓撲OSPF,沒有實現。