ospf报文有5种:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文;
OSPF虽然工作在IP层,却被设计成了可靠的协议,协议内部包含确认机制;
OSPF报文不需要确认报文有Hello和LSAck报文,DD、LSR、LSU都是可靠传输的(重传时间5s);
OSPF报文是封装在IP报文内协议号89,使用相同的ospf报头格式,可以采用单播或组播的形式发送。
1、ospf报头格式
(1)version
版本字段,1个字节,指定所采用的ospf协议版本号,ospfv2的值为2,ospfv3的值为3;
(2)Packet Type
报文类型字段,1个字节,取值为1-5的整数,分别对应hello报文、dd报文、lsr报文、lsu报文和lsack报文;
(3)Packet Length
报文长度地址,2个字节,包括ospf报头部分和报文内容部分的字节长度;
(4)Router ID
路由器ID字段,4个字节,指定发送报文的路由器ID;
(5)Area ID
区域ID字段,4个字节,指定发送报文的路由器接口的ospf区域号;
(6)Checksum
校验和字段,2个字节,包括ospf报头部分和报文内容部分,但不包括Authentication验证字段的校验和;
(7)AuType
验证类型字段,2个字节,指定ospf报文交互时采用的验证类型;
0为不验证,1为简单验证,2为md5验证;
(8)Authentication
验证字段,8个字节,验证类型为不验证时,此字段为空;验证类型为简单验证时,此字段为验证密码;验证类型为md5验证时,此字段为md5摘要消息;
2、OSPF Hello报文及格式
ospf协议使用hello报文建立和维护邻居、邻接关系;
在p2p和广播类型网络中,hello报文以hello interval为周期(缺省10s),以组播方式向224.0.0.5组播组发送一次;
如果在设定的DeadInterval时间(至少是helloInterval的4倍)内没有收到对方发送的hello报文,则认为对方路由器无效;
在p2mp和NBMA类型网络中,hello报文以PollInterval为周期(缺省为60s),以单播方式向状态为down的邻居发送一次;
(1)Network Mask 只在MA网络(广播、NBMA)有效
子网掩码字段,4字节,发送hello报文的接口ip地址所对应的子网掩码;
(2)HelloInterval
HelloInterval字段,2字节,指定发送hello报文的时间间隔,广播、p2p缺省10s,NBMA、p2mp缺省30s;
(3)Options 区域类型(E、N都没有置位就是Stub、Totally Stub)
可选项字段,1字节,置1表示具有相应特性,置0表示不具备相应特性;
E:允许泛洪5类AS External LSA; 普通区域
N:允许泛洪7类NSSA LSA; NSSA、Totally NSSA
MC:允许转发IP组播报文;
DC:允许处理按需链路;
(4)Rtr Pri
路由器优先级字段,1字节,指定本路由器的DR优先级值,缺省为1;
如果设为0,表示本路由器不参与DR/BDR选举;
(5)RouterDeadInterval
DeadInterval字段,4字节,缺省hello时间的4倍;
当收到此hello报文的路由器在此时间内没有收到本路由器再次发来的hello报文,则认为本路由器已失效;
(6)Designated Router
DR字段,4字节,指定DR的接口IP地址;
(7)Backup Designated Router
BDR字段,4字节,指定BDR的接口IP地址;
(8)Neighbor
邻居字段,4字节,指定邻居路由器的路由器ID;
3、OSPF的DD报文及格式
DD报文用来描述本地路由器的LSDB;
两个ospf路由器初始化连接时要交换First DD、DD报文进行数据库同步;
由于数据库的内容可能相当长,需要多个DD报文的交互来完成双方LSDB的同步,所以有三个专门用于标识DD报文序列的比特位,I、M和M/S。
(1)Interface MTU
接口MTU字段,2字节,指出发出DD报文的接口在不分段的情况下,可以发出的最大IP报文长度;
(2)Options 区域类型(E、N都没有置位就是Stub、Totally Stub)
可选项字段,1字节,置1表示具有相应特性,置0表示不具备相应特性;
E:允许泛洪5类AS External LSA; 普通区域
N:允许处理7类NSSA LSA; NSSA、Totally NSSA
MC:允许转发IP组播报文;
DC:允许处理按需电路;
(3)I、M、M/S
I比特:指定在连续发送多个DD报文,如果是第一个DD报文置1,其他的均置0;
M比特:指定在连续发送多个DD报文,如果是最后一个DD报文则置0,否则置1;
M/S比特:设置交互DD报文双方的主从关系,Master置1,Slave置0;
(4)DD Sequence Number
DD序列号字段,4字节,指定所发送的DD报文序列号;
DD交换过程按询问/应答方式进行,在DD报文交换中,一台Master角色,另一台Slave角色,Master路由器向Slave路由器发送DD报文并规定起始序列号,没发送一个DD报文,序列号加1,Slave路由器则使用Master路由器的序列号进行确定应答;
(5)LSA Header
LSA头部字段,4字节,指定DD报文中包括的LSA头部;
4、OSPF LSR报文及格式
LSR报文用于向相邻路由器请求所需的LSA;
LSR报文的内容部分是LSA头部的摘要信息(LSA头部的部分信息);
当两台路由器互相交换完DD报文后,知道对端路由器有哪些LSA是本LSDB没有的,则需要发送一个LSR报文,向对方请求所需的LSA;
(1)LS Type
LSA类型字段,4字节,1/2/3/4/5/7类LSA;
(2)Link State ID
LS标识字段,4字节,LSA类型不同所描述的信息不同:
1类 描述源路由器的路由器ID
2类 描述DR接口地址
3类 描述目的网络地址
4类 描述ASBR的路由器ID
5类 描述目的网络地址
7类 描述目的网络地址
(3)Advertising Router
通告路由器字段,4字节,源路由器ID;
5、 OSPF LSU报文及格式
LSU报文是LSR请求报文的应答报文;
LSU报文内容部分是一共发送的LSA数量和每条LSA的完整内容;
(1)Number of LSA
LSA数量字段,4字节,指定共发送的LSA数量;
(2)LSAs
LSA字段,4字节,是一条条具体的LSA完整信息;
6、OSPF LSAck报文及格式
LSAck报文是路由器在收到对端发来的LSU报文后发出的确认报文;
LSAck报文的内容部分是需要确认的LSA头部;
一份LSAck可以对多份LSU中的LSA做确认;
7、LSA头部格式
DD报文包含LSA头部信息,LSR报文只包含LSA摘要信息,LSU报文包含LSA完整信息,LSAck报文包含LSA头部信息;
LSA中的LS Type、Link State ID和Advertising Router可以唯一标识一条LSA。
LSA中的LS序列号、LS checksum和LS age可以判断LSA的新旧。
(1)LS age
LSA老化时间字段,2字节,LSA存在的时间,达到1800s周期性泛洪,达到Max age 3600s老化掉。
(2)Options
可选项字段,置1表示具有相应特性,置0表示不具有相应特性;
E:允许泛洪5类AS External LSA;
N:允许处理7类NSSA LSA;
MC:允许转发IP组播报文;
DC:允许处理按需链路;
(3)LS type
LSA类型字段,1字节,1/2/3/4/5/7类LSA;
(4)Link State ID
链路状态ID字段,4字节,不同类型LSA的该字段内容不同;
1类LSA 源路由器ID
2类LSA DR接口地址
3类LSA 目的网段地址
4类LSA ASBR的路由器ID
5类LSA 目的网段地址
7类LSA 目的网段地址
(5)Advertising Router
通告路由器字段,4字节,通告该LSA的路由器ID;
(6)LS sequence number
LSA序列号字段,4字节,LSA序列号值越大,LSA越新,初始序列号从0x80000001到最大值0x7FFFFFFF;
(7)LS checksum
LSA校验和字段,2字节,对除LS age字段外的LSA报头全部信息做校验;
(8)length
长度字段,2字节,LSA的总长度,包括LSA头部,以字节为单位;