您的位置:首页 > 数据库

CCIE学习(36)―― OSPF数据库交换(一)

2007-12-30 13:48 225 查看
●在OSPF中,定义了五类消息用来交换链路状态广播(link-state advertisements,LSA)。交换LSA的过程不论在单域还是多域都差不多。

●OSPF路由器ID
OSPF路由器在发送消息之前,首先要选择一个唯一的32位标识作为其路由器标识(RID)。Cisco路由器通过下列步骤来选择:
1)先看是否在router ospf下用子命令router-id id配置了路由器ID,如果有即选择它。
2)再选择当前 “up and up”(物理和协议均up)的loopback接口上最大IP地址。
3)再选择当前 “up and up”的非loopback接口上最大IP地址。
虽然这个过程很简单,但还是有一些需要引起注意的:
1)获得RID的接口不一定要与OSPF的network命令匹配。
2)OSPF不必广播路由到RID的子网。
3)对IP路由表而言,RID也不必可达。
4)当OSPF进程启动时,都是从当前接口状态来选择RID。
5)如果OSPF进程重启或通过配置改变了RID,路由器会考虑改变OSPF的RID。
6)如果路由器RID改变了,在同一域的其他路由器必须重新进行SPF计算。
7)如果RID是通过router-id命令配置的,那么只要该命令不改变,路由器RID就不会变。

●发现邻接路由器,交换数据库,建立邻接关系
OSPF使用IP包(协议89)来封装五类消息,具体如下:
1)Hello消息:用来发现邻接路由器,建立邻接关系为2路状态,并监测邻接路由器的响应。
2)数据库描述(DD或DBD)消息:用来交换每个LSA的摘要版本,一般出现在初始拓扑交换中,这样路由器可以获悉邻接路由器的LSA列表。
3)链路状态请求(LSR)消息:请求一个或多个LSA,通告邻接路由器提供LSA的详细信息给发送路由器。
4)链路状态更新(LSU)消息:包含LSA的详细信息,一般用来响应LSR消息。
5)链路状态应答(LSAck)消息:用来确认收到LSU消息。
这些消息可以支持路由器发现邻接路由器(Hello),学习它们自己链路状态库(link-state database,LSDB)中没有的LSA(DD),请求并可靠交换LSA(LSR/LSU),以及监测邻接路由器是否有发生拓扑改变(Hello)。注意LSA本身不是OSPF的消息,它是一类数据结构,存放在路由器的LSDB中,并可包含在LSU消息中进行交换。
OSPF的LSDB交换过程:




OSPF路由器为每个邻接路由器维护一个状态机,可以使用show ip ospf neighbor命令显示当前邻接路由器的状态。随着LSDB交换的进行,邻接路由器的状态也会随之改变,最后稳定在完全状态(full state),意味着建立了完全的邻接关系。
LSDB交换进程详解:
1)成为邻接路由器(Hello进程)
Hello消息的三大功能:在子网中发现其他OSPF路由器;检查配置参数是否一致;监测邻接路由器健康状况。
为了发现邻接路由器,Cisco OSPF路由器在其所有激活OSPF的接口上监听发向224.0.0.5的多点传送Hello消息。Hello消息的源地址为路由器接口上的主IP地址。当两台路由器通过Hello消息互相发现之后,路由器会作如下参数检查:必须通过认证;必须在同一主子网内(包括掩码也要相同);必须在同一OSPF域;必须有同样的域类型;必须RID无重复;OSPF的Hello和Dead定时器必须相等。只有所有检查通过,两台路由器才可以建立邻接关系。注意:两台路由器的OSPF进程号(通过router ospf process-id命令配置)不需要匹配。另外,虽然MTU值在传送DD包时需要相等,但其检查并不在Hello消息中出现。
建立邻接关系之后,邻接路由器每隔hello间隔发送Hello消息,如果在长于dead间隔的时间内没有接收到来自邻接路由器的Hello消息,那么即认为该邻接路由器失效。Hello间隔默认在LAN接口是10秒,T1和更慢的WAN接口是30秒;而dead间隔默认为hello间隔的4倍。
2)广播LSA头信息到邻接路由器
当两台路由器建立邻接关系之后,并不急于发送包含LSA的包,而是先创建并发送DD包(其中包含了每个LSA的头信息)。这些头信息可以用来唯一地标识每个LSA。DD消息的传输使用的是OSPF定义的简单错误恢复过程。每个DD包分配一个序列号,接收端通过发送一个与接收到的DD包相同的包来进行确认。发送端使用的窗口大小为1,确认之后再发送下一个DD包。
3)数据库描述交换:主/从关系
在邻接关系建立起来之后(邻接关系的ExStart阶段),邻接路由器需要在数据库交换时确定哪个路由器是主路由器,哪个路由器是从路由器。拥有最高RID的路由器为主路由器,它可以发起数据库交换。此时,主路由器向从路由器发送DD包,而从路由器进行确认,在整个DD交换过程中只有主路由器可以增加序列号。
4)请求、获得并应答LSA
通过LSA头信息的交换,每台路由器获悉了邻接路由器的LSA列表,利用这些信息,路由器可以请求那些其LSDB中没有的LSA的完全版本。
要确定邻接路由器是否拥有一个LSA的更新版本,路由器需要在其LSDB中查看LSA的序列号,并与收到的DD包中的LSA的序列号进行比较。如果DD中LSA头信息的序列号更大,那么路由器就知道邻接路由器拥有更新的LSA,它会请求其发送该LSA的完全版本。(注意:LSA的起始序列号为0x80000001,每次递增1,然后到0x7FFFFFFF又重新从0x80000000开始。如果LSA的序列号为0x80000000,LSA必须在全网重新洪泛一次)
路由器使用LSR来请求LSA。邻接路由器响应包含所需LSA完全版本的LSU。该进程完成,两台路由器进入完全状态,这表示它们之间完整交换过数据库,它们的LSDB记录一致。
LSR/LSU进程使用可靠协议,所以需要进行应答。应答方式有两种:一种是直接使用收到的LSU包应答发送者,另一种是发送LSAck包来应答(其中包含了应答LSA信息头的列表)。本文出自 “第二次启航” 博客,请务必保留此出处http://riser.blog.51cto.com/252482/57352
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: