"小张,你上次对我讲了这个OSPF的七种状态,那这些状态中的数据包是什么意思啊,比方说HELLO包,DBD包我听都没听说过,能不能结合状态和我讲一下。"

望着主管一脸迷茫的样子,小张点了点头,说"没问题。"

OSPF的七种状态,Down,Init,2-way,Exstart,Exchange,loading,full,而事实上,每一种状态都会与某种数据包有着一个紧密的联系。

Hello报文:最常用的一种报文,用于发现、维护邻居关系。并在广播和NBMA(None-Broadcast Multi-Access)类型的网络中选举指定路由器DR(Designated Router)和备份指定路由器BDR(Backup Designated Router)。



ospf查看有几个下一跳 ospf查看dr_ospf查看有几个下一跳


Ospf报文的长度:


ospf查看有几个下一跳 ospf查看dr_ospf查看有几个下一跳_02


Version:顾名思义,版本号,占据1个字节,用来标识所采用的OSPF协议版本号,目前最高版本为OSPF v4,即值为4(对应二进制就是0100)。

Type:分组类型:区分5种OSPF分组的长度,用来表示五种报文中的哪一个。

Packet Length:包长度字段,占2个字节。它是指整个报文(包括OSPF报头部分和后面各报文内容部分)的字节长度。

Router ID:路由器ID字段,占4个字节,指定发送报文的源路由器ID。

Area ID:区域ID字段,占4个字节,指定发送报文的路由器所对应的OSPF区域号。

Checksum:校验和字段,占2个字节,是对整个报文(包括OSPF报头和各报文具体内容,但不包括下面的Authentication字段)的校验和,用于对端路由器校验报文的完整性和正确性。

AuType:认证类型字段,占2个字节,指定所采用的认证类型,0为不认证,1为进行简单认证,2采用MD5方式认证。

Authentication:认证字段,占8个字节,具体值根据不同认证类型而定:认证类型为不认证时,此字段没有数据,认证类型为简单认证时,此字段为认证密码,认证类型为MD5认证时,此字段为MD5摘要消息。

HELLO报文的详情:


ospf查看有几个下一跳 ospf查看dr_链路_03


Network Mask:发送Hello报文接口所在的子网掩码。

HelloInterval:指定发送Hello报文的时间间隔,默认为10秒

Options:可选项,包括E:允许泛洪AS-external-LAS;MC:允许转发IP组皤报文;N/P:允许处理Type 7 LSA; DC:允许处理按需链路

Rtr Pri:指定DR优先级,默认为1。如果设为0,则表示本路由器不参与DR/BDR选举

RouterDeadInterval:指定路由器失效时间,默认为40秒。如果在此时间内没有收到邻居路由器发来的Hello报文,则认为该邻居路由器已失效

Designated Router:指定DR的接口IP地址

Backup Designated Router:指定BDR的接口IP地址

Neighbor:指定邻居路由器的RID。下面的省略号(…)表示可以指定多个邻居路由器RID。


ospf查看有几个下一跳 ospf查看dr_ospf查看有几个下一跳_04


DBD报文:DD报文是用来描述本地路由器的链路状态数据库(LSDB),在两个OSPF路由器初始化连接时要交换DD报文,进行数据库同步。

DD交换过程按询问/应答方式进行,在DD报文交换中,一台为Master(主)角色,另一台为Slave(从)角色。Master路由器向从路由器发送它的路由表内容,并规定起始序列号,每发送一个DD报文,序列号加1,Slave则使用Master的序列号进行确定应答。但是显然,主从之间的关系会因每个DD交换的不同而不同。网络中的所有路由器会在不同时刻作用,在这个过程中既可能是主路由器又可能是从路由器。


ospf查看有几个下一跳 ospf查看dr_链路_05


Interface MTU:指出发送DD报文的接口在不分段的情况下,可以发出的最大IP报文长度。

Options可选项:包括E:允许泛洪AS-external-LAS;MC:允许转发IP组皤报文;N/P:允许处理Type 7 LSA; DC:允许处理按需链路。

I:指定在连续发送多个DD报文,如果是第一个DD报文则置1,其它的均置0。

M:指定在连续发送多个DD报文,如果是最后一个DD报文则置0,否则均置1。

M/S:设置进行DD报文双方的主从关系,如果本端是Master角色,则置1,否则置0。

DD Sequence Number指定所发送的DD报文序列号。主从双方利用序列号来确保DD报文传输的可靠性和完整性

LSA Heaader指定DD报文中所包括的LSA头部。后面的省略号(…)表示可以指定多个LSA头部


ospf查看有几个下一跳 ospf查看dr_ospf查看有几个下一跳_06


LSR:LSR报文用于请求相邻路由器链路状态数据库中的一部分数据。当两台路由器互相交换完DD报文后,知道对端路由器有哪些LSA是本LSDB所没有的,以及哪些LSA是已经失效的,则需要发送一个LSR报文,向对方请求所需的LSA。

LS type:指定所请求的LSA类型,主要共7类,我们会在之后的文章中,对于LSA的类型进行一个详细的讲解的,本篇主要讲解关于五种数据包的结构的。

Link State ID:用于指定ospf所描述的部分区域,该字段的使用方法根据不同的LSA类型而不同:当为LSA 1时,该字段值是产生LSA 1的路由器的Router-ID,当为LSA 2时,该字段值是DR的接口地址,当为LSA 3时,该字段值是目的网络的网络地址,当为LSA 4时,该字段值是ASBR的Router-ID,当为LSA 5时,该字段值是目的网络的网络地址

Advertising Router:指定产生此所要请求的LSA的路由器ID。

LSU:LSU报文是应LSR报文的请求,用来向对端路由器发送所需的LSA,内容是多条LSA完整内容的集合,LSU报文内容部分包括此次共发送的LSA数量和每条LSA的完整内容,


ospf查看有几个下一跳 ospf查看dr_ospf查看有几个下一跳_06


Number of LSA:指定此报文中共发送的LSA数量。

LSAs:是一条条具体的LSA完整信息,后面的省略号表示可多条LSA。

LSAck报文是路由器在收到对端发来的LSU报文后所发出的确认应答报文,内容是需要确认的LSA头部(LSA Headers).


ospf查看有几个下一跳 ospf查看dr_ospf查看有几个下一跳_08


LSAck:则用于回应LSU报文,对于接收到的数据包进行一个确认。

"这就是OSPF的五种数据包,与前文的7种状态互相有紧密的联系的主管,你会了吗?"小张推了推眼镜,含蓄的说道。

"原来如此,OSPF在交互的时候就是在交互这些数据包啊,距离矢量协议是发送路由条目,链路状态就是传递这些链路数据,果然不一样,不过,这个区域的概念和数据类型又是什么东西,LSA还有许多类型嘛?"

"当然,我待会可以给你讲一下这个。"小张胸有成竹的说。

"就到这里吧,该吃饭了,不过我还是好奇,新盟出来的你竟然懂的如此之多,我家里有个后辈,能不能也让他学习一下?"

"当然,新盟秉承的便是让知识像水和电一样融入我们的生活。"

"去链接里面看看,你会回来感谢我的。"