OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。 Hello报文 DD报文 LSR报文 LSU报文 LSAck报文
报文头格式OSPF这五种报文具有相同的报文头格式,长度为24字节。如图5-2所示。 图5-2 报文头格式
表5-9 OSPF报文头格式字段解释
字段名 | | | Version | 8比特 | OSPF的版本号。对于OSPFv2,其值为2。 | 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认证。 说明:MD5算法安全性低,存在安全风险。
| Authentication | 64比特 | 其数值根据验证类型而定: |
MD5验证数据添加在OSPF报文后面,不包含在Authentication字段中。
Hello报文最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及已知的邻居。Hello报文格式如图5-3所示。 图5-3 Hello报文格式
表5-10 Hello报文格式字段解释[td]
字段名 | | | Network Mask | 32比特 | 发送Hello报文的接口所在网络的掩码。 | HelloInterval | 16比特 | 发送Hello报文的时间间隔。 | Options | 8比特 | 可选项: | Rtr Pri | 8比特 | DR优先级。默认为1。 说明:如果设置为0,则设备不能参与DR或BDR的选举。
| RouterDeadInterval | 32比特 | 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。 | Designated Router | 32比特 | DR的接口地址。 | Backup Designated Router | 32比特 | BDR的接口地址。 | Neighbor | 32比特 | 邻居,以Router ID标识。 |
Hello报文在不同网络中的发送地址类型、发送时间间隔类型和时间间隔缺省值不同,参见表5-11。 表5-11 Hello报文的属性[td]
网络类型 | | | | 广播 | 组播地址 | HelloInterval | 缺省情况下,接口发送Hello报文的时间间隔的值为10秒。 | NBMA | 单播地址 | | 缺省情况下,接口发送Hello报文的时间间隔的值为30秒。 缺省情况下,接口发送Pollinterval间隔为120秒。 | P2P | 组播地址 | HelloInterval | 缺省情况下,接口发送Hello报文的时间间隔的值为10秒。 | P2MP | 组播地址 | HelloInterval | 缺省情况下,接口发送Hello报文的时间间隔的值为30秒。 |
在同一网段上的设备,其HelloInterval、PollInterval和RouterDeadInterval必须分别一致,否则不能形成邻居关系。在NBMA网络上还有一种PollInterval。
DD报文两台设备在邻接关系初始化时,用DD报文描述本端设备的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少设备之间的协议报文流量,对端设备根据LSA Header就可以判断出是否已有这条LSA。在两台设备交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。 DD报文格式如图5-4所示。 图5-4 DD报文格式
表5-12 DD报文格式字段解释
字段名 | | | Interface MTU | 16比特 | 在不分片的情况下,此接口最大可发出的IP报文长度。 | Options | 8比特 | 可选项: | I | 1比特 | 当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。 | M(More) | 1比特 | 当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0,否则置为1,表示后面还有其他的DD报文。 | M/S(Master/Slave) | 1比特 | 当两台OSPF设备交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。 | DD sequence number | 32比特 | DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。 | LSA Headers | - | 该DD报文中所包含的LSA的头部信息。 |
LSR报文两台设备互相交换过DD报文之后,需要发送LSR报文向对方请求更新LSA,内容包括所需要的LSA的摘要信息。LSR报文格式如图5-5所示。 图5-5 LSR报文格式
表5-13 LSR报文格式字段解释
字段名 | | | LS type | 32比特 | LSA的类型号。 | Link State ID | 32比特 | 与LS Type一起描述路由域中唯一一个LSA。 | Advertising Router | 32比特 | 产生此LSA的设备的Router ID。 |
LS type、Link State ID和Advertising Router可以唯一标识出一个LSA。当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
LSU报文LSU报文用来向对端设备发送其所需要的LSA或者泛洪本端更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文在支持组播和广播的网络中是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认,对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。LSU报文格式如图5-6所示。 图5-6 LSU报文格式
表5-14 LSU报文格式字段解释[td]
字段名 | | | Number of LSAs | 32比特 | LSA的数量。 |
LSAck报文LSAck报文用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。LSAck报文根据不同的链路以单播或组播的形式发送,LSAck报文格式如图5-7所示。 图5-7 LSAck报文格式
表5-15 LSAck报文格式字段解释
字段名 | | | LSAs Headers | 由需要确认的LSA的Header长度决定。 | 通过LSA的头部信息确认收到该LSA。 |
|