加载中...

数通 17-OSPF的报文格式


OSPF的报文格式

OSPF的报文格式

OSPF报文直接封装为IP报文协议报文,协议号为89。一个比较完整的OSPF报文(以LSU报文为例)结构如图所示。

img

1. OSPF报文头

OSPF有五种报文类型,它们有相同的报文头。

img

OSPF报文头格式

主要字段的解释如下:

  • Version:OSPF的版本号。对于OSPFv2来说,其值为2。

  • Type:OSPF报文的类型。数值从1到5,分别对应Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。

  • Packet length:OSPF报文的总长度,包括报文头在内,单位为字节。

  • Router ID:始发该LSA的路由器的ID。

  • Area ID:始发LSA的路由器所在的区域ID。

  • Checksum:对整个报文的校验和。

  • AuType:验证类型。可分为不验证、简单(明文)口令验证和MD5验证,其值分别为0、1、2。

  • Authentication:其数值根据验证类型而定。当验证类型为0时未作定义,为1时此字段为密码信息,类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。

& 说明:

MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。

2. Hello报文(Hello Packet)

最常用的一种报文,周期性的发送给邻居路由器用来维持邻居关系以及DR/BDR的选举,内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。

img

Hello报文格式

主要字段解释如下:

  • Network Mask:发送Hello报文的接口所在网络的掩码,如果相邻两台路由器的网络掩码不同,则不能建立邻居关系。

  • HelloInterval:发送Hello报文的时间间隔。如果相邻两台路由器的Hello间隔时间不同,则不能建立邻居关系。

  • Rtr Pri:路由器优先级。如果设置为0,则该路由器接口不能成为DR/BDR。

  • RouterDeadInterval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。如果相邻两台路由器的失效时间不同,则不能建立邻居关系。

  • Designated Router:指定路由器的接口的IP地址。

  • Backup Designated Router:备份指定路由器的接口的IP地址。

  • Neighbor:邻居路由器的Router ID。

    img

    在广播和NBMA的网络中如果router priority 的数值为0 ,表示不参与DR和BDR的选举。

    默认下 广播网和p2p—– hello 10秒,dead interval 40秒

    NBMA和p2mp—– hello 30秒,dead interval 120秒

    默认情况下,ospf的接口下hello的死亡时间为hello时间的4倍。默认的hello的时间为10秒钟,Dead Intervel 为40秒。

    修改hello的时间值。

    进入到接口模式下
    int g0/0/0
    ospf timer hello 3 
    修改之后,如果两边的Hello时间不一致了,邻居就会down掉的哦。

3. DD报文(Database Description Packet)

两台路由器进行数据库同步时,用DD报文来描述自己的LSDB,内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。

img

DD报文格式

主要字段的解释如下:

  • Interface MTU:在不分片的情况下,此接口最大可发出的IP报文长度。

  • I(Initial):当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。

  • M(More):当连续发送多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文。

  • MS(Master/Slave):当两台OSPF路由器交换DD报文时,首先需要确定双方的主(Master)从(Slave)关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。

  • DD Sequence Number:DD报文序列号,由Master方规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。主从双方利用序列号来保证DD报文传输的可靠性和完整性。

    img

    为什么需要DD报文?

    • 主要的作用是为了实现按需同步。

    DD报文传输的可靠性机制如何确保?

    • 在Exstart互相发送空的DD报文,用于选举主从关系,从设备会跟随主设备的DD序列号,当主设备收到从设备的DD序列号之后,将会把SEQ+1发送自己的DD给从设备,从设备收到Seq+1的DD判断,先前自身发送的DD主设备已经收到。

    主从选举之后,由从设备将邻居角色转为exchange状态,先发送带有LSA摘要信息的DD报文。

两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报文格式如图12所示。

img

LSR报文格式

主要字段解释如下:

  • LS type:链路状态类型。例如Type1表示Router LSA。

  • Link State ID:链路状态标识,根据LSA的类型而定。

  • Advertising Router:产生此LSA的路由器的Router ID。

LSU报文用来向对端路由器发送所需要的LSA,内容是多条LSA(全部内容)的集合。LSU报文格式如图13所示。

img

LSU报文格式

主要字段解释如下:

  • Number of LSAs:该报文包含的LSA的数量。

  • LSAs:该报文包含的所有LSA。

LSAck报文用来对接收到的LSU报文进行确认,内容是需要确认的LSA的Header。一个LSAck报文可对多个LSA进行确认。报文格式如图14所示。

img

LSAck报文格式

主要字段解释如下:

  • LSA Headers:该报文包含的LSA头部

LSU和LSACK的发送地址根据路由器角色有所变化以下将一一列出:

DRother:DRother产生的LSU通过224.0.0.6发送给DR和BDR;DR通过224.0.0.5发送给其他的DRoher和BDR;DRother 收到DR的LSU之后通过224.0.0.6发送ACK确认,BDR收到DR的LSU之后通过组播地址224.0.0.5发送ACK向DR确认。

DR:DR产生的LSU通过224.0.0.5发送给其他DRother和BDR;BDR收到之后通过224.0.0.5发送ACK向DR进行确认; DRother收到之后通过224.0.0.6发送ACK向DR确认。

BDR:BDR产生的LSU通过224.0.0.5发送给其他的DRother和DR,DR收到之后通过224.0.0.5发送ACK向BDR确认, DRother收到之后通过224.0.0.6发送ACK向BDR确认。

DR和BDR同时监听224.0.0.5和224.0.0.6两个组播地址,drother只监听在224.0.0.5。需要注意一点在初次建立邻居的时候会产生LSR报文,而LSR是单播发送的报文,在广播网络类型中中无论是DR,BDR还是DRother只要收到了LSR之后,都会以单播的形式发送LSU更新。ACK则正常发送。

DR与BDR的区别在于DR收到DRother的LSU则泛洪,BDR不做任何相应。


文章作者: okra2saber
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 okra2saber !
评论
  目录