链路状态路由协议
- 网络拓扑是如何组成的? 由设备和设备之间的链路组成网络拓扑。
- 链路状态是什么? 链路状态用来描述网络之间的拓扑结构,具体包括:1.路由器自身的标识 2.链路上的邻居 3.与邻居相连的接口地址 4.与邻居相连的链路开销 5.设备自身相连的路由信息 6.链路的类型
以下是路由器运行链路状态路由协议-ospf的链路状态信息
通过这段链路状态,我们就可以知道运行ospf协议设备的网络拓扑,比如通过Adv rtr可以知道路由器自身标识为1.1.1.1,通过link count知道邻居数量为3,通过link ID知道链路上的邻居有2.2.2.2、10.1.12.0和1.1.1.0,Data即与邻居相连的接口地址,link-type为链路类型,metric可以知道链路开销。根据这些信息,可以绘制如下拓扑:
补充:
来源:https://support.huawei.com/enterprise/zh/doc/EDOC1100126908/9b099a20
链路状态路由协议运行的大致过程为:运行链路状态路由协议的路由器之间建立协议邻居关系,之后彼此之间交互LSA,而后每台路由器将自己产生以及接收到的众多LSA放入自己的LSDB中,通过LSDB,路由器掌握了全网的拓扑,而后每台路由器基于LSDB使用SPF算法,计算出一颗以自己为根,无环、拥有最短路径的“树”,有了这棵“树”,路由器就可以知道到达网络各个角落的优选路径。之后,路由器将计算出来的优选路径,加载进各自的路由表中。总结下来就是:第一步建立相邻路由器之间的邻居关系。第二步是邻居之间交互LSA和同步LSDB。第三步通过SPF进行优选路径计算。第四步根据最短路径树生成路由表项加载到路由表。
OSPF路由协议
OSPF概述
链路状态路由协议在当前主要包括OSPF、ISIS,介绍完链路状态路由协议,我们将对其中所包含的OSPF进行进一步介绍。
路由器的ospf进程号是用来隔离网络的,只在本地有效,即一个路由器上的两个ospf进程互相隔离,但是不同设备配置不同的进程是可以建立邻居的。
区域
OSPF区域边界在路由器上,划分本质就是把接口划分进不同的区域中。对OSPFv2来说,一个接口只能加入一个区域,也只能加入一个进程中。
OSPF区域划分原则:
1.OSPF区域分为骨干区域(area 0)和非骨干区域(area n,n不等于0)。
2.骨干区域是唯一的,必须连续。
3.非骨干区域和骨干区域直接相连。
不同协议和相同协议的不同进程之间默认路由隔离。
Router-ID
router-id用于唯一的标识一台路由器。
华为路由器启动后会自动生成一个全局的(注意是全局的而不是ospf协议的)router-id(命令:display router id),默认情况下,当配置完第一个IP地址时,设备会将第一个IP地址作为全局router-id。
如果OSPF协议没有指定router-id,则用全局router-id作为OSPF router-id.之后再更改全局router-id,ospf该进程的router-id不会随之改变,如果想要其改变,需要重启进程(命令:reset ospf process)!!!会导致网络终端。而若手动更改ospf router-id,同样需要重启进程,但全局router-id却不会随之改变。(手动配置ospf router-id的优先级最高,而且是项目中的常用方式)
项目中一般使用loopback接口的IP地址作为ospf router-id,这一配置过程是手动的。
度量值(metric/cost)
OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省时接口Cost值 = 100 Mbit/s / 接口带宽。其中100 Mbit/s为OSPF指定的缺省参考值,该值是可配置的。一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。也可以说到目的网段所有出接口cost值的累加
假设参考值为默认参考值,当带宽为100M时,cost=1,当带宽为1000M时,cost=0.1=1(取非0整数),当带宽为2.048M时,cost=48.82=48(直接取整)
但是,当所有带宽都很大,1000M、2000M,甚至更高,由于默认参考值太小,仅仅用100M作为参照是不够的,这就会导致这些链路的cost值都为1,解决办法有:1.在路由器上改大参考带宽(bandwidth-reference ?)注意,整个网络路由器的参考带宽都要一起改。2.直接修改ospf开销(ospf cost ?)。由此可知,参考带宽的修改是全局的修改,直接修改属于局部微调,在一些带宽较大项目中,会要求修改带宽参考值。
ospf邻居表
在ospf相互传递LSA前,需要先通过hello报文建立邻居关系,ospf邻居表查看命令:display ospf peer.
LSDB表
LSDB表会保存自己产生的及从邻居收到的的LSA信息,Type标识LSA的类型,linkstate id随LSA类型的改变而改变,advrouter标识发送LSA的路由器,使用命令 display ospf lsdb查看lsdb表
如何唯一的识别一条LSA?1.TYPE 2.LINKstate ID 3.ADV ROUTER
ospf路由表
ospf路由表和路由器路由表是两个不同的表,ospf路由表包含destination、cost、nexthop等指导转发的信息。查看ospf路由表的命令是:display ospf routing
ospf域与单区域
ospf域(domain):一系列使用相同策略的连续的ospf网络设备所构成的网络(每台路由器只有一个进程,都使用ospf协议),为了保证每台路由器都能正常的计算路由,就要求域内所有的路由器同步 LSDB ,才能达到对整个 OSPF 网络的一致认知。当网络规模越来越大时,每台路由器维护的 LSDB 变得臃肿,计算庞大的 LSDB 需要消耗更多的设备资源,加重设备的负担。另外,网络拓扑的变化,引起所有域内的路由器重新计算,而域内路由无法进行汇总,每台路由器需要维护的路由表也越来越大,又是一个不能忽略的资源消耗。
因此,OSPF 引入了区域( Area )的概念。在一个大规模的网络中,把 OSPF 域分成多个区域。 LSA 的泛洪只在单个区域内部,同一个区域内的路由器维护一套相同的 LSDB ,对区域内的网络有一致的认知。每个区域独立进行 SPF 计算,区域内的拓扑结构对区域外是不可见的,而且区域内部的拓扑变化通知被限制在区域内,避免对区域外部造成影响.
ospf路由器类型
根据位置及功能,可分为:区域内路由器IR(所有接口都在同一区域)、区域边界路由器ABR(链接骨干区域和非骨干区域的路由器)、骨干路由器BR(有接口在骨干区域的路由器,骨干区域的IR+所有ABR=所有BR)、自治系统边界路由器ASBR(链接其他网络的路由器)
OSPF工作原理
OSPF路由器之间存在两种关系:邻居关系和邻接关系。
假设两台路由器在相连的接口上各自激活ospf进程,双方会自动发送并侦听hello报文,通过hello报文发现彼此后,双方建立邻居关系。
邻居关系建立后,路由器会进行一系列报文交互,在同步LSDB,双方开始独立计算路由时,邻接关系建立。
OSPF邻接关系建立过程
从邻居到邻接,大致要经过四个步骤:建立邻居关系、协商主从(DD报文)、交互LSDB摘要信息(DD报文)、同步LSDB。
(为什么要进行主从选举?因为LSDB的同步需要交换LSA的信息,为了保障交换过程中的有序性和可靠性,需要进行主从选举。)
(LSDB的同步不仅要求邻居之间LSDB的LSA相同,且LSA的新旧程度要一致。LSA的摘要解决LSA的标识问题(有没有)以及LSA的新旧问题(时效性))-----注意区分LSDB的摘要信息和LSA摘要信息
此图虚线上方就是LSA的摘要信息
LSDB的摘要信息(DD报文)实际上就是LSDB所有LSA摘要信息的集合
hello报文,源IP为接口IP,目的IP为224.0.0.5(ospf专用组播地址,用于标识所有运行ospf协议的路由器,当运行ospf协议的接口接收到目的地址为224.0.0.5的报文时,会自动将该报文发往CPU处理),在点到点链路(p2p)和广播型链路上,每隔10s发送一次,邻居失效时间为40s.在点到多点链路和非广播式多路访问链路(NBMA),每隔30s发送一次,邻居失效时间是120s.
ospf任何情况建立邻居的条件:
1.router id不能冲突
2.area id要相同
3.auth type(认证类型)要一致
4.auth data(认证数据)要能通过认证
5.hello间隔时间和失效时间要一致
6.option中的N bit和E bit取值要相同
ospf通过三次握手建立邻居关系,在没有发送hello报文前,初始状态为Down状态。当一台OSPF路由器收到其他路由器发来的首个Hello报文时会从初始Down状态切换为Init状态。当OSPF路由器收到的Hello报文中的邻居字段包含自己的Router ID时,从Init切换2-way状态。
参考资料
https://mp.weixin.qq.com/s/v8AsDaUySlGhnI3qiyp3iA
https://zhuanlan.zhihu.com/p/455522427?utm_id=0
https://blog.csdn.net/qq_40909772/article/details/106467772
https://blog.csdn.net/qq_40909772/article/details/106498557