一、OSPF頭部封裝
OSPF是跨四層封裝協議,直接封裝在網絡層之上,需要IP協議使用一個協議號來標定——89。
OSPF頭部結構:
版本:標識OSPF的版本,OSPFv2(2)、OSPFv3(3);?
類型:標識OSPF數據包的類型,hello(1)、DBD(2)、LSR(3)、LSU(4)、LSACK(5);
路由器ID:表示發出數據包設備的Router ID;
區域ID:表示發出數據包的接口所在區域;
認證類型:null(不認證)、simple(明文認證)、MD5(哈希認證);
注意:OSPF進行認證時,會比對兩部分內容,一個是認證類型,一個是認證數據。
抓包:
二、Hello包
主要用于周期性的發現,建立以及保活鄰居關系,包括DR和BDR的選舉。
網絡掩碼:表示發出數據包接口IP地址的掩碼?;
Hello間隔、路由器失效時間:分別表示hello時間和死亡時間,其比例為1:4;
可選項:一共8位特殊標識位。其中E表示是否支持5類LSA、N表示是否支持7類LSA、NP表示是否支持7轉5類LSA;
路由優先級:表示發出該數據包的接口優先級;
DR和BDR:表示指定路由器和備份指定路由器。在沒有選舉出來之前,使用0.0.0.0臨時填充;
鄰居:攜帶自己本地已知鄰居的Router ID;
OSPF鄰居關系建立的必要條件:
- 網絡掩碼一致
- hello時間一致
- 死亡時間一致
- 特殊區域標識位一致
- 認證一致
抓包(省略了頭部信息):
三、DBD包
主要用于主從關系選舉、共享LSA摘要信息、序列號確認
MTU:標識最大傳輸單元。華為設備默認沒有開啟MTU的檢測,所以使用0來填充。若雙方都開起了MTU的檢測,且兩邊數值不一樣,則會卡在Exsart狀態;
可選項:一共8位特殊標識位,和Hello包中的基本一致;
R:保留位;
I:初始化位。置1代表的是進行主從關系選舉的包,不攜帶LSA頭部信息;若置0代表的是共享LSA摘要的包,需要攜帶LSA頭部;
M:更多位。置1代表后面還有DBD包的發送;若置0表示最后一個包;
MS:主從位。置1表示該設備為主。第一次發送DBD包時都會默認自己為主;
序列號:用于保證DBD報文的順序性和可靠性;
抓包(省略了頭部信息):
四、LSR包
鏈路狀態請求報文,基于DBD包請求未知的LSA
鏈路狀態類型、鏈路狀態ID、通告路由器:LSA的三元組,可以唯一的標識出一條LSA。
抓包(省略了頭部信息):
五、LSU包
鏈路狀態更新報文,攜帶LSA的數據包
抓包(省略了頭部信息):
六、LSACK包
鏈路狀態確認報文,充當確認包
抓包(省略了OSPF頭部封裝):
注:本地鏈路組播
凡是224.0.0.X格式的組播地址,都稱為本地鏈路組播,這種組播包的特點是TTL設置為1,只能在當前的廣播域中發送。