本次介绍OSPF协议报文和链路状态通告。包括协议报文头部,报文类型和LSA类型等
学习目标:
1. 理解OSPF报文头和报文类型
2. 理解链路状态通告类型
OSPF是直接运行在IP协议上的协议,使用的IP协议号为89。
OSPF有五种报文类型,但是OSPF报文头部格式都是相同的。
所有的OSPF报文使用相同的OSPF报文头部。
Version填2,Type有五种,Packet Length指出OSPF报文总长度,包括报文头部。单位是字节。
Router ID是生成此报文的路由器的Router ID。
Area ID是此报文需要被通告的区域。
AuType是验证此报文所应当使用的验证方法。
Authentication是验证此报文时所需要的密码等信息。
验证一个OSPF报文头部是否合法包括:
1. version为2
2. Area ID应当满足下列两种情况之一:(1)和接收端口所属区域的Area ID一致
(2)不一致的话,但是值为0,表示该报文属于骨干区域,而且是在一个虚连接商发送的。
3. AuType字段必须与该区域配置的AuType一致。
4. Authentication为验证信息,内容与AuType字段相关。
只有通过验证的OSPF报文才能被接收,否则将不能正常建立邻居关心。VRP支持两种验证方式:区域验证方式和接口验证方式。当两种验证方式都存在时,优先使用接口验证方式。
OSPF共有五种报文类型。
Hello报文用于发现和维护邻居关系,在广播型网络和NBMA网络上Hello也用来选举DR和BDR。
DD报文通过携带LSA头部信息来描述链路状态的摘要信息。
LS Request报文用于发送下载LSA的请求信息,这些被请求的LSA是通过接收DD报文发现的,但是本路由器上没有的。
LS Update报文通过发送详细的LSA来同步链路状态数据库。
LS Ack报文通过泛洪确认信息确保路由信息的交换过程是可靠地。
除了Hello报文外,其他所有报文只在建立了邻接关系的路由器之间发送。
除Hello报文外,其他的OSPF报文都携带LSA信息。
LS age:表示LSA已经生存的时间,单位是秒。
LS type:标识了LSA的格式和功能,常用的LSA类型有五种
Link State ID:表示该LSA所描述的那部分链路的标识,例如Router ID等
Advertising Router:产生此路由器的Router ID。
LS sequence number:用于检测旧的和重复的LSA。
其中,LS type,Link State ID和Advertising Router的组合共同标识一条LSA。
Router-LSA和Network-LSA用于计算区域内路由,这两类LSA描述的是具体的链路状态信息。
每台路由器都会向外发布Router-LSA。只有DR向外发布Network-LSA。
Network-Summary-LSA用于计算区域间路由信息。这类LSA描述的是精简的路由信息,而不是详细的链路状态信息。
默认路由也可以通过Network-Summary-LSA发布。
去往网段N1的路由通过Router-LSA发布到ABR,ABR将链路状态抽象成路由信息,通过Network-Summary-LSA发布到其它区域。
第四类用于描述如何到达ASBR,第五类由ASBR描述如何到达AS外部某网段,这两类LSA配合起来用于计算AS外部路由。
ASBR使用第五类LSA描述外部路由,这些第五类LSA在整个AS内部泛洪。
当ABR向其它区域通告所接收到的第五类LSA时,同时为该区域生成一条第四类LSA描述如何到达ASBR。第四类LSA只能在一个区域内泛洪,第五类LSA每泛洪到一个区域,相关的ABR就要为该区域重新生成一条新的第四类LSA。
Link State ID是该LSA所描述链路的标识,对于不同类型的LSA,其含义也不同。
LS type,Link State ID和Advertising Router的组合唯一标识一条LSA,但是对于一条LSA,有可能同时存在多个实例。LS sequence number用于检查哪一个实例更新。
LS sequence number是一个32位的有符号整数,用于检测过期和重复的LSA。由于LS sequence number是32位有符号整数,因此数值0x80000000,也就是2^-31是最小的int数值,但此数值是被保留的,协议可用的最小数值为0x80000001。
当路由器生成一条新的LSA时,使用序列号0x80000001作为该LSA的初始序列号,此后,每次更新该LSA,序号加1.序列号越大表示该LSA实例越新。
LS Age:此数值的单位是秒,在LSDB中的LSA的LS age随时间而增长。一条LSA在向外泛洪之前,LS age的值要增加InfTransDelay(该值可以在端口上设置,缺省为1秒,表示在链路上传输的延迟)。
如果一条LSA的LS age达到了LSRefreshTime(30分钟),这条LSA的生成者需要重新生成一个该LSA的实例,如果一条LSA的LS Age达到了MaxAge(1小时),这条LSA就要被删除。
LS age数值越小表示LSA越新。
如果路由器希望从网络中删除一条自己此前生成的LSA,则重新生成该条LSA的一个实例,将LS Age设置为Max Age即可。
如果路由器收到一条LS Age设置为Max Age的LSA,则从LSDB中删除此LSA(如果LSDB中存在此LSA)。
问题:
1. 如何检查OSPF报文是否合法?
答:检查版本,Area ID,验证方法和验证信息。
2. 如何配置OSPF的报文的认证?
答:有区域验证和接口验证两种方式。使用区域验证时,一个区域中所有路由器在该区域下的验证模式和口令必须一致;接口验证方式用于在相邻的路由器之间设置验证模式和口令,优先级高于区域验证方式。
3. OSPF的LSA类型有哪些?
答:Router-LSA,Network-LSA,Network-Summary-LSA,ASBR-Summary-LSA和AS-External-LSA。
4. 如何检测LSA的新旧?
答:使用LS Sequence Number和LS Age,Sequence Number越大表示LSA越新,如果Sequence Number一致,则比较LS age,LS age越小表示LSA越新。