ospf协议的数据包

基本概念:

ospf数据包是由多重封装构成的,解析一个ospf数据包就像给洋葱剥皮一样,

首先ospf数据包是封装在ip包头里面的,它的协议号是89,ttl值设置为1,所以ospf的数据包永远不可能穿越邻居路由器。

一个完整的ospf数据包是由ospf包头+ospf数据构成的,那么ospf的数据又分为5种类型。

ospf packet header format

ospf协议报头:

所有ospf的报文都有一个相同的报头,这个报头长度为20字节,可在特权模式下用debug ip ospf packet这条命令查看,这条命令只能查看接受到的信息,不能查看发送出去的ospf信息。

ospf packet types

5种报文的第一种:

hello包

hello包是ospf协议的第一种类型,其他4中类型的报文要想运转,必须首先依靠hello包建立邻居关系,hello包还有一个作用在ma网络环境中选举dr/bdr.

网络掩码-标识ospf运行接口的网络掩码,只在ma网络中检查

hello间隔-表示发送2个hello报文之间相隔多少s,在ma和p-t-p网络中是没10s发送一次。

修改hello间隔命令:

接口模式下:ip ospf hello-interval(1-65535)

hello死亡间隔-表示邻居在多少s后宣告死亡,默认是hello间隔的4倍

修改hello死亡间隔命令

接口模式下:ip ospf dead-interval(1-65535)

优先级-用于在ma下选举dr/bdr,默认为1,可在接口模式下用:

ip ospf priority(0-255)修改

指定路由器-ma环境下才有的,点到点没有必要选择dr,所有为0.0.0.0

备份指定路由器-ma环境下才有的,是dr的备份而已

选项-表示路由器支持的可选特性。

邻居id-包含每个邻居的rid,当一台路由器从邻居的hello数据包里看到自己的rid时,那么two-way状态形成。

2、dbd(链路状态数据库描述)

ospf报文的第2种类型,dbd用于邻居转到建立邻接时,选举主/从,并且交换lsa的头部,当我看到lsa头部字段的时候,我才知道dbd的好处。

主路由器发送序列号,从路由器相同的序列号进行确认,这也被称为隐式确认,而现实确认是发送ack

显示确认--ack确认

隐式确认--序列号

i位:初始位

m:后继位

ms:主/从位

链路状态请求lsr:

ospf报文的第三种类型,它的作用是请求自己lsdb中没有,或者是过期的lsa.

链路状态更新lsu:

ospf报文的第四种,链路状态更新有2个作用,一个是回复lsp请求,一个是实现区域的泛红,多个lsa被包含在一个lsu里面,并且lsu是可靠的,需要一个lsack来确认,如果没收到确认,它将每隔5s重传一次

链路状态确认lsack

最后一种ospf报文,用于对lsa的确认,多个lsa也可以在一个lsack中被确认,这保证了ospf报文的可靠性。