OSPF報文直接封裝為IP協議報文,因為OSPF是專為TCP/IP網絡而設計的路由協議。以上所說到的五種OSPF報文使用相同的OSPF報頭格式
看第一個version 欄位 版本欄位,佔1個字節,指出所採用的OSPF協議版本號,目前最高版本為OSPF v4,即值為4(對應二進位就是0100)。
packet type 說的應該是數據包的類型,ospf 有五種。hello,dd,lsr,lsu,lsack
packet length 是包的長度,佔兩個字節,指ospf報頭以及報文內容
routerID 佔4個字節,指報文的生成者的RouterID
AreaID就是 報文的生成這的RouterID
Checksum 用於對報頭和報文體的摘要信息用於校驗,它能夠校驗該報文的完整性和正確性,同時也會對lsa的新舊程度產生影響
auType認證類型,0:不認證,1:簡單認證,2:MD5
authentication:表示認證密碼或者摘要信息,當autype=0時,該欄位為空
OSPF中使用routerID來標識路由器
Router ID是一個32位的無符號整數,其格式和IP位址的格式是一樣的,Router ID選舉規則如下:手動配置OSPF路由器的Router ID(通常建議手動配置); 如果沒有手動配置Router ID,則路由器使用Loopback接口中最大的IP位址作為Router ID; 如果沒有配置Loopback接口,則路由器使用物理接口中最大的IP位址作為Router ID。 OSPF的路由器Router ID重新配置後,可以通過重置OSPF進程來更新Router ID。
OSPF有五種報文,hello,dd,lsr,lsu,lsack
hello報文的作用
鄰居發現:自動發現鄰居路由器。
鄰居建立:完成Hello報文中的參數協商,建立鄰居關係。
鄰居保持:通過Keepalive機制,檢測鄰居運行狀態。
hello報文的發送時間,根據鏈路的不同為10s和30s,用於周期性更新
hello報文還有一個deadtime為老化時間,這個時間必須是hello時間的4倍,如果不是則不能建立鄰居關係。
OSPF鄰居建立過程:
可以看到圖中的RTA對RTB發送hello報文,此時報文內的neighbor為null,用於發現鄰居,當RTB收到這條報文時,RTB的狀態為init。
RTB與RTA發送neighbor為null的用於發現鄰居的hello時是同步的,當RTB收到hello後,會根據數據包中的源地址了解到RTA是自己的鄰居,於是發送新的hello報文用於建立鄰居關係,此時報文的neighbor為RTA的RouterID,當RTA收到這條報文時從init進入2way狀態,同時RTA也會發送neighbor為RTB的RouterID的hello報文,當RTB收到時從init進入到2way狀態。
那麼OSPF是怎麼發現鄰居的呢,因為不知道對方的IP位址所以肯定不可以採用單播的形式,它使用的是組播的形式發送hello報文,目的地址發送的224.0.0.5,對於NBMA網絡,也就是不支持組播的網絡ospf需要手動指定鄰居的ip地址。
hello報文都包含哪些內容呢?