OSPF五种类型报文
OSPF有五种类型的协议报文:
①.Hello报文:周期性发送,用来发现和维持OSPF邻居关系,以及进行DR/BDR的选举。
PS:可将Hello理解为进餐厅服务员的欢迎光临和下次再来。
②.DD(Database Description,数据库描述)报文:描述了本地LSDB(Link State DataBase,链路状态数据库)中每一条LSA(Link State Advertisement,链路状态通告)的摘要信息,用于两台路由器进行数据库同步。
PS:可将DD理解为进入餐厅后查看的菜单
③.LSR(Link State Request,链路状态请求)报文:向对方请求所需的LSA。两台路由器互相交换DD报文之后,得知对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA。
PS:在看完餐单以后看自己有没有没吃过的菜,若没吃过则点这道菜
④.LSU(Link State Update,链路状态更新)报文:向对方发送其所需要的LSA。
PS:服务员根据点的菜单送上的菜品
⑤.LSAck(Link State Acknowledgment,链路状态确认)报文:用来对收到的LSA进行确认。
PS:对自己点的菜品进行确认
1、OSPF报文头格式
Version: 8位,OSPF 的版本号。2代表OSPFv2,3代表OSPFv3。
Type:8位,OSPF报文的类型。
1为Hello;2为DD;3为LSR;4为LSU;5为LSAck。
Packet length: 16位,OSPF报文的总长度。
Router ID:32位,发送该报文的路由器标识。
Area ID: 32位,发送该报文的路由器所属区域。
Checksum:16位,包含除了认证字段的整个报文的校验和。
AuType: 16位,验证类型如下:
0:不验证; 1:简单明文认证; 2:MD5认证。
Authentication: 64位,其数值根据验证类型而定:
0:不含验证信息; 1:此字段为明文密码;
2:此字段包括Key ID、MD5或 SHA256的验证数据长度和序列号的信息。
查看实际报文交互情况:
可以发现该数据是OSPFv2的hello报文,包长度是44Byte,原路由是1.1.1.1,区域0的交互
2、Hello报文格式
Network Mask:32位,发送Hello报文的接口所在网络的掩码。
Hello Interval:16位,发送Hello报文的时间间隔。
Options:8位,可选项,含义同OSPF 头中一致。
Rtr Pri:8位,DR优先级,默认为1,如果为0,则路由器被视为放弃参与DR或BDR的选举。
RouterDeadInterval:32位,邻居失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效,并从邻居表里移除该邻居,从路由表里撤销指向其的路由。
Designated Router:32位,本网段上DR路由器的接口IP地址。
Backup DesignatedRouter:32位,本网段上BDR路由器的接口IP地址。
Neighbor:32位,邻居列表,用 Router ID标识。记录当前路由器已知的链路上所有邻居的RID。
查看Hello报文
可以看出该消息是刚建立OSPF时候抓获的,因为DR和BDR还没有选举出来。
在此需要注意有点,在广播和点到点网络中Hello报文是10s/每次,而在NBMA和P2MP网络中,Hello报文是10s/每次.
3、DD报文格式
Interface MTU:16位,表示在不分片的情况下,此接口最大可发出的IP报文长度。华为默认不填充接口实际MTU值,所以值为0。
Options:含义同OSPF头中一致。
I (Initialization)位:1位,当发送连续多个DD报文时,如果这是第一个 DD报文,则置为1,代表同步过程开始。否则置为0。
M (More)位:1位,当发送连续多个DD报文时,如果后续的DD报文中不再有LSA头,则置为0。
M/S (Master/Slave)位:1位,当两台OSPF 路由器交换 DD报文时,首先需要确定双方的主从关系,优先级相同的情况下,RouterID大的一方会成为Master,当值为1时表示发送方为 Master。
DD Sequence Number:32位,DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。
LSA Headers:本LSDB 中 LSA的头。
查看DD报文
可以看出这是一个空的DD报文,该报文中这是第一个DD报文,后续还会有LSA头,DD序列号为245。
4、LSR报文
LS type:32位,LSA 的类型号。
Link State ID:32位,根据LSA中的LS Type和 LSA Description在路由域中描述一个LSA。
Advertising Router:32位,产生此LSA的路由器的Router ID。
查看LSR报文
可以看出这是所有OSPF Route都发出的Type 1 的LSA报文,第一个LSA是来自10.10.12.2的,而第二个是来自1.1.1.1的LSA信息。
5、LSU报文
Number of LSAs:32位,表示此Update中所包含的LSA的数量。
LSAs:多个完整LSA的内容。
查看LSU报文
6、LSAck报文
LSA Headers:LSA头列表,OSPF通过LSA头对收到的完整LSA做确认。一份LSAck可以对多份LSU中的LSA 做确认。
查看确认
OSPF邻居和领接关系
一、邻居关系建立过程
先查看一段在华为路由器上配置完成OSPF后的syslog
三步握手
Down状态:邻居的初始化,此时双方刚发送Hello报文,两方还互不知道对方。
Init状态:R1收到邻居的Hello报文时,若该Hello报文中的Active Neighbor字域没有包含当前路由器的Router ID 1.1.1.1,则R1中邻居的状态为 Init.
Two-Way状态:R1再次收到Hello报文时,此次Hello报文中的Active Neighbor字域中有自己的Router ID 1.1.1.1,这时路由器进入Two-Way状态。
PS:只有A及B的邻居都进入Two-Way 状态,才代表彼此间双向邻居建立起来。
二、领接关系建立过程
先查看一段在华为路由器上配置完成OSPF后的syslog
ExStart (信息交换初始)状态:该状态下,本地路由器和邻居路由器间互传空DD报文。
①.确定主/从关系 ②.确定DD的初始序列号 ③.比较接口MTU(可选)
在ExStart 状态下,路由器互相发送的空DD报文中置Ⅰ(Initialize),M (More)及MS (Master/Slave)位。
以下是一个空的DD报文,当本地Route和邻居Route互传空DD时,就是Exstart状态
Exchange(信息交换)状态:选举出 Master后,Slave路由器向Master回送 DD报文,其中包含LSDB中的LSA头(LSA summary)列表,并使用Master 的序列号。Master也把自己的LSA头列表用DD发送,序列号增加1,同时,Slave收到后,会回应相同序列号的DD报文。
任何一侧只要还有未传递完的LSA头,Master就一定要产生DD报文并由 Slave回应。Exchange阶段通过这种可靠的DD交互,完成快速交换LSA 头。
查看报文可以发现,Master已选出,此状态即为Exchange状态
Loading(信息加载)状态:该状态下,本地路由器将会向它的邻居路由器发送链路状态请求数据包LSReq,以请求本地LSDB中没有的LSA。收到LSReq的报文,路由器会用包含完整的被请求的LSA的LSU 做回应。请求方收到LSU后,如果无误,则LSAck确认该LSU。一份LSAck可同时为多份LSUpdate做确认。
Full(完全邻接)状态:在FULL状态下,邻居路由器之间已完成同步过程,建立起完全邻接关系。