第八节OSPF(OpenShortestPathFirst,开放式最短路径优先)链路状态路由选择协议知识部分一、OSPF所具有的诸多特性1.将一个自治系统再分成若干个区域①减少路由器之间通告LSA的数据量,加速路由收敛②减少路由表和LSDB大小③将一个区域的网络拓扑改变所造成的影响尽可能的限制在本区域中,以缩小网络的不稳定性④每个路由器利用SPF算法,计算出本区域的路由信息,然后通过ABR(区域边界路由器)进行交换路由信息以计算区域间的路由,此时应该属于DV算法,为了避免环路的出现,则规定了严格的2层结构。由此可知,在OSPF网络中路由的汇总只能在ABR(区域边界路由器)、ASBR(自治系统边界路由器)上进行。划分区域的要求:a)骨干区域(区域0)本身必须连通(物理、逻辑--virtual-link)b)非骨干区域必须和骨干区域相邻(物理、逻辑--virtual-link)2.最小化的路由更新流量①链路状态路由协议只在网络拓扑发生变化时,才生成路由选择更新。当链路状态发生变化以后,检测到变化的设备将创建一个针对该链路的链路状态通告LSA(linkstateadvertisement)。使用一个特殊组播地址(224.0.0.5)将该LSA传播给所有的邻接(full状态)设备。每台路由设备都将得到一份LSA拷贝,更新它自己的链路状态数据库(linkstatedatabase,LSDB),并将此LSA转发给区域内的所有邻接设备。这种LSA的泛洪(flooding)保证了所有的路由设备都更新其数据库,然后更新路由选择表以反映新的拓扑结构。②以较低的频率(每隔30分钟)发送定期的更新,这被称为链路状态刷新。3.支持变长子网掩码(VLSM)、无类域间路由(CIDR)和非连续网络;4.支持手动汇总,默认时不进行自动汇总5.拥有不受限的跳计数(建议一个区域路由器不超过50台)6.允许多销售商的设备集成(开放的标准)。注:①使用距离矢量路由选择协议时,它们之间交换的是路由选择信息,路由器依赖于邻居的路由选择决策,路由器本身并不完全了解网络拓扑;②使用链路状态路由选择协议时,它们之间交换的是链路状态信息,每台路由器都完全了解整个区域的网络拓扑,能够准确的根据网络拓扑信息独立地作出路由决策。二、OSPF学习中的一些重要术语1.link(链路),指定给某一给定网络的一个网络或路由器接口。当一个路由器接口被加入到该OSPF的进程中时,它就被OSPF认为是一个链路。这个链路将指定给它一个状态信息(up或down)以及一个或多个IP地址。2.RID(路由器ID),一个用来标识路由器身份的32比特的整数。因为IP地址的唯一性,所以路由器上默认都选择某个接口的IP地址作为这个设备的RID。Cisco通过使用所有被配置的逻辑接口中数值最高的IP地址来标识此路由器,如果没有带有地址的逻辑接口被配置,OSPF将选择所有激活的物理接口中数值最高的IP地址作为其RID。路由器RID选举原则:①手工指定的最优先router(config-router)#router-idA.B.C.D手工指定RouterID的生效方法:a)重启路由器b)router#clearipospf[process_id]process重启OSPF进程②否则,优先选择OSPF进程启动瞬间处于活动的loopback接口的最大的IP地址如果希望一个新的Loopback接口的IP地址作为OSPF的RouterID,生效方法:a)删除OSPF配置,重新配置b)重启路由器③否则,选择OSPF进程启动瞬间处于活动的物理接口的最大的IP地址注:同一路由器上的不同OSPF进程的RID不能重复。3.neighbor(邻居,2-way状态),邻居关系的路由器之间一般只交换hello报文。这些路由器都有某个接口连接到一个多路访问的网络上,如两台连接在一个Ethernet链路上的路由器。4.adjacency(邻接,full状态),邻接是一种更深层次的OSPF邻居关系,形成邻接关系的路由器允许直接交换LSA信息(链路状态通告)。OSPF不像EIGRP那样直接的与自己的所有邻居共享网络信息。OSPF只与建立了邻接关系的邻居共享这些信息。并且不是所有的邻居都可以成为邻接,这将取决于网路的类型(多路访问还是点对点网络)、路由器上的配置(接口的优先级、RID数值的大小)以及路由器是何时加入此多路访问网络的。注:在多路访问网络中路由器的身份有DR/BDR/DROther,他们之间的邻居关系是:DR-----------DROther:邻接关系,full---交换LSABDR--------DROther:邻接关系,full---交换LSADR---------------BDR:邻接关系,full---交换LSADROther----DROther:邻居关系,2-way---不会交换LSA,只会定期的发送hello报文5.HELLO协议,OSPF的HELLO协议可以动态的发现邻居并维护邻居关系。HELLO数据包和链路状态通告(LSA)建立并维护着链路状态数据库(拓扑表)。6.邻居表(邻居关系数据库),列出所有已经与路由器建立其双向通信关系的邻居路由器。表中路由器的HELLO数据包是可以被相互看见的。每台路由器上邻居关系数据库管理着各种详细资料,如路由器ID和状态。7.拓扑表(链路状态数据库,LSDB),列出了包含来自某个区域接收到的所有链路状态通告(LSA)中的信息。每台路由器都使用本地的LSDB中的信息作为SPF(Dijkstra)算法的输入,并为每个网络计算出最短路径。8.路由表(转发数据库),列出了在链路状态数据库上运行一种最短路径优先算法所产生的路由。每个路由器的路由表都是不同的,其中包含了关于如何及向哪个接口发送分组到其他路由器的信息。9.LSA(链路状态通告),是一种OSPF的数据包(封装在LSU报文中),它包含有OSPF路由器中共享的链路状态信息。10.DR(指定路由器),DR/BDR的选举规则是根据{优先级,RID}来进行的。定义为具有高优先级接口的路由器将成为DR,次之则为BDR(备用指定路由器)。而当参加选举的所有路由器的优先级一样时,则根据路由器的RID来进行选举,RID数值较大的为DR,次之则为BDR。这里需要注意的是并不是优先级或RID最大的就一定可以成为DR/BDR,因为DR/BDR的选举有个时间限制,即OSPF协议启动后的40/120秒内为DR/BDR的选举时间(wait_time=death_time)。默认情况下所有路由器的优先级都是1。如果路由的优先级被配置为0,则它将不再参与DR/BDR的选举。另外补充一点实际上是先选出BDR,然后才产生DR。11.BDR(备用指定路由器),BDR将从OSFP邻接路由器上接受所有的路由更新,但并不泛洪这些LSA更新。需要注意的是在DR故障后,BDR将成为DR,并且会在此多路访问的网络中重新选举一个BDR。12.area(区域),一个OSPF区域是一组相邻的网络和路由器。在同一区域内的路由器共享一个公共的区域ID。由于一台路由器可以是多个区域中的成员,因此区域ID被指定给这台路由器上的某个特定的接口。这样路由器上的某些接口可能属于区域1,而其他接口则可能属于区域0。所有在同一区域内的路由器拥有完全一样的LSDB。不同的区域之间的路由器不能直接进行通信,他们必须通过一个被配置为区域0的主干区域间接的进行通信(这里的区域ID可以书写成点分十进制的IP地址的格式)。①内部路由器,所有接口同属一个区域的路由器;②区边界路由器(ABR),那些在一个AS内部用于连接主干区域(区域0)与其他区域的路由器就称为区域边界路由器。最理想的设计是,每台ABR只连接两个区域:主干区域和一个非主干区域。建议每台ABR连接的区域最多不超过3个。它在网络中扮演着至关重要的角色,它具有如下特性:a.分隔LSA扩散区;b.执行区域汇总;c.常常是默认路由源;d.维护其连接的每个区域的LSDB。③骨干路由器,至少有一个接口定义为属于区0的路由器。13.point-to-point(点到点),包含两台路由器直接连接的拓扑类型,这一连接为路由器提供了单一的通信路径。点到点连接可以是物理的(如通过串行电缆的连接)也可以是逻辑的(如帧中继的虚电路)。这种网络除去了对DR/BDR的需求,它们邻居关系的发现也是自动的。14.multiaccessbroadcast(广播型多路访问),就像以太网,它允许多台设备连接(或是访问)到同一个网络,它是通过投递单一数据包到网络中所有结点来提供广播能力的。在OSPF中,每个广播多路访问网络都必须指定一个DR/BDR。15.NBMA(非广播型的多路访问),像那些帧中继、X.25和异步传输模式(ATM)类型的网络。这些网络允许多路访问,但不拥有如以太网那样的广播能力。16.point-to-multipoint(点到多点),点到多点用于采用部分互联或星型拓扑的网络,在点到多点模式下,路由器将NBMA网络中所有路由器到路由器的连接视为点到点链路,即一个点到多点的链路我们可以将它看成是由多个点到点链路组成的。与点到点一样,这样的网络也不需要选举DR/BDR。17.ASBR(自治系统边界路由器),通常OSPF是运行在自治系统内部的,但是它也可以将多个自治系统连接起来。将这些AS连接到一起的路由器就被称为自治系统边界路由器。这里说提到的AS并非真正意义上的自治系统,更贴切的说自治系统边界路由器应该叫路由协议边界路由器。注:①DR/BDR侦听组播地址224.0.0.6跟224.0.0.5,而DROther侦听组播地址224.0.0.5。②OSPF只可以在代价相等的链路上进行负载分担。它不能像EIGRP那样在不等代价的链路上进行负载分担。三、OSPF路由器启动过程的7种状态1.down状态在down状态下,OSPF进程还没有与任何邻居交换信息,OSPF在等待进入init状态。2.init状态OSPF路由器以固定的时间间隔(通常10秒)发送类型1(hello)分组,以便与邻居路由器建立关系。当一个接口收到第一个hello分组后,路由器就进入到init状态,这意味着路由器知道有个邻居在等待将相互之间的关系发展到下一步。3.two-way状态每台OSPF路由器都使用hello分组试图与同一IP网络(或子网)中的所有邻居路由器建立two-way状态或者双向通信。hello分组中含有发送者已知的OSPF邻居列表。当路由器看到它自己出现在一台邻居路由器的hello分组中时,它们就进入two-way状态。two-way状态是OSPF邻居之间可以具有的最基本关系,但处于这种关系中的路由器之间是不能共享LSA信息的,要想了解其他路由器的链路状态并最终建立一张路由选择表,每台OSPF路由器必须至少建立一个邻接关系,它是OSPF路由器之间的一种高级关系。多路访问的网络类型中关于DR/BDR的选举就是在这个状态下进行的,所以我们会看到它们在这个状态下停留较长的时间。4.exstart当路由器进入到exstart状态后,它们之间的会话就表征为一种邻接关系,exstart状态是用类型2(DBD或DDP)建立的,两台邻居路由器用第一个DBD分组来协商它们之间的关系中谁是“主,Master”谁是“从,Slave”,有较高OSPFRouerID的路由器将成为“主”,当邻居路由器建立了它们之间的主从角色后,它们就进入了exchange状态,并开始发送DBD报文。5.exchange在exchange状态下,邻居路由器使用类型2的DBD分组来相互发送它们的数据库摘要信息。换句话说,路由器相互描述自己的链路状态数据库内容。路由器将它们所学习到的链路状态信息与对方发送的数据库摘要信息进行比较,如果任何一台路由器接收到不在其数据库中的某些链路信息,该路由器就向其DBD报文的发送方请求有关链路的完整更新信息。完整的LSA信息在loading状态下交换。6.loading状态在相互描述过各自的链路状态