1、OSPF 的报文格式OSPF 用 IP 报文直接封装协议报文,协议号为 89。OSPF 分为 5 种报文:Hello 报文、DD 报文、LSR 报文、LSU 报文和 LSAck 报文。报文头格式OSPF 这五种报文具有相同的报文头格式,长度为 24 字节。如 0 所示。OSPF 报 文 头 格 式Authentication0 7 15 31Version Router IDArea I Packet lngthTypeAuTypeChecksumOSPF 报 文 头 格 式 字 段 解 释字段名 长度 含义Version 8 比特 OSPF 的版本号。对于 OSPFv2 来说,其值为 2。T
2、ype 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 时未作定义;类型为
3、 1 时此字段为密码信息;类型为 2 时此字段包括 Key ID、MD5 验证数据长度和序列号的信息。说明:MD5 验证数据添加在 OSPF 报文后面,不包含在 Authenticaiton 字段中。Hello 报文最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF 的接口上发送。报文内容包括一些定时器的数值、DR、BDR 以及自己已知的邻居。Hello 报文格式如 0 所示。Hello 报 文 格 式Authentication0 7 15 31Version Router IDArea I Packet lngthType=1AuTypeChecksum.HeloInt
4、erval RouterDeadInterval Rtr PriOptionsBackup Designated Routeresignated outerNetwork MaskNeighborHello 报 文 格 式 字 段 解 释字段名 长度 含义Network Mask 32 比特 发送 Hello 报文的接口所在网络的掩码。Hellointerval 16 比特 发送 Hello 报文的时间间隔。默认为 10 秒。Options 8 比特 可选项:E:允许 Flood AS-external-LSAs;MC:转发 IP 组播报文;N/P:处理 Type-7 LSAs;DC:处理按需
5、链路。字段名 长度 含义Rtr Pri 8 比特 DR 优先级。默认为 1。说明:如果设置为 0,则 路由器不能参与 DR/BDR 的选举。RouterDeadInterval 32 比特 失效时间。如果在此时间内未收到邻居发来的Hello 报文,则认为邻居失效。默认为 40 秒。Designated Router 32 比特 DR 的接口地址。Backup Designated Router32 比特 BDR 的接口地址。peer 32 比特 邻居,以 Router ID 标识。在同一网段上的路由器,其 Hellointerval 和 RouterDeadInterval 必须分别一致,否则
6、不能形成邻居关系。NBMA 网络上多一种 PollIntervalHello 报文在不同链路上的发送:在广播链路上,Hello 报文每 Hellointerval 发送往组播地址;在虚连接链路上,Hello 报文以单播形式每 Hellointerval 发送到对端;在 P2P 和 P2MP 链路上,Hello 报文每 Hellointerval 发送往组播地址;在 NBMA 链路上, Hello 报文以 单播发送:DR、BDR 、有能力成为 DR 的路由器,Hello 报文每 Hellointerval发送给每个邻居;Hello 报文发送的间隔取决于邻居的状态:只有当邻居的状态为Down 时,
7、发送间隔为 Pollinterval;其它情况为 Hellointerval。Hellointerval 缺省间隔为 10 秒,Pollinterval 缺省间隔为 120 秒。DD 报文两台路由器在邻接关系初始化时,用 DD 报文(Database Description Packet)来描述自己的 LSDB,进行数据库的同步。报文内容包括 LSDB中每一条 LSA 的 Header(LSA 的 Header 可以唯一标识一条 LSA) 。LSA Header 只占一条 LSA 的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据 LSA Header 就可以判断出是
8、否已有这条 LSA。在两台路由器交换 DD 报文的过程中,一台为Master,另一台为 Slave。由 Master 规定起始序列号,每发送一个 DD报文序列号加 1,Slave 方使用 Master 的序列号作为确认。DD 报文格式如 0 所示。DD 报 文 格 式Authentication0 7 15 31Version Router IDArea ID Packet lngthType=2AuTypeChecksumInterface MTU Options 00ILSA Headers . MSD Sequence NumberDD 报 文 格 式 字 段 解 释字段名 长度 含义I
9、nterface MTU 16 比特 在不分片的情况下,此接口最大可发出的 IP 报文长度。Options 8 比特 可选项:E:允许 Flood AS-external-LSAs;MC:转发 IP 组播报文;N/P:处理 Type-7 LSAs;DC:处理按需链路。I 1 比特 当发送连续多个 DD 报文时,如果这是第一个DD 报文,则置为 1,否则置为 0。M(More ) 1 比特 当发送连续多个 DD 报文时,如果这是最后一个 DD 报文,则置为 0。否则置为 1,表示后面还有其他的 DD 报文。M/S(Master/Slave) 1 比特 当两台 OSPF 路由器交换 DD 报文时,
10、首先需要确定双方的主从关系,Router ID 大的一方会成为 Master。当值为 1 时表示发送方为 Master。DD sequence number 32 比特 DD 报文序列号。主从双方利用序列号来保证DD 报文传输的可靠性和完整性。LSA Headers - 该 DD 报文中所包含的 LSA 的头部信息。LSR 报文两台路由器互相交换过 DD 报文之后,知道对端的路由器有哪些 LSA 是本地的 LSDB 所缺少的和哪些 LSA 是已经失效的,这时需要发送 LSR报文(Link State Request Packet)向对方请求所需的 LSA。内容包括所需要的 LSA 的摘要。LS
11、R 报文格式如 0 所示。LS type、Link State ID和 Advertising Router 可以唯一标识出一个 LSA,当两个 LSA 一样时,需要根据 LSA 中的 LS sequence number、LS checksum 和 LS age 来判断出所需要 LSA 的新旧。LSR 报 文 格 式Authentication0 7 15 31Version Router IDArea I Packet lngthType=3AuTypeChecksumLS typeLink State IDAdvertising RouterLSR 报 文 格 式 字 段 解 释字段名
12、长度 含义LS type 32 比特 LSA 的类型号。Link State ID 32 比特 根据 LSA 中的 LS Type 和 LSA description 在路由域中描述一个 LSA。Advertising Router32 比特 产生此 LSA 的路由器的 Router ID。LSU 报文用来向对端路由器发送所需要的 LSA,内容是多条 LSA(全部内容)的集合。LSU 报文(Link State Update Packet )在支持组播和广播的链路上是以组播形式将 LSA 泛洪出去。为了实现 Flooding 的可靠性传输,需要 LSAck 报文对其进行确认。对没有收到确认报文
13、的 LSA 进行重传,重传的 LSA 是直接发送到邻居的。LSU 格式如 0 所示。LSU 报 文 格 式Authentication0 7 15 31Version Router IDArea I Packet lngthType=4AuTypeChecksumLSAs.Number of LSAsLSU 报 文 格 式 字 段 解 释字段名 长度 含义Number of LSAs 32 比特 LSA 的数量。LSAck 报文用来对接收到的 LSU 报文进行确认。内容是需要确认的 LSA 的Header(一个 LSAck 报文可对多个 LSA 进行确认) 。LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送格式如 0 所示。LSAck 报 文 格 式Authentication0 7 15 31Version Router IDArea I Packet lngthAuTypeChecksumLSA Headers.Type=5LSAck 报 文 格 式 字 段 解 释字段名 长度 含义LSAs Headers - 通过 LSA 的头部信息确认收到该 LSA。