该文针对OSPF进行一个全面的认识。建议了解OSPF的基础后进行本文的一个阅读能较好理解本文。
OSPF基础的内容请查看:网络安全之动态路由OSPF基础-CSDN博客
OSPF中更新方式中的触发更新+30分钟的链路状态刷新。是因为其算法决定的,距离矢量型协议是边算边传,边传边算的方式,好处就是网络结构经常改变的话,不管怎么改变都能判断出最新的网络状态。不管触发更新多少次只学习最后学习的一次。OSPF是先传递后运算,需要把所有的LSA收集起来再计算,无法判断哪个是最新的哪个是旧的,链路状态型协议就有一个很大的问题新旧LSA比较,为了比较新旧LSA,OSPF就有一个直线型序列空间,序列号最大的最新,但有个问题,序列号空间是有限的,只有32bit。后面又有一个循环序列空间,循环使用序列号,但又无法判断新旧,故此又有了个循环序列空间+直线型序列空间,棒棒糖型序列空间,棒位直线型序列空间,糖为循环序列空间……但都不是永久的是暂时的,所以就有了30分钟的链路状态刷新。
OSPF为了适用于较大型网络中就要划分区域,划分区域都是为了减少LSA数量和减少LSA的传播区域。也就是OSPF的优化为了提高性能。真正的OSPF单个区域是链路状态型协议(要传拓扑信息),区域与区域之间就是距离矢量型协议(不传拓扑信息),不然也会出环。
OSPF是基于接口划分,也就是OSPF要工作,链路两端的接口必须在一个区域,所以也可以说是基于链路划分的。
其角色中骨干路由器、非骨干路由器很好理解,ABR区域边界路由器与ASBR自治系统边界路由器更准确的区分方式就是ABR是能够产生3类LSA的路由器,ASBR是能够产生5类或7类LSA的路由器。
在实际中设备选择ABR与ASBR设备的性能是最高的。其次是骨干路由器,接着才是非骨干路由器。
OSPF邻居状态机制与OSPF的状态数据包:
OSPF消息数据包:Hello打招呼的, DBD数据库的描述报文, LSR 链路状态请求,LSU链路状态更新, LSACK链路状态确认。
OSPF数据包是基于IP封装,传递不可靠,OSPF没有选择周期更新而是触发更新所以通过确认重传保证可靠性。
Hello包:
环境如下:
对R1进行抓包发现状态包都有了;
现在我们查看hello包。
Hello包的目的是建立并维持OSPF邻居关系(邻居关系建立之后充当保活包功能)。
Init:初始化状态,一旦开始发送hello报文,进入初始化状态。
two-way:双向通信状态(邻居状态),接收到包含自己router-id的对方hello报文。
邻居关系建立条件:
1.router-id必须不同。
2、area ID相同。
3、认证:认证类型(不认证=0 明文认证=1 MD5=2)认证数据。
4、hello时间,dead时间必须一致。
5、特殊区域标识一致(E(外部路由位)=1;N(NSSA外部路由位)=0;P=0).
6、MA网络中,网络掩码必须一致。
7、必须同时使用单播或组播更新。
8、更新源检测(双方的IP地址必须在同一网段)。
在AR1发送hello包后就进入Init初始化状态,AR2发现AR1发来的hello包含自己的router-id则进入two-way community双向通信状态(AR1同理)。
two-way状态下MA的网络进行选举DR(指定路由器)和BDR(备份指定路由器);
DR选举:1、比较优先级(范围0~255,默认优先级为1,越大越优)。2、比较各自的router-id,越大越优。(注意:1.DR抢占式关闭的。2、DR是一个接口概念。3、优先级范围0~255,数字0代表不参与选举。4、先选举BDR,再升级为DR)如上图中就可以看到BR是12.1.1.2,BDR是12.1.1.1。
exstart预启动状态:(邻居状态建立了,LSA还没有发送),在R1,R2正式发送LSA信息前会互相先发送一个LSA目录,只针对自己不知道的LSA进行请求(查重LSA信息)。发送的是BDB报文进行主从选举。一旦发送DBD就进入预启动。
exchange预交换:主从选举完成,发送LSA目录,发送LSR就进入exchange。
loading加载:学习LSA的状态,即发送LSU报文
接着就是LSACK包:
以上OSPF消息数据包一共有五个,hello,DBD,LSR,LSU,LSACK。
其中需要确认的除hello包都需要确认来保证可靠性,因为hello周期性发送保证了可靠性。DBD是使用DD序列号确认,LSR需要LSU将LSR请求的LSA名称信息发送回去确认,LSU需要LSACK将LSU包含的的LSA名称发送回去确认,LSACK使用隐式确认。
full邻接状态:自己判断,LSA同步,R1将R2的LSA全部学完,R2同理。怎么判断学完了,比如R1要学习R2LSA,在开始时R2给R1发送了一个LSA目录,R1从中查找自己没有的LSA生成一个请求列表为自己要学习的LSA,针对请求列表里的LSA进行LSR请求,R2中生成一个重传列表,将R1要学习的LSA放进重传列表,R2发送一个LSA给R1,R1收到了将其对应的LSA冲请求目录中删除,由隐式确认,R2收到ACK则从重传列表删除。R2请求R1LSA同理,都有一个重传列表和一个请求列表,当两张表清空时变为full状态。
由上可知链路状态一共有六种状态(以下状态是双向的):
1、init——初始化(一旦发送hello包进入该状态)
2、two-way community——双向通信状态(邻居)(收到对方的hello包中包含自己的router-id和activity number则进入该状态)
3、exstart——预启动(进入two-way后判断自己需不需要选举DR和BDR,不需要则立即发送DBD报文进入该状态,若需要则需要等待一个死亡计时器40S或120S,到时之后发送DBD进行主从选举)
4、exchange——预交换(主从选举完成立即进入该状态,并互相发送LSA目录,立即发送LSR接收对方的LSU)
5、loading——加载(一旦收到LSU就进入该状态)
6、full——邻接状态(请求列表和重传列表清空进入该状态)
扩展:
down状态:一般是看不到的,以前建立过邻居邻接状态,突然有个邻居建立条件不匹配则出现down。
卡在init状态在一个dead时间没有进入下一个状态会退到down状态。
卡在two-way状态有可能是在选DR和BDR的网络中一直没有选出DR就会持续卡在该状态。
卡在exstart状态是因为mtu不一致问题,一方mtu大一方小,则大的一方会进入exchange状态,而小的一方会一直在extart状态,所以,卡在exchange状态也是mtu问题导致的。
卡在loading状态是因为LSA无法同步,1、设备性能弱无法接收完LSA,会导致设备一直崩溃重启。2、弱性能设备上限制了LSA的学习数量,导致无法学习完LSA(这一个原因是更常见的原因)。
正常持续稳定的停留的状态为two-way和full。停留在two-way时是两个Dother与Dother之间会永远停留在该状态。
还有一个attempt尝试/过度状态只有在NBMA网络中可能出现,因为其不能主动建立连接,只有我们手动配置peer(不能主动建立OSPF邻居的网络中可能出现)。
———————————————————————————————————————————
OSPF router-id选举规则:1、手工指定最优先。2、选举所有逻辑中IP地址最大的。3、选举所有物理接口IP地址最大的。
华为中若以上三点不满足,则可以创建router-id为0.0.0.0:在使用逻辑或物理接口IP地址时,接口可以时关闭状态;若一台路由器启用了多个OSPF进程,不同进程可以使用相同的router-id(不推荐)。
思科中若以上三点不满足,则无法启用OSPF:在使用逻辑或物理接口时,接口必须双up,该接口可以不通告进入OSPF中:同一路由器上多个OSPF进程的router-id必须不同。
OSPFv2——LSA:1、2、3、4、5、7类
环境如下(其中R2与R4的loop back接口宣告在area0中):
在R2与R4中查看OSPF邻居情况:
邻接建立成功,LSA完全同步,现在查看LSA种类。
怎么描述一条LSA:1、LSA类型。2、link-id链路标识符。3、ADVrouter 产生路由器
查看链路状态数据库表,但dis ospf 100 lsdb查看的是一个LSA的目录表并不是一个完整的。我们要看详细的表就需要分别去查看详细的LSA1、2、3、4、5、7,才能查看出完整的LSA。
以上link-id中有的是router-id,有的不是router-id。ADVRouter是产生该LSA是哪个路由器的router-id。这三个信息标识同一个LSA。如果另一个LSA的标识符与这三个不同就是不同LSA,相同则是同种LSA。
一类LSA:router-LSA。
功能:本路由器针对某个区域产生的路由信息和拓扑信息(因为OSPF是一个状态型路由协议),比如该拓扑中R1的所有都在area 1中,所以R1针对area 1中只产生一条LSA而这条LSA包含了R1在该区域的路由信息和拓扑信息,R2针对area 1区域产生一条LSA,在area 0中也产生一条一类LSA,但这两条一类LSA不一样,area1中是R2在area1中的路由信息与拓扑信息,area0中是R2在area0中的路由信息与拓扑信息,所以在area1中有两条一类LSA。所以在R1中查看链路状态数据库中R1与R2产生的一类LSA都只有1条。
在R2中查看链路状态数据库,则R2在area 1与area 0中都产生了一条一类LSA,所以R2一共产生了两条一类LSA。
传播范围:只在本区域内传输(终止于ABR)。
link-ID:产生者的router-id。
ADV router:产生者的router-id。
特性:在单个区域中分别产生一条一类LSA,若存在MA网络,1类LSA不完整,需要配合二类LSA生成路由信息以及拓扑信息。
一类LSA的详细信息:
在R2中查看一类LSA。
若要查看准确的一类LSA信息,则需要在dis ospf lsdb后跟上链路状态标识符(即link-id)。
一类LSA内容类型:
1、stubnet(末节网络)——路由信息
2、transnet(传输网络,仅限于MA网络)——拓扑信息
3、point-to-point——拓扑信息
4、virtual link(虚链路)——拓扑信息
综上,一类LSA的特性为在单个区域中分别产生一条一类LSA,若存在MA网络,1类LSA不完整,需要配合二类LSA生成路由信息以及拓扑信息。
二类LSA:network LSA,网络LSA。
功能:用于在MA网络中,描述本网络路由器的数量以及本MA网络的网络掩码。
传播范围:只能在本区域之内传输,终止于ABR。
link-id:DR接口的IP地址(只能由MA网络中的AR产生)。
ADV router:DR所在路由的router-id。
特性:只会出现在MA网络,用于补充一类LSA(1、MA网络的掩码。2、MA网络路由器的数量)。
若我们不知道这个网络拓扑图,只能登录R2设备,我们可以通过查看其收集到的一类LSA和二类LSA就可以知道这个网络拓扑。
上图中初步知道了R2为area 1与area 0的ABR和其对方的接口IP为MA网络类型,然后再查看12.1.1.1与23.1.1.2发现它们路由器的router-id为91.1.1.1与93.3.3.3网络掩码为255.255.255.0.
接着再查看91.1.1.1与93.3.3.3的链路状态数据库:
以上知道了91.1.1.1与93.3.3.3的环回路由信息,还知道了93.3.3.3还通过34.1.1.1这个接口连接到了其他路由器。接着就查看34.1.1.1。
发现到了area 0区域中还有个94.4.4.4的路由器,得知93.3.3.3这个路由器为骨干路由器接着继续查看94.4.4.4。
以上我们就通过在R2上查看一类LSA和二类LSA就发现了以下的一个路由结构:
但area1学不到area0和area2中的路由信息,area0和area2同理。学不到其他区域的路由信息,此时就需要三类LSA。
三类LSA:summary LSA 汇总LSA。
功能:用于在区域之间传递路由信息。
link-id:传递路由的网络号。
ADV router:(可能有多个)默认为所在区域ABR的router-id。
area1中的ADVroute为R2的route-id,area2为R4的router-id,area0中的ADVrouter进入area1中为R2的router-id,进入area2的为R4的router-id。
特性:在穿越不同区域时,由其他的ABR重新产生(ADV router是变化的!!!)
在R2上查看链路数据库就可以发现在area0中ADVrouter为link-id所在区域的ABR的router-id,以及其他区域的进入到另一个区域的ADV router为另一区域的路由的router-id,就如同该拓扑中area0和area1中的路由拓扑信息进入area1,则这些信息的ADVrouter在area1中就是R2的router-id。
在骨干区域中的路由器查看就可以发现其他区域进入该区域的路由拓扑信息的ADVrouter就是其他区域的ABR的router-id。
比如我们要在R2上具体查看12.1.1.0的三类LSA:
R3收到12.1.1.0这个网段时,开销值为R3到area1的ABR的开销值加上该ABR到这个网段的开销值,R4同理,但R5不是,因为跨区域了。
当R2针对area1中的路由传递到area0中没有任何问题,但当传给area2中时,要由area2的ABR要重新产生,即当路由传给R5时,R5只需找R4就行。即R5到12.1.1.0的开销值为R5到area2的ABR的开销值加上R4到R2再加上R2到12.1.1.0的开销值。因为area2区域中的路由器除了ABR知道92.2.2.2的存在,其余路由器都不知道,所以学习了跨区域的路由也不知道其ABR是谁,所以需要由不同区域的ABR产生新的ABR传给自己区域中的路由器进行学习该路由。
五类LSA:外部LSA。
功能:用于在整个OSPF中传递外部路由(原本不属于OSPF域)。
五类LSA有两种类型:类型1 类型2(区别:类型1开销值在OSPF中传播是增加的,类型2开销值传播时不变 )。
link-id:传递外部路由的网络号。
ADV router:产生该LSA的router-id(产生本LSA的router-id)。
传播范围:在整个OSPF域中传播。
如下,在R5下面又运行了一个RIP,RIP配置请查看RIP小实验配置及缺省路由下发-CSDN博客:
做完RIP还得在R5上将rip路由引入OSPF:
然后在R1上查看就可以查看到学习到了R6的路由:
能学习到这个路由是靠的五类LSA,是在R5上产生的。
查看R5上的链路数据库就发现多了类型为External的LSA,这就是五类LSA(外部LSA)。
查看五类LSA,里面有俩个路由信息,6.6.6.0和56.1.1.0的。我们再单独查看6.6.6.0的五类LSA路由信息。
其中不管在R1还是R4上查看这个五类LSA的开销值都为1。二类型的五类LSA在链路中传播时开销值不变,现在我们将五类LSA类型改为1并查看6.6.6.0,开销值不变,类型变为了类型1,开销值R4上查看变为了2,R3上变为了3,R2上变为了4,R1上变为了5。所以类型1的五类LSA,在整个OSPF中传播时,其开销值是增加的,默认值为1。这就是五类LSA类型1与类型2的区别。
其中的forwarding address为转发地址,正常的大部分的五类LSA为0.0.0.0。如果转发地址中有地址就需要注意了。
tag为路由标识,没有属性意义。
五类LSA在使用时会出现问题,如图中,五类LSA的ADVrouter为R5。当R5将这个LSA传给R4时,R4要找到6.6.6.0就要先找到R5,所以R4要计算到6.6.6.0的开销值就将R5到达6.6.6.0的开销值与自己到R5的开销值相加就行。当R3要查找6.6.6.0就要找到R5,但找不到R5,所以无法加表,R2,R1同理,都找不到95.5.5.5在哪,但是实际上又加表了,这就是靠的四类LSA。
四类LSA:summary ASBR LSA
功能:除了ASBR所在区域外,用于通告ASBR位置。
link-id:ASBR的router-id
ADV router:默认ASBR所在区域的ABR的router-id。
特点:在穿越不同区域时,由新的ABR重新产生。(与三类LSA一致)
例如在R4上查看四类LSA。
查看四类LSA,里面开销值为1,这个开销值由ABR到达ASBR的开销值决定。
R3要到6.6.6.0,就得找到R4,R2也得找到R4,而R1要到6.6.6.0得找到94.4.4.4,找不到R4,所以在跨区域时要由新的ABR重新产生,R2上就有两条LSA,一条学习的,一条自己产生的。
R1要到6.6.6.0就得先找95.5.5.5,找95.5.5.5就得先找到R2,R2再找到R5,开销值就是这三者之和再加R5到6.6.6.0的开销值。所以该拓扑中开销值为5
扩展:
———————————————————————————————————————————
某一个路由器网络不稳定,进行了几次的触发更新,每次更新都产生了LSA,其他路由器收到了好几条LSA,所以需要比较出谁是最新的。
LSA的新旧比较:
LSA中存在3个参数用于LSA的新旧比较;LSA age为3600秒的LSA都是最优的因为到时间就消失了,实际上在真实环境中真正消失的时间是3600零几秒。
1、序列号:
直线型序列空间——ISIS
循环型序列空间
棒棒糖型(直线型+循环性)迪杰斯特拉型序列空间
2、校验和:若是LSA序列号相同,就比较校验和,每次的age不一样,校验和就不一样,校验和越大越优。
3、LSA老化时间(若以上相同,LSA age之差小于15分钟,越小越优。若大于15分钟,则无法比较认为都是最新的):若序列号和校验和都一样则比较LSA老化时间。
———————————————————————————————————————————
因为七类LSA只在特殊区域中产生,所以关于七类LSA的演示在本文后面的特殊区域中会讲解。目前先提及以一下。
7类LSA : NSSA LSA
功能:在NSSA区域中,传递外部路由。
Link id :传递路由网络号
ADV router:产生该LSA的router-id
特性:默认为类型2 ,度量值为1 。携带了FA地址(转发地址)
FA: 转发地址,当5类或7类LSA中携带了FA地址,则计算路径开销值时计算的是 当前路由器到达FA地址的开销值之和+种子度量值。(若FA地址不可达,则路 由不能加表)
FA 地址: 1、默认7类LSA 产生FA地址,5类LSA不产生的(7转5 的5类LSA 携带FA地址) 2、7类LSA
产生规则:默认产生的FA地址为产生7类LSA 的ASBR 最大的环回接口地址;若连接其他协议的接口也运行了OSPF协议,网络类型为BMA,则产生 的7类LSA中FA地址为连接其他接口对应的下一跳地址;若网络类型为P2P,则 FA地址依然为环回接口中IP地址最大的 3.5类LSA FA地址规则:默认不产生,若连接其他协议的接口运行了OSPF 协议 并且网络类型为BMA,则FA地址为重发布之前路由的下一跳地址,若网络类型 为P2P,则不会产生FA地址。
OSPF中的计时器:
1、hello时间:默认为10秒或30秒,dead时间,默认为40秒或120秒。
修改hello时间,dead时间变化,修改dead时间,hello时间不变,hello时间或dead时间不同都会影响邻居关系建立。
2、waiting time:等到DR或BDR的选举时间,永远保持与dead时间一致。
修改hello时间并再次查看:可以发现修改hello时间,dead时间也会被自动的修改为hello的四倍时间。
再查看接口状态发现只有一个接口连接,另一个接口断开,因为hello时间dead时间不一致了。然后我们再次修改hello时间为10秒,另一个接口邻居关系也回来了。
修改dead时间:发现hello时间没有被影响,邻接关系也断开了。
综上,修改hello时间和dead时间都会影响邻接关系的建立,修改hello时间,dead时间会自动改为四倍hello时间,修改dead时间,hello时间不受影响。
在思科厂商的设备中里面还有个wait时间,这个wait时间不能修改,会永远随着dead时间变化(wait时间是等待DR,BDR的选举时间)dead时间是多少,wait时间就是多少。
其中的pull时间(轮询时间):当邻居关系进入down状态时,不能再去发送高速(hello时间10秒去发送)的hello包,而是采用pull时间去发送hello包建立邻居关系。
retransmit为重传时间:默认为5秒,在OSPF中发送数据包,需要进行确认没有收到确认时就重传,重传时间为5秒,重传到邻接关系断掉为止。重传时间也能修改:
transmit delay :传输延时,默认为1秒。比如,R2产生了一个LSA,刚产生LSA时有一个LSA age,R2就与其他路由器在一段时间内建立邻接关系,在给对方传递LSA时,这个LSA也有个age,比如为50秒,在传的时候,传递的LSA里面显示的就是50秒,也就是说,发出这个LSA那一时刻起这条LSA活了50秒,将这条LSA从链路数据库中提取出来放在接口传递给对方,对方接收再查看链到LSA时,如果还是50秒,这中间就有个时间差,所以OSPF所有接口都有一个传输延时。可以修改;
以上就是OSPF中常见的几个计时器。
OSPF网络类型:OSPF针对不同物理接口的特性,它的OSPF协议工作模式有所不同,导致了OSPF不同的接口有了不同的工作方式(有的可以自动建立邻居,有的不能自动建立邻居,有的靠组播,有的靠单播,有的DR建立邻居,有的BDR建立邻居等)。
loopback:在OSPF中,我们看不到一个接口网络类型为环回网络类型。我们将环回接口通告到了OSPF网络的某个区域中,OSPF识别到是环回接口,就以三十二位主机路由通告到路由协议中,这其实就是环回网络类型的体现。其他网络类型没有这样的东西。但是在华为的设备中我们是看不到的,在接口里面我们只配置了环回IP没有做任何东西,按理来说其默认网络类型为环回网络类型,在思科设备中我们查看接口网络类型为loopback,而在华为中显示为P2P类型。环回网络类型体现在几点上;1、Type(类型)为loopback。2、这个接口路由在向外传递时通告时是以三十二位主机路由的形式传递。3、环回网络类型是没有hello时间dead时间的(因为OSPF都识别到是环回接口,只有自己一个用户,不需要与其他路由建立邻居)。在华为中显示的为P2P形式,虽然是显示的P2P形式,但是环回网络特点是直接执行的,只是没有说而已,直观的就是学到的环回路由是以三十二位主机路由学习。环回接口的网络类型我们是不能把一个正常的接口网络类型修改为环回网络类型,思科中就算有环回网络类型也只能是环回接口成为环回网络类型。华为中没有loopback的命令。也就是说,一个正常接口网络类型除了不能修改为环回网络类型,其他的网络类型都能修改(思科中有,华为是没有环回网络类型)。
注意:loopback接口默认OSPF网络类型为P2P,但是生成路由的网络掩码默认为32位(还原真实网络掩码,思科中修改类型为P2P,华为中修改为BMA类型(改为broadcast类型)),并且cost为0(cost不会因为参考带宽或者接口带宽变化而变化)。
将接口网络类型修改为broadcast类型,后还原为真实的24位网络掩码。其传递的LSA也会改变。
如果我们在环回接口中要还原真实的网络掩码,就要都修改为broadcast类型,在华为中只能修改为broadcast类型。正常接口开销值为参考带宽除以真实带宽,华为环回接口开销值默认为0(与接口带宽与参考带宽没有任何关系,也就是不管去修改环回的接口带宽还是调整参考带宽环回默认cost值为1,这个默认cost值是可以修改的,但是不能去修改接口带宽或参考带宽去变化,而其他物理接口是可以的)。
1、P2P——点对点:
物理接口:HDLC(高级数据链路控制协议,默认为P2P) PPP(点对点协议) GRE MGRE FR点对点子接口
hello时间:10S
是否选举DR:不选举
是否自动建立邻居:自动建立
特性:无(因为只需要一类LSA)
2、BMA——广播多路访问网络:
物理接口:以太网(默认为BMA)。
hello时间:10S
是否选举DR:选举DR
是否自动建立邻居:是
特性:产生的一类LSA不完整,需要二类LSA补充
3、NBMA——非广播型多路访问网络:
物理接口:FR-帧中继(物理接口,多点子接口) ATM-异步传输网络 (思科中的MGRE)
hello时间:30S
是否选举DR:选举DR
是否自动建立邻居:否(建立邻居需要手工指定peer,思科中单边指定就可以,华为需要双方同时指定)
网络部署类型:1、full-mesh 2、part-mesh 3、hub-spoke
在hub-spoke网络中,若默认网络类型为NBMA:1手工指定peer。2、控制DR位置,不得出现BDR。3、spoke之间互相映射(PVC)
4、P2MP:
物理接口:无
hello时间:30S
是否选举DR:不选举
是否自动建立邻居:自动
特点:将物理接口IP地址以32位主机路由的形式传递进入OSPF。
5、V-link(后续在提及不规则区域时讲解)
扩展:DR与BDR
———————————————————————————————————————————
DR:指定路由器。在一个多个路由器组成的MA网络中,路由器建立OSPF,可能会产生大量的邻居会发送很多的OSPF报文,这些报文会造成链路带宽资源和设备资源的大量占用,DR就是用来处理转发这些报文的,其他路由器就不用转发报文从而减少资源的占用。当网络类型更新时,DR会将更新信息发送给其他所有路由器。
BDR:备份指定路由器。用于监测DR的状态,当DR故障了,BDR就变为DR继续执行DR的工作。
DR与BDR选举中,先选举的是BDR,再从BDR中选举出DR。
DR选举: 1、比较优先级(范围:0-255,默认优先级为1 ,越大越优) 2、比较各自的router-id,越大越优。注意:1、DR抢占是关闭的。2、DR是一个接口概念。3、优先级范围 0-255,数字为0代表不参与选举。4、先选举BDR ,再升级为DR。
如果路由器的优先级一致且没有指定router-id,选举BDR的条件是先比较路由环回地址。如果路由器没有配置环回接口,则会比较所有物理接口上的IP地址,并从中选择最大的一个IP地址作为router-id来参与选举
不同的网络类型能和否建立OSPF?比如P2P,BMA能否建立邻居关系?
P2P与BMA的hello时间,dead时间都为10秒和40秒,router-id,认证数据之类的是一致的,所以可以建立邻居。但是路由加不了表。因为spF算法运算会失败。
所以看是否能建立邻居,先看hello时间和dead时间能否一致。一致则看网络类型能否自动建立邻居,若是两边都能自动建立邻居,则不管两边是什么网络类型,都能自动建立邻居。再看路由能否加表,如果双方都进行DR和BDR的选举,则路由能加表,若是有一方没有进行选举,能学习到对方的路由信息,但是不能加表到OSPF路由表中。
———————————————————————————————————————————
OSPF认证:链路认证、区域认证、虚链路认证。
在OSPF中默认不做任何认证。
链路认证:
将G0/0/0接口设置为MD5明文认证,密码为huawei,并将其接口类型改为了P2P。注:设置了一段接口的认证,另一端也要做认证,否则两端会因为认证方式不同导致无法建立邻居。
区域认证:
在area1上进行MD5的密文认证,密码为huawei
虚链路认证(在后续提及虚链路时讲解)。
OSPF LSA限制:1、划分区域。2、特殊区域。3、LSA汇总。4、LSA认证。
拓扑图依然为:
特殊区域:
1、stub区域:末节区域(或叫末梢区域)。
末梢区域能做什么,比如上图中的area1区域(没有连接外部其他协议,是一个普通区域),R1会收到1、2、3类LSA,如果网络过于复杂,过于大,R1接收到的LSA就会特别多导致无法正常工作。这时我们就要在area1中减少一些LSA,一二三类LSA是本身就要产生的LSA,五类LSA不可控,是外来的,五类LSA被限制了,四类LSA是给五类LSA做补充的,所以四类LSA也顺便被限制了。所以stub区域就是限制四类五类LSA不能出现四五类LSA的区域。因为非骨干和非骨干之间互相学习路由必须得依靠骨干区域area0,所以一旦area0区域做成了stub区域,就导致了非骨干区域无法出现四五类LSA,所以stub区域可以做在任何的非骨干区域,而骨干区域area0不能做成stub区域。
如果一个区域做了stub区域,那么边界设备ABR上就会自动产生一个缺省三类LSA(目的就是要和其他AS网络通信)。
综上,一旦做成stub区域:1、不得出现四五类LSA,stub区域不能进行重发布,不能存ASBR。2、stub区域边界ABR会自动产生三类缺省LSA,保证stub区域路由器与外网保持通信。3、特殊区域不能使用虚链路。4、stub区域不能为骨干区域。5、若设置stub区域,存在该区域的所有路由器都必须设置。
先查看R1上得LSA信息,有五类LSA。
直接输入stub,就设置为了stub区域。
再次查看邻居关系,都没有了。
所以R2上也要设置为stub区域。
然后再在R1上查看LSA与邻居状态,五类LSA没有了,只有一二三类LSA,且多了一个缺省得三类LSA开销值为1,且邻居关系又建立成功。
2、totally stub:完全的末节区域,在stub区域上由ASR过滤三类LSA,只保留三类缺省LSA。
所以只需要在stub的ABR上过滤就行。
在ABR上干掉三类LSA,stub no-summary,即stub区域上没有三类LSA。
在R1上查看LSA,三类LSA只有缺省三类LSA了。
3、NSSA区域:(not so stub area)非完全末节区域。
这个NSSA区域首先是个末节区域,但是又有点特殊,做末节区域是不想接收四五类LSA,但是自己这个末节区域又想进行重发布,所以就有了一个区域就是非完全末节区域,是末节区域但是又没有那么末节区域的区域。
就比如该拓扑中的area2,不允许出现四五类LSA,但是area2中的rip是允许重发布的,因为area2中的路由器以及学到了很多的路由,认为重发布进来的路由数量它能够大概的控制,能够接受的了。但是area1,area0或其他区域中重发布进来的的路由,LSA数量可能很多,可能会超出area2中路由器的承受限制,在这种情况下就用到了NSSA区域。
因为不允许出现四五类LSA,但是又要重发布其他协议的路由,这时不能用到四五类LSA,就要用到了我们的七类LSA。所以七类LSA就是在NSSA区域中用来传递我们的外部路由。
NSSA区域特点:1、过滤四五类LSA。2、边界ABR自动产生七类缺省LSA(默认度量值为1).3、允许进行重发布(允许出现ASBR),产生七类LSA。
比如现在将area2做成stub,外部路由传入area2将以七类LSA的形式重发布进OSPF
如果要做NSSA区域,区域内所有路由器都要做,且特殊区域标识都要相同(默认情况下也就是正常区域什么都不做允许五类,不允许七类E=1 N=0。当做了stub区域不允许五类和七类,则E=0 N=0。如果做的是NSSA区域不允许五类,允许七类,则E=0 N=1)。这里的N就是是否支持七类LSA,E就是是否支持五类LSA
现在我们将area2做成NSSA区域:
在R4上做NSSA并查看邻居连接情况发现R4与R5的邻居连接关系没了。
在R5上做NSSA后,再返回R4上查看邻居关系,发现R5的邻居关系回来了。
然后我们在R4上查看LSA表,发现还有五类LSA
但在R5上查看没有五类LSA了,只有一二三类和七类LSA以及R4产生的缺省七类LSA。
为什么R4上还有五类LSA,是因为R4是ABR,不仅仅是area2中的设备还是area0的设备,而R5完完全全就是NSSA区域中的一个普通路由器,所以R5中没有五类LSA,只有七类LSA。所以,NSSA区域没有五类LSA,只有七类LSA和ABR产生的缺省七类LSA。如果area2中还有更多的路由器,则都可以学习到R5上的路由。
area1和area0中的路由器能学习到RIP的路由,但是area2中的七类LSA并不能进入普通区域中,所以area0中的设备就学不到NSSA中所重发布的路由。但是普通区域不允许七类LSA出现,但允许五类LSA,所以在NSSA的边界设备ABR上就需要将七类LSA转换为五类LSA,这样一来其他的普通区域中就可以收到五类LSA从而对NSSA区域中重发布的外部用户进行一个通信。这就是为什么在R4上能查看到五类LSA的原因,这些五类LSA就是R4将七类LSA转换为的五类LSA。
在R4中五类LSA有重复的,是因为age时间大的是该区域还是普通区域时产生的LSA,在成为NSSA区域后又产生了新的LSA,当原本普通区域时产生的五类LSA到3600秒老化后就不再产生,只剩下七转五的LSA。而转换的LSA就是上面NSSA的七类LSA转换过来的。
怎么判断是七转五的LSA?就看它的ADV router是不是ABR的router-id,因为七转五后,它的ADVrouter会变为ABR的而不是原来的ASBR的router-id。
比如在R2上查看五类LSA,七转五的ADV router都为94.4.4.4,那些95.5.5.5的是原本还是普通区域是产生的当它不存在即可。
如果现在将area1也做为NSSA区域(不允许五类LSA,允许七类),则area2重发布进行了七转五的LSA进入area1的路由,则无法学习,只能用于一个缺省七类与外界设备通信,因为LSA不能进行五转七,所以综上,NSSA的七类LSA只能在本NSSA区域中传播。
七转五的五类LSA是不需要四类LSA,因为是找FA地址,不需要找router-id。事实上它是有四类LSA的,只是啥用也没有。若是产生四类LSA,则是R2产生,虽然没用,但是还是要产生,当我们去掉area1中的stub区域就可以进行查看。
在R2上查看到四类LSA,是R2产生,通告的是R4的位置,因为这个五类LSA是R4进行七转五产生的。
在R1上查看6.6.6.0这条五类LSA。
若是要找到5.5.5.5这条路由,而这条路由是域间路由,所以需要查看三类LSA。
查看其开销值,这里开销值为5是因为在引入RIP时,在R5上将类型改为了1的,是为了便于观察。否则默认为类型2,开销值不变就为1。
若是按照找ADVrouter来计算开销值的逻辑。先用四类LSA查看94.4.4.4。
这就会导致R1找6.6.6.0永远找的R4,不知道R4与R5之间的存在。
七类LSA:NSSA LSA
功能:在NSSA区域中传递外部路由.
Link-id:传递路由网络号
ADV router:产生该LSA的router-id。
特性:默认为类型2,度量值为1,携带了FA地址(转达地址)
上面图中的NP中的P代表着是否支持七转五,有P则代表支持七转五
FA:转发地址,当五类或七类LSA中携带了FA地址,则计算路径开销值时计算的是当前路由器到达FA地址的开销值之和+种子度量值。(若FA地址不可达,则路由不能加表)
FA地址:
1、默认七类LSA产生FA地址,五类LSA不产生的(七转五的五类LSA携带FA地址)。
2、七类LSA产生规则:默认产生的FA地址为产生七类LSA的ASBR最大的环回接口地址:若连接其他协议的接口也允许了OSPF协议,网络类型为BMA,则产生的七类LSA中FA地址为连接其他接口对应的下一跳地址:若网络类型为P2P,则FA地址依然为环回接口中IP地址最大的。
3、五类LSA FA地址规则:默认不产生,若连接其他协议的接口运行了OSPF协议,并且网络类型为BMA,则FA地址为重发布之前路由的下一跳地址,若网络类型为P2P,则不会产生FA地址。
NSSA区域与非NSSA区域边界进行重发布时,默认路由会分别重发布进入NSSA区域和非NSSA区域,可以阻止重发布进入NSSA区域,代码如下:
注意的是,在OSPF中,一类二类三类LSA学习加表时默认优先级为10,因为认为一二三类LSA默认原本是属于OSPF网络中的路由,所以设为10是很优的,几乎除了静态和直连之外是这个OSPF的默认优先级是最小的。而针对重发布引入的路由优先级默认为150,几乎大过了所有动态方式的路由优先级。五类LSA和七类LSA都是150。学到的七类LSA的proto为0_NSSA,五类LSA的proto为O_ASE。一二三类OSPF都显示为OSPF。
4、完全的非完全的末节区域:
在NSSA区域的基础上继续过滤三类LSA,产生三类缺省LSA的区域。也就是说在NSSA区域里拒绝四类和五类LSA出现,允许七类LSA出现,但是为了防止NSSA区域与其他外部网络通信时在NSSA的边界设备(ABR)上产生了一条缺省的七类LSA。区域里到达边界是通过ABR的缺省,到达其他区域也是通过ABR的缺省。所以在NSSA的ABR上继续过滤掉三类LSA。
配置也是在NSSA区域或stub区域的ABR上去配置:
在过滤掉三类LSA后,在这个NSSA区域里就无法学习到其他区域的三类LSA路由,它也担心无法与其他网段进行通信,但此时已经有七类LSA了,但是当我们过滤掉三类LSA后,它的totally NSSA区域(即完全的非完全的末节区域)也会自动的产生一个三类的缺省LSA。是由该区域的ABR R4产生。
对于R5而言会收到一条三类的缺省路由和一条七类的缺省路由,但最终加表的只能有一条,就是三类的缺省LSA路由。
为什么是三类缺省LSA加表不是七类缺省LSA加表,这跟它们的优先级无关,这是属于三类LSA与五类LSA的优先级比较问题,跟路由加表的优先级无关。其实三类是永远优于五类和七类的。
以上就是特殊区域的讲解。
LSA的汇总:
拓扑信息是无法汇总的,所以一类和二类LSA是无法汇总的。
四类LSA是指定ASBR的位置的,一个ASBR只有一个四类LSA,汇总不汇总无所谓,没有必要。
而三类五类七类LSA是进行传递路由的所以就可以对着三个LSA进行汇总,七转五LSA是特殊的。
三类LSA汇总:
位置:产生该三类LSA的路由器上。
度量值:所有明细路由中metric最大的。
汇总命令为:得在某一个区域里做
在R3上查看三类LSA1.1.0.0中的开销值为1,该值是从产生这个路由的路由器上,自己到达这个汇总明细网段中metric值最大的值。(思科中永远选最小值)
五类LSA汇总:
位置:产生该LSA的ASBR上
五类LSA是属于整个OSPF网络的,不能在某一个区域里做,只能在OSPF中做,命令为:
七类LSA汇总:
命令如下:与五类LSA汇总方法一样,不必进入某一区域中汇总
七转五LSA过程中汇总:
位置:七转五的ASBR上
在NSSA区域的ABR上做,假设现在已经进行了七类的汇总,但不想删了,就把6.6.4.0和不知道的网段一起直接汇总成6.6.0.0/16。
命令如下:
在七转五过程中汇总,FA地址会被自动过滤。
LSA过滤:
针对3 5 7 类LSA 进行过滤:在汇总的命令后面+ not-advertise
五类,七类,七转五的过滤一致。
除了做过滤外,我们还可以对其进行设置开销值,不必使用默认的最大度量值:
五类,七类,七转五一致。
做开销值看情况,比如R1又连接了一个路由器R7,R7也在area0中,那么,area0想从R2进入area1,那我们可以将R2上的开销值改小点,R7上的开销值改大点。这样area0和其他区域的数据就通过R2进入area1中,这就是在汇总的过程中指定开销值的原因,否则的话控制路由就挺麻烦的。
以上特殊区域讲解完毕。
不规则区域:1、存在多个area0。2、非骨干区域没有直接挂靠在骨干区域之上。
解决办法:
1、OSPF双进程重发布。
2、virtual link——虚链路。
注意:1、虚链路只能穿越一个区域。2、穿越的区域不能为特殊区域。3、虚链路的两端必须至少存在一个ABR。4、虚链路属于area0。
3、tunnel 隧道方式
拓扑如下;
以上为确保area0,1,2与area3互相学习到对方路由,第一个就是OSPF重发布,在R5上左边接口运行一个OSPF协议,在下面也允许一个OSPF,然后对两个OSPF进行一个相互重发布,这就是OSPF双进程重发布。
双进程重发布可以解决问题,但还不完美,因为area123之间的关系是区域间的关系,传递的都是三类LSA,重发布后,其他区域的三类LSA都变成五类LSA了,问题解决了,只是LSA种类不对。
或者使用虚链路,在area0的边界上和area3的边界上偷偷打上一个隧道,将area3与area0连起来,这就是虚链路。虚链路天生属于area0区域,就相当于是area0的延长。做虚链路要保证两个条件;第一个条件为一个区域属于area0,一个属于area3。第二个条件为area0的路由器要与area3的路由器要互相认识互相识别。所以该拓扑图中只能在R4与R5上做。
因为要穿越area2,所以在area2上做。后面跟对端的router-id。
这样R4与R5之间就会使用虚链路建立一个连接。
查看虚链路命令为:
其中的cost开销值为R4到R5之间的开销值。
虚链路能够解决不规则区域,什么时候使用虚链路,就代表着该网络设计有瑕疵,在思科中通过虚链路解决的不规则区域传递的LSA会被打上NDA标识,在序列号后写一个DNA意思为不老化。华为中做了优化作为正常LSA,但是链路资源会增加。
虚链路中也可以做认证,与链路中类似。
解决不规则区域问题,我们还可以做tunnel隧道方式解决。
就是创建一个普通隧道或GRE隧道。
在area0的边界设备与area3的边界设备上做一个隧道,在隧道中间配一个地址,把隧道两端接口通告到OSPF中,如果通告到area0中就相当于area0做了一个延长,如果通告到area3中,就相当于area3做了一个延长。
但做隧道会有一个问题,隧道要有一个源和目标,现在隧道在R4和R5之间做,可以使用物理地址,但不建议使用物理接口,若是area2中有很多的设备,若是中间有设备或接口出了故障,隧道就没了,隧道最好用环回做隧道的两端,这样哪怕R4与R5之间的链路断掉了,那么在area2中可能有其他路由器来确保它们的传递。
做隧道首先得确保两端的环回地址能互相通信,
配置如下:
隧道中的IP可以自己随便配置:
隧道协议为GRE
源地址和目标地址:
以上就是R4得隧道配置。
R5同理:注意两端隧道接口地址要在同一个网段。
接着就将这条链路通告到OSPF中;比如通告到area 0中
但是可能会出现一个问题,就是路由一会有,一会没有,一直在进行一个翻滚,这就跟OSPF的选路有关系。用物理地址就大概率不会出现这种问题。
R5在学习R4的环回,R4环回是在area0中, 所以R5学习R4的环回是通过三类LSA学习,接着我们做的这个tunnel是在area0中,就相当于R4和R5都在area0,此时R5学习R4的环回是通过一类LSA学习,通过选路规则,一类是不管什么情况下都优于三类,而隧道是依靠三类LSA建立起来的,学习又是靠的一类LSA,两端就会无法通信所以隧道就会断开,断开后又通过三类学习到,隧道又起来,起来后两端又无法通信,继续断开,断开再学习到又建立,一直在进行一个翻滚循环,若是将R4的环回通告到area2区域中就可以解决或将隧道接口通告到area3中。R5和R4在学习对方的隧道接口是通过三类LSA的。
tunnel一旦建立起来,其开销值cost是固定的,不会因为别的改变而改变,除非我们人为的去修改。
这样area3中的R6就可以学习到其他区域的路由。只是学习到的开销值很大,因为学习到的开销值都要加上隧道的开销值。这些开销值大都是值得的,不然路由都学习不到。
以上,在实际网络中,华为设备解决不规则区域就建议virtual link,这样省事。思科或其他厂商尽量不要使用virtual link,因为它的LSA不老化,容易出问题。virtual link只是临时的解决方法,最好的解决方法是使用tunnel,但使用tunnel最好去延长area0区域。
OSPF选路:
OSPF路由选路看的也是开销值metric值,在此之前先讲解路由控制。
路由控制:
默认:一、三类LSA AD值为10,五、七类LAS AD值为150。
修改AD值命令为:
1、OSPF进程直接修改AD值,仅仅针对一、三类LSA。
直接修改优先级是修改的一、三类LSA。比如优先级修改为100,默认为10。
2、OSPF进程直接修改AD值,仅仅针对五、七类LSA。
加上ase就是修改五类LSA的优先级,比如优先级修改为200,默认为150。
如果该设备是普通区域与area0连接的ABR则修改的为五类LSA。若是该设备为NSSA区域的ABR则修改的为五类和七类LSA一起被修改。
注意:以上修改的优先级,不仅仅是OSPF,所有的路由协议,IGP级别,BGP级别修改优先级都是本地生效。因为,OSPF发送的所有数据包都没有发生优先级,所以优先级修改只影响本设备,开销值影响所有设备。
3、修改参考带宽。
参考默认带宽为100M。我们用参考带宽除以每一段链路的带宽并相加生成开销值。
现在的链路带宽都是几千几万M,不管怎么去除,每一段的链路开销值都是1,所以在现在的高速链路中100M的参考带宽不太合适,我们可以对参考带宽进行整体的一个提高。这个参考带宽而言一定是越高越好,一个路由协议整体的metric值也是越大越好,因为越大,它的分辨率就越高。若是小的话,在小数点后的都要舍弃,无法分辨出一些链路,放大虽然metric值大,但是都有区别。
当我们在运行OSPF的一台设备上修改后,其会弹出日志提醒,若是要修改OSPF中的一个参考带宽,就需要在运行该OSPF的所有路由器上都进行一个参考带宽的修改。以确保整个OSPF网络中路由器计算开销值的方式标准都是一样的,否则计算标准不一样导致结果不准确就容易出现环路。因为计算标准不一样,原本的一些防环机制就无效,计算标准不一样,计算出的开销值有差别,进行的一些选路是错误的选路或不优的路径,导致容易出现环路。
以上修改的参考带宽是不针对环回接口改变的。修改参考带宽只是影响整体的开销值放大或减小。并不影响选路。若要影响选路就要修改开销值。
4、修改接口的cost开销值
开销值不能修改为0,因为一条普通链路接口再怎么计算,就算是100的参考带宽除以几万几十万的链路带宽,小数点后都会有数字。只有环回接口默认为0
修改完后再去查看接口是否已经修改成功。
修改优先级和开销值对于距离矢量型协议就够了,因为它只比较优先级和开销值。优先级小就加表,优先级一样就比较开销值,开销值小就加表,两个一样就执行负载均衡。
但是OSPF选路还要理清不同的LSA之间进行比较时是先比较什么再比较什么。
注意:优先级只能在选择不同路由协议时使用,比如一个路由器有OSPF和RIP,OSPF优先级默认10,RIP优先级默认150,所有该路由器优先学习OSPF,但我们要该路由器优先学习RIP,则可以修改优先级,将OSPF优先级修改的比150大或把RIP的优先级修改的比10小。而在同种路由协议中修改优先级是没用的,因为一修改就都跟着修改了,所以同种路由协议之间只有修改开销值。
OSPF 路由分类分为:区域内的一、二类LSA。区域间的三类LSA。区域外的五、七类LSA。
1、一类与一类LSA比较——优先选举metric值较小的,若一致则负载均衡。
2、三类与三类LSA比较——优先选举metric值较小的,若一致则负载均衡(路由信息从area0传到另一个区域,则传到另一个区域的路由不能再传回到area0,实际上能接收传回来的路由,只是不优选,不允许再次进入area0。若是再传回来该路由,轻则选出次优路径,重则出现路由环路。有点类似区域与区域之间的水平分割机制。即若有一个area0中的路由器中学习的某些三类LSA可以是从area0中学习,还可以从另一个区域中学习到该三类LSA,则永远学习area0中的三类LSA,另一个区域的三类LSA本身是从area0传出去的则不让进入area0)
3、五类2类型LSA与五类2类型LSA比较——1、优先比较种子度量值(越小越优)2、若种子度量值一致,则比较沿途累加的度量值,沿途累加度量值越小越优。(五或七2类型的LSA,沿途经过的cost是计算的,但是不显示出来)
4、五类1类型LSA与五类1类型LSA比较——比较种子度量值的沿途累加度量值总和,越小越优。
5、一类LSA与三类LSA比较——一类永远优于三类
6、三类LSA与五类LSA比较——三类永远优于五类
7、五类1类型与五类2类型LSA比较——1类永远优于2类
8、五类1类型与七类1类型比较——当总度量值一致时,执行负载均衡,若总度量值不一致,越小越优。(仅仅关注总度量值,种子度量值+沿途累加。注意:七类LSA中携带了FA地址,计算沿途累加度量值时,计算的是到达FA地址的)
9、五类2类型与七类2类型LSA比较——1、先比较种子度量值,越小越优。2、比较沿途累加度量值,越小越优。3、若度量值完全一致,则执行负载均衡。
综上,OSPF协议LSA之间的选路与优先级无关,且区域内优于区域间,区域间优于区域外,类型1优于类型2,类型1之间比较仅仅关注总度量值,类型2之间先比较种子度量值再比较沿途累加度量值。(注意:实际上OSPF的配置需要结合实际环境查看仔细明白之后再动手,避免后续的一些麻烦事情)
以上就是OSPF的内容了,除此之外还有一个OSPF算法,,感兴趣的读者可以自行去网上查阅了解即可。