一、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,只能在当前的广播域中发送。