940 likes | 1.19k Views
第 6 章 OSPF 路由协议技术. http://www.fjlzy.com. 教学内容. 教学目标 1 、 掌握 OSPF 的工作原理 2 、 掌握单区域 OSPF 的配置方法 重点难点 1 、 什么是链路状态路由协议 2 、 Area 的概念 3 、 DR 的选举 4 、 OSPF 的各种数据包类型. 技能目标. 应 知 1 、 链路状态的概念 2 、 OSPF 的近邻关系 3 、 DR 选举的过程 4 、 OSPF 的各种数据包类型 应 会 1 、 单区域 OSPF 的基本配置
E N D
第 6 章 OSPF路由协议技术 http://www.fjlzy.com
教学内容 教学目标 1、 掌握OSPF的工作原理 2、 掌握单区域OSPF的配置方法 重点难点 1、 什么是链路状态路由协议 2、Area的概念 3、DR的选举 4、OSPF的各种数据包类型
技能目标 应 知 1、 链路状态的概念 2、OSPF的近邻关系 3、DR选举的过程 4、OSPF的各种数据包类型 应 会 1、 单区域OSPF的基本配置 2、OSPF的DR选举控制 3、OSPF的调试
OSPF • OSPF是一种典型的链路状态路由协议。采用OSPF的路由器彼此交换并保存整个网络的链路信息,从而掌握全网的拓扑结构,独立计算路由。 • 目前广为使用的是OSPF第二版,最新标准为RFC2328。 • OSPF作为一种内部网关协议(Interior Gateway Protocol,IGP),用于在同一个自治域(AS)中的路由器之间发布路由信息。不同于距离矢量协议(RIP),OSPF具有支持大型网络、路由收敛快、占用网络资源少等优点,在目前应用的路由协议中占有相当重要的地位。
链路状态协议(Link-State Protocols) OSPF路由器收集其所在网络区域上各路由器的连接状态信息,即链路状态信息(Link-State),生成链路状态数据包LSA传送给同一区域内的所有路由器。 路由器掌握了该区域上所有路由器的链路状态信息,也就等于了解了整个网络的拓扑状况。 而距离矢量路由协议是将全部或部分路由表传递给自己的邻居路由器。
OSPF特点 • OSPF无路由自环问题。 • OSPF支持变长子网掩码VLSM。 • OSPF支持区域划分、适应大规模网络。 • OSPF路由变化时收敛速度快,可适应大规模网络。 • OSPF发送周期性更新(链路状态刷新),30分钟。当拓扑改变时触发更新 • OSPF被直接封装于IP协议之上(使用协议号89),它靠自身的传输机制保证可靠性。 • OSPF数据包的TTL值被设为1,即OSPF数据包只能被传送到一跳范围之内的邻居路由器。 • OSPF以组播地址发送协议报文(对所有DR/BDR路由器的组播地址:224.0.0.6;对所有的SPF路由器的组播地址:224.0.0.5) • OSPF支持等值路径负载分担(Cisco定义最大6条)。 • OSPF支持验证,防止对路由器、路由协议的攻击行为
分层设计(Hierarchical Design ) 1.大的OSPF网络采用分层设计,所有区域到主干区域。 • OSPF把一个大型网络分割成多个小型网络的能力被称为分层路由,这些被分割出来的小型网络就称为“区域”(Area)。由于区域内部路由器仅与同区域的路由器交换LSA信息,这样LSA报文数量及链路状态信息库表项都会极大减少,SPF计算速度因此得到提高。多区域的OSPF必须存在一个主干区域,主干区域负责收集非主干区域发出的汇总路由信息,并将这些信息返还给到各区域。 OSPF区域不能随意划分,应该合理地选择区域边界,使不同区域之间的通信量最小。但在实际应用中区域的划分往往并不是根据通信模式而是根据地理或政治因素来完成的。 2.分层设计好处: • (1)减少路由更新 • (2)加速收敛 • (3)限制不稳定到一个区域 • (4)提高网络性能
OSPF分层路由(The Solution: OSPF Hierarchical Routing) OSPF自治域 OSPF把一个大型网络分割成多个小型网络的能力被称为分层路由,这些被分割出来的小型网络就称为“区域”(Area)。多区域的OSPF必须存在一个主干区域(Area0) ,主干区域负责收集非主干区域发出的汇总路由信息,并将这些信息返还给到各区域。 主干区域:起到了让其他非骨干区域能够知道别的区域的网络情况的作用。也就是说,所有非骨干区域的路由信息都要流经主干区域。
OSPF术语 • 1.路由器ID—Router ID • OSPF协议使用一个被称为Router ID的32位无符号整数来唯一标识一台路由器。基于这个目的,每一台运行OSPF的路由器都需要一个Router ID。这个Router ID一般需要手工配置,一般将其配置为该路由器的某个接口的IP地址。由于IP地址是唯一的,所以这样就很容易保证Router ID的唯一性。在没有手工配置Router ID的情况下,一些厂家的路由器(包括Quidway系列)支持自动从当前所有接口的IP地址自动选举一个IP地址作为Router ID。 • 2.邻居(Neighbors) • 同一个网段上的路由器可以成为邻居。邻居是通过Hello报文来选择的,Hello 报文使用IP多播方式在每个端口定期发送。路由器一旦在其相邻路由器的Hello 报文中发现他们自己,则他们就成为邻居关系了,在这种方式中,需要通信的双方确认。邻居的协商只在主地址(Primary address) 间协商。
OSPF术语 • 两个路由器之间如果他们不满足下列条件,则他们就不能成为邻居: • 1、Area-id:两个路由器必须有共同的网段上,它们的端口必须属于该网段上的同一个区,当然这些端口必须属于同一个子网。 • 2 验证(Authentication OSPF)允许给每一个区域配置一个密码来进行互相验证。路由器必须交换相同的密码,才能成为邻居。 • 3、Hello Interval和Dead Interval: OSPF协议在每个网段上交换Hello 报文,这是Keeplive的一种形式,路由器用它来确认该网段上存在哪些路由器,并且选定一个指定路由器DR(Designated Router)。Hello Interval定义了路由器上OSPF端口上发送Hello 报文时间间隔长度(秒为单位)。Dead Interval是指邻居路由器宣布其状态为DOWN之前,没有收到其Hello报文的时间。 • OSPF协议需要两个邻居路由器的这些时间间隔相同,如果这些时间间隔不同,这些路由器就不能成为邻居路由器。可在路由器的端口模式下设置这些定时器: • ip ospf hello-interval <seconds> • ip ospf dead-interval <seconds> • 4 Stub区标记:两个路由器为了成为邻居还可以在Hello报文中通过协商Stub区的标记来达到。Stub区的定义会影响邻居选择的过程。
OSPF术语 • 3.邻接(Adjacency) • 邻居关系形成后路由器之间就会进行邻接关系的形成。成为邻接关系的路由器之间,不仅仅是进行简单的Hello报文的交换,而是进行数据库的交换/为了减少特定网段上的交换信息。OSPF协议在每一个多址可达的网段上选择一个路由器作为指定路由器(DR Designated Router), 选择另外一个路由器作为备份的指定路由器BDR (Backup Designated Router), BDR作为DR的备份。这种设计的考虑是让DR或BDR成为信息交换的中心,而不是让每个路由器与该网段上其它路由器两两做更新信息的交换。路由器首先与 DR、 BDR交换更新信息,然后DR 、BDR将这些更新信息转发给该网段上的其他路由器。这样信息交换的复杂度就会从O (n*n)降到O (n),其中n是多址可达网段上的路由器的数量。如下图, 显示了DR和BDR的关系。
OSPF术语 • 4.指定路由器(Designative Router,DR) • DR的主要功能就是在一个LAN内的所有路由器拥有相同的数据库,而且把完整的数据库信息发送给新加入的路由器。 • 5.备份指定路由器BDR(Backup Designative Router,BDR) • 6. LSA链路状态公告(Link-State Advertisement) • 类型1:路由器LSA,描述路由器领域的连接的链路状态和费用; 只在一个地区内传播 • 类型2:网络LSA,哪个适合有两个或更多附上的路由器以起源指定的路由器给连接的每个广播或者NBMA 连接; 全部列举附在连接上的路由器 • 类型3:网络摘要LSA,具体来讲就是将自己Area内的链路告诉Area 0,也将其他Area(包括Area 0)的信息传到自己的Area。其通告的链路是所有链路中Cost最小的,在路由表中以“O IA”表示。如果LSA3通告的是一条缺省路由,那么链路状态ID和网络掩码字段中都将设为0.0.0.0。 • 类型4:ASBR 摘要LSA,描述通向目的地OSPF路由器的路径(一时当边界路由器)在这个领域以外, • 类型5:作为外部LSA,描述通向在以外的前缀的作为路径 • 类型6:组播LSA,思科路由器不支持MOSPF • 类型7:NSSA外部LSA,由ASBR产生,几乎和5类相同.
OSPF术语 • 7.链路状态数据库LSDB • 也叫拓扑数据库,把LSA作为一连串记录保存下来。 • LSA包括两类通用信息: • 路由器链路信息-使用路由器ID、邻居ID和代价通告路由器的邻居路由器,这里的代价是发送LSA路由器到其邻居的代价; • 末梢网络信息-使用路由器ID、网络ID和代价通告路由器直接连接的末梢网络(没有邻居的网络); • 8.邻居表、拓扑表、路由表
9.内部路由器(IR):所有端口在同一区域的路由器,维护一个链路状态数据库。9.内部路由器(IR):所有端口在同一区域的路由器,维护一个链路状态数据库。 • 10.自治系统边界路由器(ASBR):至少拥有一个连接外部自治域网络(如非OSPF的网络)端口的路由器,负责将非OSPF网络信息传入OSPF网络。 • 11.区域边界路由器(ABR):具有连接多区域端口的路由器,一般作为一个区域的出口。ABR为每一个所连接的区域建立链路状态数据库,负责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负责将这些信息发送到各个区域。 • 12.主干路由器:具有连接主干区域端口的路由器
OSPF数据包类型 1、Hello包 Hello数据包是编号为1的OSPF数据包。运行OSPF协议的路由器每隔一定的时间发送一次Hello数据包,用以发现、保持邻居(Neighbors)关系并可以选举DR/BDR。 2、数据库描述包 链路状态数据库描述数据包(DataBase Description,DBD)是编号为2的OSPF数据包。该数据包在链路状态数据库交换期间产生。它的主要作用有三个: • 选举交换链路状态数据库过程中的主/从关系。 • 确定交换链路状态数据库过程中的初始序列号。 • 交换所有的LSA数据包头部。
OSPF数据包类型 3、链路状态请求包 链路状态请求数据包(LSA-REQ)是编号为3的OSPF数据包。该数据包用于请求在DBD交换过程发现的本路由器中没有的或已过时的LSA包细节。 4、链路状态更新包 链路状态更新数据包(LSA-Update)是编号为4的OSPF数据包。该数据包用于将多个LSA泛洪,也用于对接收到的链路状态更新进行应答。如果一个泛洪LSA没有被确认,它将每隔一段时间(缺省是5秒)重传一次。 5、链路状态确认包 链路状态确认数据包(LSA-Acknowledgement)是编号为5的OSPF数据包。该数据包用于对接收到的LSA进行确认。该数据包会以组播的形式发送。如果发送确认的路由器的状态是DR或者BDR,确认数据包将被发送到OSPF路由器组播地址:224.0.0.5。如果发送确认的路由器的状态不是DR或者BDR,确认将被发送到OSPF路由器组播地址:224.0.0.6。
OSPF操作(OSPF Operation) 1.建立邻接关系 2.必要的进行DR选举 3.发现路由 4. 选择相应的路由 5.维护路由信息
邻居关系(Neighborship) *标记在邻居路由器上必须匹配
OSPF的邻居状态机 • Down:邻居状态机的初始状态,是指在过去的Dead-Interval时间内没有收到对方的Hello报文。 • Attempt:只适用于NBMA类型的接口,处于本状态时,定期向那些手工配置的邻居发送HELLO报文。 • Init:本状态表示已经收到了邻居的HELLO报文,但是该报文中列出的邻居中没有包含我的Router ID(对方并没有收到我发的HELLO报文)。 • 2-Way:本状态表示双方互相收到了对端发送的HELLO报文,建立了邻居关系。在广播和NBMA类型的网络中,两个接口状态是DROther的路由器之间将停留在此状态。其他情况状态机将继续转入高级状态。 • ExStart:在此状态下,路由器和它的邻居之间通过互相交换DD报文(该报文并不包含实际的内容,只包含一些标志位)来决定发送时的主/从关系。建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。 • Exchange:路由器将本地的LSDB用DD报文来描述,并发给邻居。 • Loading:路由器发送LSR报文向邻居请求对方的DD报文。 • Full:在此状态下,邻居路由器的LSDB中所有的LSA本路由器全都有了。即,本路由器和邻居建立了邻接(adjacency)状态。
建立双向通信(Establishing Bidirectional Communication) Down:邻居状态机的初始状态,是指在过去的Dead-Interval时间内没有收到对方的Hello报文。
建立双向通信(Establishing Bidirectional Communication) 以固定的时间间隔(10秒)向邻居发送Hello分组,进入Init状态 Init:本状态表示已经收到了邻居的HELLO报文,但是该报文中列出的邻居中没有包含我的Router ID(对方并没有收到我发的HELLO报文)。
建立双向通信(Establishing Bidirectional Communication)
建立双向通信(Establishing Bidirectional Communication) 在hello分组中含有发送者已知的OSPF邻居列表,当看到自己出现在另一邻居路由器的hello分组时,进入two-way状态 2-Way:本状态表示双方互相收到了对端发送的HELLO报文,建立了邻居关系。在广播和NBMA类型的网络中,两个接口状态是DROther的路由器之间将停留在此状态。其他情况状态机将继续转入高级状态。
查找网络路由(Discovering the Network Routes) 有最高OSPF路由器ID的路由器胜出作为指定路由器DR,进入Exstart状态 Exchange:路由器将本地的LSDB用DD报文来描述,并发给邻居。
查找网络路由(Discovering the Network Routes) 相互交换链路状态数据库汇总后,进入Exchange状态,比较链路状态数据库中的,找出自己不存在的链路状态信息
增加链路状态条目(Adding the Link-State Entries) 双方给出收到链路状态数据库汇总的确认
增加链路状态条目(Adding the Link-State Entries) 需要某一条目的完整信息,以增加此网络的链路状态信息 回复一个确认 Loading:路由器发送LSR报文向邻居请求对方的DD报文。 Full:在此状态下,邻居路由器的LSDB中所有的LSA本路由器全都有了。即,本路由器和邻居建立了邻接(adjacency)状态。
路由器的状态变迁过程 1. RT1的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个HELLO报文(使用组播地址224.0.0.5)。由于此时RT1在该网段中还未发现任何邻居,所以HELLO报文中的Neighbor字段为空。 2. RT2收到RT1发送的HELLO报文后,为RT1创建一个邻居的数据结构。RT2发送一个HELLO报文回应RT1,并且在报文中的Neighbor字段中填入RT1的Router id,表示已收到RT1的HELLO报文,并且将RT1的邻居状态机置为Init。 3. RT1收到RT2回应的HELLO报文后,为RT2创建一个邻居的数据结构,并将邻居状态机置为Exstart状态。下一步双方开始发送各自的链路状态数据库。 为了提高发送的效率,双方需先了解一下对端数据库中那些LSA是自己所需要的(如果某一条LSA自己已经有了,就不再需要请求了)。方法是先发送DD报文,DD报文中包含了对本地数据库中LSA的摘要描述(每一条摘要可以惟一标识一条LSA,但所占的空间要少得多)。由于OSPF直接用IP报文来封装自己的协议报文,所以在传输的过程中必须考虑到报文传输的可靠性。为了做到这一点,在DD报文的发送过程中需要确定双方的主从关系。作为Master的一方定义一个序列号seq,每发送一个新的DD报文将seq 加一。作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的seq。实际上这种序列号机制是一种隐含的确认方法。如果再加上每个报文都有超时重传,就可以保证这种传输是可靠的。 RT1首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号为x。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。
路由器的状态变迁过程 4. RT2在收到RT1的DD报文后,将RT1的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RT2的Router ID较大,所以在报文中RT2认为自己是Master,并且重新规定了序列号为y。 5. RT1收到报文后,同意了RT2为Master,并将RT2的邻居状态机改为Exchange。RT1使用RT2的序列号y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中RT1将MS=0,说明自己是Slave。 6. RT2收到报文后,将RT1的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,需要注意的是:此时RT2已将报文的序列号改为y+1了。 7. 上述过程持续进行,RT1通过重复RT2的序列号来确认已收到RT2的报文。RT2通过将序列号+1来确认已收到RT1的报文。当RT2发送最后一个DD报文时,将报文中的M=0,表示这是最后一个DD报文了。 8. RT1收到最后一个DD报文后,发现RT2的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RT2也收到了RT1的最后一个DD报文,但RT1的LSA,RT2都已经有了,不需要再请求,所以直接将RT1的邻居状态机改为Full状态。 9. RT1发送LS Request报文向RT2请求所需要的LSA。RT2用LS Update报文来回应RT1的请求。RT1收到之后,需要发送LS Ack报文来确认。上述过程持续到RT1中的LSA与RT2的LSA完全同步为止。此时RT1将RT2的邻居状态机改为Full状态。
路由器的状态变迁过程 以上过程是两台路由器由相互没有发现对方的存在到建立邻接关系的过程。或者可以理解为网络中新加入一台路由器时的处理情况。当两台路由器之间的状态机都已经达到Full状态之后,如果此时网络中再有路由变化时,就无须重复以上的所有步骤。只由一方发送LS Update报文通知需要更新的内容,另一方发送LS Ack报文予以回应即可。双方的邻居状态机在此过程中不再发生变化。
维护路由信息(Maintaining Routing Information) 链路状态更新 当路由器A的链路出现故障时,发送链路状态更新到DR和BDR(其组播地址为:224.0.0.6) • 路由器用224.0.0.6通知DR • Router A notifies all OSPF DRs on 224.0.0.6
维护路由信息(Maintaining Routing Information) • DR和BDR利用组播地址224.0.0.5通知其它路由器(泛洪) • DR notifies others on 224.0.0.5
OSPF网络类型(OSPF Network Types) 广播Broadcast Multiaccess 非广播Nonbroadcast Multiaccess Frame Relay X.25 点到点Point-to-Point 点到多点Point-to-Multipoint
点到点链路(Point-to-Point Links) • 1.不进行DR选举 • No DR or BDR election required • 2. OSPF自动检测这种接口类型 • OSPF autodetects this interface type • 3. OSPF路由器之间的hello数据包每10秒钟发送一次,邻居的死亡间隔时间为40秒
广播型多路访问网络(Multiaccess Broadcast Network) • 进行DR选举 • 邻居只与DR和DBR形成邻接关系 • 每个路由器都与DR建立完全相邻关系。DR负责收集所有的链路状态信息,并发布给其他路由器。选举DR的同时也可选举出一个BDR,在DR失效的时候,BDR担负起DR的职责。 • OSPF路由器之间的hello数据包每10秒钟发送一次,邻居的死亡间隔时间为40秒。
非广播多路访问(NBMA) • 非广播多路访问(Non-Broadcast Multi-Access,NBMA)类型的介质包括运行帧中继、X.25、ATM等协议的网络。 • 对于NBMA网络,需要手工指定DR/BDR。之后,其运行模式将同广播网络一样。 • OSPF路由器之间的hello数据包每30秒钟发送一次,邻居的死亡间隔时间为120秒。
点到多点(PTMP) • 点到多点(Point to Multi-Point,PTMP)类型的介质包括运行帧中继、X.25、ATM等协议的网络。 • 在点到多点介质中,不选举DR/BDR。 • OSPF路由器之间的hello数据包每30秒钟发送一次,邻居的死亡间隔时间为120秒。
选举DR和BDR(Electing the DR and BDR) • 1.最高接口优先级的路由器被选成DR • The router with the highest OSPF priority is selected as the DR. • 2.最高路由器ID的路由器被选举成DR • Use the OSPF router ID as the tie breaker. • 3.DR选举不具有抢占性 • The DR election is nonpreemptive.
设置接口优先级(Setting Interface Priority) Router(config-if)# ip ospf priority number 1. 不同的接口可以指定不同的值 Different interfaces on a router may be assigned different values. 2. 接口优先级默认为1,取值范围是0-255 The default priority is 1. The range is from 0 to 255. 3. 接口优先级为0表示不参加DR选举 0 means the router is a DROTHER; it can’t be the DR or BDR.
OSPF基本配置(Configuring Basic OSPF) Router(config)# router ospf process-id • 启动路由进程 • Turns on one or more OSPF routing processes Router(config-router)# network address inverse-maskarea [area-id] • 用network命令ospf运行的接口,并将网络指定到特定的区域 • Router OSPF subordinate command that defines the interfaces (by network number) that OSPF will run on. Each network number must be defined to a specific area.