各位好,在论坛这么久,这是第一次发帖,肯定不免各种错误,请大神轻喷!最近在复习OSPF,因此打算发个帖子来提高自己,同时希望广大思科学者也能看了此贴之后有所提高吧,多的不说,正题开始!
OSPF是基于SPF算法的,由于跟RIP和EIGRP相比,在整个网络中每台运行OSPF的路由器都必须要知道整个网络的拓扑,所以有了区域的概念,所以让OSPF的链路有非常多的地方需要我们去学习和掌握。OSPF针对不同的网络拓扑设计出了非常多的网络类型以便我们在解决某个网络的时候采用不同的方案,因此机智的开发人员给出了多种不同类型的网络类型。
网络类型:
1.loopback>这种网络类型,它是专门为回环接口(loopback)而设计的,也就是说运行了OSPF的loobback接口的默认网络类型就是LOOPBACK,其他的任何类型的接口都不能修改为这个类型,但是改接口可以修改为任意其他的网络类型。在这种网络类型中,被通告出来的路由始终是以A stub network呈现的,而且是采用主机地址的掩码进行通告的,不过这个被通告的路由的掩码是可以进行手工修改的,在接口模式中ip ospf net point-to-point可以让我们通告的路由变成最初接口被配置的地址掩码。
2.p2p>这种网络类型主要是在serial接口中的默认网络类型,这种网络类型的hello是10s,没有DR/BDR选举的说法,因此在这种网络类型中OSPF的收敛速度会特别的快。当然这种接口的网络类型除了LOOPBACK意外,可以手工修改为其他任意的网络类型。由于改链路类型是能够发送广播、组播数据流量的,所以我们不需要neighbor指邻居。
3.broadcast>这种网络类型是在以太网口中的默认网络类型,也是支持广播、组播的数据流量,因此默认不需要neighbor指邻居,hello是30s,这种网络类型中是需要选举DR/BDR的,至于DR/BDR的选举下面再给出总结。
4.non-broadcast>这种网络类型是在帧中继中的默认网络类型,一看名字就知道,他是不支持广播和组播数据流量的,hello是30s,因此在FR中,我们必须要在至少一端neighbor指邻居,需要选举DR/BDR。在两端都运行OSPF的路由器,由于在一端收到另一端的组播hello之后,是能够得知目的的源ip地址的,因此这一端收到这个hello之后是能够回复一个单播的hello包给另一端的,因此,只需要一端指即可,但是建议是双方都指,因为在CCIE考试中是双方指是最妥的,这么一说大家都懂的,既然能指全一点,这样考试就不会对这一个点有什么疑虑了。
5.p2mp>这种类型是通过我们手工进行修改的,这种网络类型当然是支持组播数据流量的,因此建立邻居的时候也是不需要指neighbor,而起也是不需要选DR和BDR,hello跟我们的p2p是一样,都是10s,也只有这2中的hello time是10s,因此这两种网络类型的收敛相对会比较快。
6.p2mp-non-broadcast>这种网络类型也是不需要选举DR/BDR的,不支持广播、组播数据流量,需要手工neighbor,hello 30s.
这里需要注意的是,我们应该尽可能的让运行OSPF的路由器的网络类型都一致,因为不同的网络类型的hello time可能会出现不一致的情况,从而导致有可能邻居关系不能够建立起来,这里顺便复习一下OSPF邻居关系建立的几个必要的条件吧:
a.链路双方的hello time 必须一致,不然是无法进行hello数据包交互的,不然邻居不能正常的建立。
b.area id一定要相同
c.authentication肯定也是要相同的,这里需要注意的是,空密码也是要进行匹配的,也就是不论什么验证方式都要双向做才行。
d.stub area tag,一般在末节区域的路由器上面都会携带这个参数,所以末节区域的路由器都要配置成末节路由器。
这里需要注意的一点是,建议网络类型要双方都一直,不过也有双方的链路类型不一致的时候,邻居关系照样能起得来,但是不会交互SLA报文,所以即使成为了邻居关系,也不能正常是首发路由,至于在FR中,有一种模式是P2P连接P2MP的类型,这是一种spoke and hub结构,因此这种方式是可以建立邻居关系的,而且当且仅当spoke节点被配置为DR的时候,我们的整个FR中的链路交互才是正常是,因此在这种模型中,我们一般建议在所有的hub节点配置ip ospf priority为0,当这个只是0的时候不具有DR/BDR的选举权,因此这样的配置可以让spoke节点的路由器成为DR。
DR的选举:
第一步:比较ospf接口的priority,最大的成为DR
第二步:比较route id的大小,大的成为DR
route id的的选举,前提是在所有接口状态是up up的那些接口的IP地址进行比较。
第一步:loopback,接口地址最大的成为该路由器的route id
第二步:物理接口的ip地址,地址最大的成为该路由器的route id
OSPF的邻居状态机:
down:在这个状态中,路由器双方都还没有收到对方彼此的Hello报文,因此只是在尝试给对方发送Hello,试图去发现邻居。
attemp:就是在hello包发送出去不能被其他的路由器接收到,或者在FR的非广播访问网段中,不能通过组播进行发现hello,通过手工指neighbor来发送单播的hello试图建立邻居关系。
init:在这个状态中,其中有一方已经收到了对方的Hello包,但是在该hello包中没有发现自己的route id被对方列入,因此还在建立hello的交互。
2-way:在这个状态中,如果有是broadcast或者non-broadcast,此时DR/BDR的选举已经完成,而且双方都能在对方的Hello包中看到自己。
此时的邻居关系已经建立,但是要形成邻接关系,必须要进行LSA的交互,因此还要继续发送,LSR、LSU、LS-ack等报文,如果是Dother,则不需要进行LSA的交互。
Exstart:在OSPF邻居之间交互完成的LSA之前,必须要先发送DBD,LSR等数据包,但是在发送LSA之前必须要先确定一个规则,是谁先发,谁后发,因此在这个状态要选择出主路由器和从路由器,由主路由器开始发起。需要注意的是,主路由器是route id最大的,而不一定是DR,也就是选举主从路由器的时候不会考虑priority.
Exchange:这个状态就是交互DBD的时候,此时的DBD报文只是LSA的一些摘要信息,对方收到了这份DBD之后,会回复一个LSR的报文来告知对方自己需要哪些请求LSA的具体的报文信息。
Loading:在这个状态就是收到了LSR的数据包之后会给对方回复LSU报文,这个状态也就是所有的SLA信息已经开始在交互。
Full:这个状态就是双方都已经收到了LSA的中最后的LSU,双方的链路达到收敛状态。
因此总结:只有当邻居关系是在2-way和Full状态的时候邻居关系是正常的,其他的一切状态都代表邻居关系不正常。
OSPF不仅是由于网络类型影响到邻居的LSA,也定义了一系列的链路类型也会影响到邻居的LSA的交互。但是网络类型和链路类型是不会相互影响彼此的工作的。
链路类型:
1.stub network link
2.point-to-point link
3.Transit link
4.Virtual link
OSPF的外部路由;
在OSPF中也是通过过重分发的方式讲外部的路由引入到OSPF内部,此时重分发的路由器就是ASBR,此时的路由分为两种类型,在OSPF其他区域路由器中这些路由是以OE1 OE2的形式存在的,如果是NSSA区域进来的路由那么会用ON1 ON2 来表示这些路由,下面罗列出来他们的度量值的计算方式:
OE1:这种方式的cost计算是通过累加的方式,首先是一个外部路由重分发过来的一个默认的度量值,然后再加上内部其他区域到达该ASBR所需要的度量值组成。
OE2:这种方式的cost默认是20,也就是不会再去计算内部其他区域到达ASBR的cost,不管内部的开销是怎么样的,都不会去考虑他。
ON1:这种方式的cost计算和OE1一样,只是由于是特殊区域NSSA或者Totally nssa中重分发的,因此显示是ON1
ON2:这种方式的cost计算和OE2一样,只是由于是特殊区域nssa和Totally nssa中重分发的,显示是ON2
为什么会有这么多的度量值存在呢,我的理解如下:由于OSPF只支持等代价的负载均衡,因此如果有多条路径的情况下,可能存在次优路由的选择问题,在需要优先考虑去往外部路由开销的时候,我们会用OE2,因为这种类型的路由它是不会计较内部其他区域到达ASBR的开销的,那么OE2的默认开销都是20,那么此时就应该是用到达forward地址的cost来进行比较了,最小的cost最优,当然如果这个forward地址是显示为0.0.0.0,那么比较的才是到达ASBR的cost(forward地址如果在ASBR中有通告这个forward地址的网络进入OSPF进程,那么这话地址显示的就是这台路由器到达该路由的真实地址,如果这个地址的网段没有被通告在ospf进程,那么这个地址将被显示为0.0.0.0)。如果是要优先考虑内部区域的cost优先,那么是应该直接用OE1比较好,这样只是需要考虑两条链路到达ASBR的最小cost,最小的就是最优的那个路由。至于ON1和ON2,其实他们的选路原则跟上面是一样的。
OSPF的末节区域,一共是分为4类:
stub area(末节区域):在这种区域中,ABR会过滤来至于外部的external路由,当然该区域的所有路由器也是不能重分发外部路由进来的,也就是说这个区域的所有路由器将不可能成为ASBR,但是区域间的路由是可以传递的,由于该末节区域的所有路由器没有达到外部的路由,因此ABR会产生一条默认的全0路由下发到该区域。
totally stub area(完全末节区域):在这种区域中,ABR也会过滤来至于外部的external路由,该区域的所有路由器也不能成为ASBR,而且区域间的路由也将会被抑制,此时ABR也会下发一条默认的全0路由。
nssa(不是那么的末节区域):在这种区域中,ABR会过滤掉来至外部的external路由,但是这个区域可以重分发,也就是说能够引入外部路由成为ASBR,区域间的路由也可以相互传递。此时ABR不会下发全0的默认路由
totally nssa:(不是那么的完全末节区域):在这种区域中,ABR会过滤掉来自外部的external和区域间的路由,也可以重分发,成为ASBR,而且ABR会下发一条全0的默认路由。
OSPF的LSA类型,一共需要掌握的有1,2,3,4,5,7六种类型
LSA1:这种类型的LSA是区域内的路由器产生的,每台路由器都会产生这个类型的LSA,而且区域内的LSA的下一跳地址是ABR不能更改的。
LSA2:这种类型的LSA是区域间需要选举DR和BDR产生的一中LSA
LSA3:这种类型的LSA是ABR产生的,是ABR将其他的区域的LSA信息进行扩散到另外的区域的
LSA4:这种类型的LSA是由ABR用来将ASBR的route id告知内部区域其他路由器的LSA,这里面的route id是ABR进行修改的。
LSA5:这种类型的LSA是由ASBR产生的,其中的route id 是任何路由器都不允许进行修改的。
LSA7:这种类型的LSA是由NSSA或者TOTALLY NSSA区域的路由器重分发进来的,然后这些LSA如果要传给NSSA区域以外的其他区域的路由器,那么就要经过ABR的7-5转换后,变为LSA5之后再进行转发。Virtual link(虚链路):在OSPF网络中,所有的区域都必须连接骨干区域来进行通信,但是有些时候有些区域如果要跟骨干区域相连接但是却被中间的另外一个区域隔离,这样的情况下我们可以使用virtual link的方式将中间这个区域虚拟为骨干区域,virtual link的建立是在双方ABR上指定对端的route id来实现的,其中必须有一个ABR是连接骨干区域的。虚链路被认为是OSPF的一个接口,一个链路,所以也是需要建立OSPF邻居的,只是在这种情况下建立的邻居是没有hello包发送的。
Authentication:
1.基于接口的验证(明文和密文)
2.基于区域的验证(明文和密文),在开启了区域验证之后就相当于属于这个区域的所有接口的验证全部开启,所以区域的验证也是要在这个区域的所有路由器上面都配置相同的秘钥才能实现邻居的建立,这里需要注意的是,如果在骨干区域配置了区域验证,那么这时虚链路的验证也将被开启,由于虚链路上面没有Hello包的交互,因此必须重置OSPF进程之后才虚链路的认证才会生效。
OSPF Summary:
我们都知道,在OSPF同区域中的的LSA是不允许任何路由器进行修改的,也就是说在区域内的路由是无法进行汇总的,只有当ABR在发送区域间的路由的时候,可以在ABR上面进行汇总,但是对于external路由来说,ABR是不能对他进行汇总的,即使汇总了也不会有效果,有且只有ASBR路由器才可以对external路由进行汇总。
以上为粗略的一个总结,后续有空了再把关于OSPF实验里面应该注意的知识点、细节总结出来!
本文出自 “linux双网卡地址” 博客,请务必保留此出处http://xushaojie.blog.51cto.com/6205370/1668843
原文地址:http://xushaojie.blog.51cto.com/6205370/1668843