概述

OSPF是一种内部网关协议(IGP),用于在属于同一自治系统(AS)的路由器之间分发路由信息。

该协议基于链路状态技术,与RIP等距离矢量协议相比,具有以下几个优点:

  • 没有跳数限制;
  • 多播寻址用于发送路由信息更新;
  • 只有当网络拓扑发生变化时才发送更新;
  • 网络的逻辑定义,其中路由器被划分为多个区域
  • 传输和标记注入AS的外部路由。

然而,也有一些缺点:

  • 由于SPF算法和维护多份路由信息,OSPF占用大量CPU和内存;
  • 与RIP相比实现更复杂的协议;

l雷竞技RouterOS实现了以下标准:

  • RFC2328—OSPF版本2
  • RFC3101- NSSA (Not-So-Stubby Area)选项
  • RFC3630—TE (Traffic Engineering)扩展到OSPF Version 2
  • RFC4577—OSPF作为BGP/MPLS IP vpn (Virtual Private Networks)的Provider/ client Edge协议
  • RFC5329—流量工程扩展到OSPF Version 3
  • RFC5340—IPv6的OSPF协议
  • RFC5643- OSPFv3管理信息库
  • RFC6549—OSPFv2多实例扩展
  • RFC6565—OSPFv3作为PE-CE (Provider Edge to Customer Edge)路由协议
  • RFC6845- OSPF混合广播和点到多点接口类型
  • RFC7471—OSPF TE (Traffic Engineering)度量扩展

OSPF术语

在我们继续之前,让我们先熟悉一下对理解OSPF的操作很重要的术语。这些术语将贯穿全文。

  • 邻居-已连接(邻接)的路由器,运行OSPF协议,且邻接接口属于同一区域。邻居是通过Hello报文发现的(除非手工配置)。
  • 邻接-路由器与对应DR、BDR之间的逻辑连接。除非形成邻接关系,否则不会交换路由信息。
  • 链接- link指分配给任何给定网络的网络或路由器接口。
  • 接口-路由器的物理接口。接口加入OSPF协议后即视为链路。用于建立链接数据库。
  • 文理学院-链路状态通告(Link - State Advertisement),报文中包含OSPF邻居之间共享的链路状态信息和路由信息。
  • 博士-指定路由器,选择路由器以减少形成的邻接关系的数量。该选项用于广播网络。
  • BDR-备份指定路由器(backup Designated Router),用于dr的热备。BDR接收来自相邻路由器的所有路由更新,但不扩散LSA更新。
  • 区域-区域用于建立分级网络。
  • -区域边界路由器,连接多个区域的路由器。负责摘要更新抑制连接区域之间。
  • ASBR—自治系统边界路由器,连接到外部网络的路由器(在不同的自治系统中)。如果将其他协议路由从路由器引入OSPF,则认为它是ASBR。
  • NBMA—非广播多路接入,网络允许多路接入,但不具备广播能力。这些网络需要额外配置OSPF邻居。
  • 广播—支持广播的网络,如以太网。
  • 点对点—网络类型不需要dr和bdr
  • 路由器id-标识OSPF路由器的IP地址。如果没有手工配置OSPF router - id,则使用分配给路由器的IP地址中的一个作为router - id。
  • 链接状态—链路状态是指两台路由器之间的链路状态。它定义了路由器接口与其相邻路由器之间的关系。
  • 成本—链路状态协议为每条链路指定一个cost值。成本值取决于媒体的速度。开销与每个路由器接口的外部相关联。这被称为接口输出成本。
  • 自治系统—自治系统是一组使用通用路由协议交换路由信息的路由器。

基本配置举例

要启动OSPF v2和v3实例,首先要做的是添加实例和骨干区域:

/routing ospf instance add name=v2inst version=2 router-id=1.2.3.4 add name=v3inst version=3 router-id=1.2.3.4 /routing ospf area add name=backbone_v2 area-id=0.0.0.0 instance=v2inst add name=backbone_v3 area-id=0.0.0.0 instance=v3inst

现在,我们可以添加一个模板。该模板用于匹配运行OSPF协议的接口,可以直接指定网络,也可以指定接口。

/routing ospf interface-template add networks=192.168.0.0/24 area=backbone_v2 add networks=2001:db8::/64 area=backbone_v3 add interfaces=ether1 area=backbone_v3


路由表计算

链路状态数据库描述了路由器和连接它们的链路,以及适合转发的链路。它还包含每个链路的成本(度量)。该度量用于计算到达目的网络的最短路径。
每台路由器可以为自己的链路方向发布不同的开销,从而有可能产生非对称链路(到达目的地的数据包经过一条路径,但响应经过另一条路径)。不对称路径不是很流行,因为它使发现路由问题变得更加困难。
参数中可以更改成本的值OSPF接口模板配置菜单,例如,添加一个以太2接口,开销为100。

/routing ospf interface-template add interfaces=ether2 cost=100 area=backbone_v2


Cisco路由器的接口开销与接口带宽成反比。带宽越高,成本越低。如果在RouterOS上需要类似的成本,则使用以下公式:l雷竞技

成本= 100000000/bw,单位为bps。


OSPF路由器使用Dijkstra的SPF (Shortest Path First)算法来计算最短路径。该算法将路由器置于树的根部,并根据到达目的地所需的累积成本计算到每个目的地的最短路径。尽管所有路由器都使用相同的链路状态数据库,但每个路由器都计算自己的树。


SPT计算

假设我们有以下网络。网络由4(4)台路由器组成。出接口的OSPF开销在表示该链路的那条线附近显示。为了构建路由器R1的最短路径树,我们需要将R1作为根,并计算每个目的地的最小开销。

从上面的图像中可以看到,已经找到了通往172.16.1.0网络的多条最短路径,允许到该目的地的流量进行负载平衡等价多路径(ECMP).最短路径树建立好后,路由器开始相应地建立路由表。网络最终到达树中计算的代价。

路由表的计算看起来很简单,但是当使用OSPF扩展或计算OSPF区域时,路由表的计算就变得复杂起来。

转发地址

OSPF路由器可以设置转递地址到它本身以外的东西,这表明下一跳是可能的。主要转发地址设置为0.0.0.0表示该路由只能通过发布路由器可达。

满足以下条件时,在LSA中设置转发地址:

  • 下一跳接口必须开启OSPF
  • 下一跳地址属于OSPF网络提供的网络

当OSPF能够解析该转发地址时,接收到该LSA的路由器可以使用该转发地址。如果不直接解析转发地址——路由器将LSA转发地址的下一跳设置为网关,如果不直接解析转发地址——网关为origin -id。解析只使用OSPF实例路由,而不是整个路由表。


让我们看看下面的示例设置:

路由器R1有到外部网络的静态路由192.168.0.0 / 24.R1、R2、R3之间运行OSPF协议,静态路由分布在OSPF网络中。

这样设置的问题很明显,R2不能直接到达外部网络。进入局域网的流量来自R2会通过路由器转发吗R1,但是如果我们看一下网络图,我们可以看到更多的R2可以直接到达LAN网络所在的路由器。


因此,了解转发地址的情况,我们就可以制作路由器R1设置转发地址。我们只需要将10.1.101.0/24网络添加到路由器的OSPF网络中R1配置:

/routing/ospf/interface-template add area=backbone_v2 networks=10.1.101.0/24

现在让我们验证一下转发地址是否正常工作:

[admin@r2] /ip/route> print where dst-address=192.168.0.0/24 Flags: D - DYNAMIC;A -活跃的;o, y - COPY列:DST-ADDRESS,网关,距离DST-ADDRESS网关距离DAo 192.168.0.0/24 10.1.101.1% ether1110

在所有OSPF路由器上,你会看到LSA的转发地址不是0.0.0.0

[admin@r2] /routing/ospf/lsa> print where id=192.168.0.0 Flags: S - self-originate, F - flushing, W - wraparound;D - dynamic 1 D instance=default_ip4 type="external" originator=10.1.101.10 id=192.168.0.0 sequence=0x80000001 age=19 checksum=0xF336 body= options=E netmask=255.255.255.0 forwarding-address=10.1.101.1 metric=10 type-1 route-tag=0

10.1.101.0/24网络中的路由器之间不需要建立OSPF邻接关系



邻居关系和邻接

OSPF是一种链路状态协议,它假定路由器的接口是OSPF链路。OSPF一旦启动,就会添加本地所有链路的状态链路状态数据库

在OSPF网络完全发挥作用之前,有几个步骤:

  • 邻居发现
  • 数据库同步
  • 路由计算


链路状态路由协议是描述路由拓扑结构的分布和复制数据库。链路状态协议的泛洪算法确保每台路由器都有一个相同的链路状态数据库,并根据该数据库计算路由表。

在完成上述所有步骤后,每个邻居上的链路状态数据库包含完整的路由域拓扑(网络中有多少其他路由器,路由器有多少接口,路由器之间连接的网络,每条链路的成本等)。

OSPF路由器间通信

OSPF使用89号协议在IP网络层上运行。
目的地址设置为邻居的IP地址或OSPF组播地址AllSPFRouters(224.0.0.5)或alldrrouter(224.0.0.6)中的一个。本文稍后将描述这些地址的使用。
每个OSPF包都以一个标准的24字节报头开始。

描述
包类型 OSPF报文分为Hello报文、DD报文、链路状态请求报文、链路状态更新报文和链路状态确认报文。除了Hello报文外,所有这些报文都用于链路状态数据库同步。
路由器ID 一个路由器的IP地址,除非手动配置
区域ID 允许OSPF路由器将报文关联到相应的OSPF区域。
校验和 允许接收路由器确定数据包是否在传输过程中损坏。
身份验证领域 这些字段允许接收路由器验证报文的内容没有被修改,并且报文确实来自router ID出现在报文中的OSPF路由器。



有五种不同的OSPF报文类型用于保证LSA在OSPF网络中正确传播。

  • 你好,包-发现OSPF邻居并建立邻接关系。
  • 数据库描述(DD)-检查路由器之间的数据库同步。在建立邻接关系后交换。
  • 链路状态请求(LSR)-用于请求邻居数据库的最新信息。路由数据库中过期的部分在DD交换之后确定。
  • 链路状态更新(LSU)-携带特定请求的链路状态记录的集合。
  • 链路状态确认(LSack)-用于确认其他数据包类型,从而引入可靠的通信。

邻居发现

OSPF通过在配置的接口外定期发送Hello报文来发现潜在的邻居。默认情况下你好,包每隔10秒发送一次,可以通过设置hello-interval配置OSPF接口。当路由器收到邻居发送的带有匹配参数的Hello报文时,就知道有邻居存在。

通过发送和接收Hello报文,路由器还可以检测到邻居的故障。如果没有收到Hello报文dead-interval(默认为40秒)路由器开始围绕故障路由数据包。“Hello”协议是为了保证邻居路由器在Hello报文的时间间隔和死亡时间间隔参数上达成一致,以防止由于没有及时收到Hello报文而导致链路错误断开。

描述
网络掩码 源路由器接口IP地址的掩码。
你好间隔 Hello报文间隔时间(缺省为10秒)
选项 OSPF邻居信息的选项
路由器优先 用来帮助选举DR和BDR的8位值。(p2p链路中不设置)
路由器失效时间 在认为邻居down之前,需要接收到时间间隔。(默认情况下比Hello间隔大4倍)
博士 当前DR的router-id
BDR 当前BDR的router-id
邻居路由器id 所有原始路由器邻居的路由器id列表


在每种类型的网段上,Hello协议的工作方式略有不同。很明显,在点到点段上,只有一个邻居是可能的,并且不需要额外的操作。但是,如果一个段上可以有多个邻居,则需要采取额外的措施使OSPF的功能更加有效。

只有满足以下条件,两台路由器才能成为邻居。

  • 路由器之间可以进行双向通信。由泛洪Hello报文决定。
  • 界面应属于同一区域;
  • 除非配置了network-type为,否则接口应属于同一子网,且具有相同的网络掩码点对点;
  • 路由器应该有相同的认证选项,并且必须交换相同的密码(如果有的话);
  • Hello和Dead间隔在Hello报文中应该是相同的;
  • 外部路由和NSSA标志在Hello报文中应该是相同的。

网络掩码、优先级、DR和BDR字段仅在邻居为广播网段或NBMA网段时使用。

广播子网发现

连接到广播子网的节点可以发送单个数据包,该数据包被所有其他连接的节点接收。这对于自动配置和信息复制非常有用。广播子网中另一个有用的功能是组播。此功能允许发送单个数据包,该数据包将被配置为接收多播数据包的节点接收。OSPF使用此功能查找OSPF邻居并检测双向连通性。

考虑如下图所示的以太网网络。

! !博斯曼! !广播网络


每台OSPF路由器加入IP组播组AllSPFRouters(224.0.0.5),然后路由器周期性地将Hello报文发送到IP地址224.0.0.5。所有加入同一组的其他路由器将收到一个多播Hello报文。通过这种方式,OSPF路由器通过发送单个报文而不是向该段上的每个邻居发送单独的报文来维持与所有其他OSPF路由器的关系。

这种方法有几个优点:

通过组播或广播Hello报文自动发现邻居。与其他子网类型相比,带宽占用更少。在broadcast段上,有n*(n-1)/2个邻居关系,但是这些邻居关系通过发送n个hello来维持。如果广播具有组播能力,则OSPF运行时不会干扰广播段上的非OSPF节点。如果不支持组播功能,所有的路由器都会收到广播的Hello报文,即使该节点不是OSPF路由器。


发现NBMA子网

NBMA (Non-broadcast multiaccess)报文段与广播报文段类似。支持两台以上路由器,唯一的区别是NBMA不支持数据链路广播能力。因此,OSPF邻居必须先通过配置发现。在Rol雷竞技uterOS上,静态邻居配置是在/routing ospf static-neighbor菜单。为了减少Hello流量,大多数NBMA子网下的路由器的Router优先级都应该设置为0 (RouterOS默认设置)。l雷竞技有资格成为指定路由器的路由器的优先级值不能为0。它保证在DR和BDR的选举过程中,hello报文只发送给符合条件的路由器。


发现PTMP子网

点对多点将网络视为点对点链接的集合。

根据设计,PTMP网络不应该具有广播功能,这意味着OSPF邻居(与NBMA网络一样)必须首先通过配置发现,并且所有通信都是通过在邻居之间直接发送单播数据包进行的。在Rol雷竞技uterOS上,静态邻居配置是在/routing ospf static-neighbor菜单。指定路由器和备份指定路由器在点到多点子网上不选举。

对于支持广播的PTMP网络,一种名为“ptmp-broadcast可以使用。该类型通过组播hello报文自动发现邻居,检测邻居之间的双向通信。邻居检测后ptmp-broacast直接向发现的邻居发送单播报文。该模式与RouterOS v6兼容。l雷竞技ptmp”类型。

主从关系

在数据库同步开始之前,必须建立交换信息的层次顺序,这决定了哪个路由器发送信息数据库描述符DD)数据包().选择主路由器最高优先级如果没有设置优先级,则路由器ID将被使用。请注意,这是一种基于路由器优先级的关系,用于安排邻居之间的交换数据,它不影响DR/BDR的选举(即博士不总是必须的吗).

数据库同步

OSPF路由器之间的链路状态数据库同步非常重要。不同步的数据库可能导致路由表计算错误,从而导致路由循环或黑洞。

数据库同步有两种类型:

  • 初始数据库同步
  • 可靠的洪水。

当两个邻居之间的连接第一次出现时,初始数据库同步将会发生。OSPF在邻居连接首次出现时显式下载数据库。这个过程叫做数据库交换.OSPF路由器在OSPF序列中只发送自己的LSA头,而不是发送整个数据库数据库描述(DD)包。只有当前一个DD报文被确认后,路由器才会发送下一个DD报文。当接收到整个DD报文序列时,路由器知道哪些lsa是最近的,哪些lsa是没有的。然后路由器发送链路状态请求(LSR)报文请求所需的lsa,邻居以泛洪的方式响应链路状态更新(LSU)包。在接收到所有更新后,邻居被称为完全相邻

可靠泛洪是另一种数据库同步方法。当邻接关系已经建立,并且OSPF路由器希望将LSA的变化通知给其他路由器时,使用此命令。OSPF路由器接收到这种LSA更新后,会在链路状态数据库中安装一条新的LSA,并向发送方发送确认报文,并将LSA重新封装在新的LSU中,然后发送给除最初收到LSA的接口外的所有接口。

OSPF通过比较序列号来确定lsa是否是最新的。序号以0×80000001开头,序号越大表示LSA越新。每次淹没记录时,序列号递增,接收更新的邻居重置最大年龄定时器。LSA每30分钟刷新一次,如果不刷新,LSA在数据库中的最长保存时间为60分钟。

数据库并不总是在所有OSPF邻居之间同步,OSPF根据网段来决定是否需要同步数据库。例如,在点到点链路上,数据库总是在路由器之间同步,但在以太网网络中,数据库只在某些邻居对之间同步。


广播子网同步


在广播段上,如果存在n*(n-1)/2个邻居,那么如果OSPF路由器试图与子网内的每台OSPF路由器同步,将会有大量的链路状态更新和确认报文通过子网发送。

这个问题通过选举一个人来解决指定路由器和一个备份指定路由器对于每个广播子网。所有其他路由器都只与这两个被选中的路由器同步并形成邻接关系。这种方法将邻接的数量从n*(n-1)/2减少到只有2n-3。

右图说明了广播子网上的邻接结构。路由器R1和R2分别为指定路由器和备份指定路由器。例如,如果R3想向R1和R2发送链路状态更新(Link State Update, LSU),则路由器将LSU发送到IP组播地址AllDRouters(224.0.0.6),只有DR和BDR会收听这个组播地址。然后,指定路由器发送LSU地址给AllSPFRouters,更新其余的路由器。

选举博士

DR和BDR路由器是从Hello报文中接收到的数据中选出来的。子网中的第一个OSPF路由器总是被选为指定路由器,当添加第二个路由器时,它将成为备份指定路由器。当已有DR或BDR失效时,根据配置选择新的DR或BDR路由器优先.优先级最高的路由器成为新的DR或BDR。

指定路由器或备份指定路由器会消耗额外的资源。如果Router Priority设置为0,则表示该路由器不参与选举过程。如果某些较慢的路由器不能进行DR或BDR,这是非常有用的。

NBMA子网同步

NBMA网络上的数据库同步与广播网络上的数据库同步相似。DR和BDR是由选举产生的,数据库最初只与DR和BDR路由器交换,洪水总是经过DR,唯一的区别是Link State update必须被复制并分别发送给相邻的每个路由器。

PTMP子网同步

在PTMP子网中,OSPF路由器与所有可以直接通信的路由相邻。


了解OSPF区域

OSPF的一个显著特点是可以将自治系统划分为多个路由区域,每个路由区域包含自己的一组邻居。
想象一个拥有300多个路由器的大型网络,它们之间有多条链路。每当网络中发生链路震荡或其他一些拓扑变化时,这种变化就会波及到网络中的所有OSPF设备,从而导致网络上相当重的负载,甚至停机,因为对于这样一个大型网络来说,网络收敛可能需要一些时间。

大型的单区域网络会产生严重的问题:

  • 每当网络拓扑发生变化时,每个路由器都会重新计算数据库,这个过程会占用CPU资源。
  • 每个路由器拥有一个完整的链路状态数据库,它显示了整个网络的拓扑结构,它占用内存资源。
  • 路由表的完整副本和路由表条目的数量可能远远大于网络的数量,这可能占用更多的内存资源。
  • 更新大型数据库需要更多的带宽。

区域的引入允许更好的资源管理,因为一个区域内的拓扑变化不会淹没到网络中的其他区域。区域的概念简化了网络管理以及区域之间的路由汇总,大大减少了需要存储在每个OSPF邻居上的数据库大小。这意味着每个区域都有自己的链路状态数据库和相应的最短路径树。

一个区域的结构对其他区域是不可见的。如果使用多个区域,这种知识隔离使协议更具可扩展性;路由表计算占用的CPU资源减少,路由流量减少。

然而,多区域设置会带来额外的复杂性。不建议路由器数量少于50台的区域划分。一个区域内路由器的最大数量主要取决于您用于路由表计算的CPU能力。


OSPF区域具有唯一的32位标识(area ID),区域ID为0.0.0.0的区域称为骨干区域(Backbone area),是其他区域连接的主要区域。连接多个区域的路由器被称为路由器区域边界路由器(Area Border Routers),其主要职责是在连接区域之间进行汇总和抑制更新。连接到另一个路由域的路由器被调用ASBR(自治系统边界路由器)。

每个区域都有自己的链路状态数据库,由路由器lsa和网络lsa组成,描述该区域内所有路由器的互连情况。区域拓扑的详细信息对所有其他区域都是隐藏的;router- lsa和network- lsa不会扩散到区域之外。区域边界路由器(5)在OSPF summary- lsa中,地址信息从一个区域泄漏到另一个区域。这允许一个选择最好的区域边界路由器时,将数据转发到目的地从另一个区域和被调用内部路由

区域之间的路由信息交换本质上是一种距离矢量算法,为了防止算法出现收敛问题,比如计数到无穷大,所有的区域都需要直接连接到骨干区域创建一个简单的轮辐拓扑。骨干区域的area- id始终为0.0.0.0,不可修改。

l雷竞技RouterOS区域配置在/ / ospf路由/面积菜单。例如,ABR路由器配置多个附加区域、一个Stub区域和一个缺省区域:

/routing ospf area add name=backbone_v2 area-id=0.0.0.0 instance=v2inst add name=stub_area area-id=1.1.1.1 instance=v2inst type=stub add name=another_area area-id=2.2.2.2 instance=v2inst type=default

OSPF可以有5种类型的区域。每个区域类型定义了该区域支持的lsa类型:

  • standard/default -该区域可以正常发送OSPF报文,支持1、2、3、4、5类lsa
  • 主干——正如已经提到的,这是任何其他区域连接的主要区域。它与标准区域基本相同,但标识为ID 0.0.0.0
  • Stub -该区域不接受任何外部路由
  • 完全短根——短根区域的一种变体
  • 不那么短的(NSSA)——短根区域的一种变体

救生设备类型

在我们继续详细了解每个区域类型之前,让我们先熟悉一下LSA类型:

  • 1型- (Router LSA)由区域内的路由器发送,包括直连链路列表。不要越过ABR或ASBR。
  • 2型- (Network LSA)为区域内的每个“transit Network”生成。transit网络中至少有两台OSPF路由器直连。以太网是传输网络的一个例子。Type - 2 LSA是由DR生成的,它列出了组成transit网络的所有附加路由器。
  • 3型—(Summary LSA) ABR发送Type 3 Summary LSA。Type - 3 LSA将一个区域所拥有的网络发布给OSPF AS内的其他区域。缺省情况下,OSPF会为发起区域内定义的每个子网发布Type - 3 lsa,这可能会导致泛洪问题,因此在ABR上使用手动汇总是一个好主意。
  • 类型4- (ASBR- summary LSA)通告ASBR地址,显示ASBR所在的“位置”,通告它的地址而不是路由表。
  • 类型5—(External LSA)对外发布通过ASBR学到的路由,传播到除Stub区域外的所有区域。这种LSA分为两种子类型:外部类型1外部类型2
  • 类型6-(组成员LSA)组播扩展到OSPF时定义的LSA,不被RouterOS使用。l雷竞技
  • 7型- type 7 lsa用于通知abr这些引入NSSA区域的外部路由。区域边界路由器将这些lsa转换为类型5外部lsa和泛洪正常传播到OSPF网络的其他部分
  • 8型- External Attributes LSA (OSPFv2) / link-local LSA (OSPFv3)
  • 类型9- Link-Local Scope Opaque (OSPFv2) / Intra Area Prefix LSA (OSPFv3)。这种类型的LSA不会扩散到本(子)网络之外。
  • 10型-区域局部作用域不透明。这种类型的LSA不会扩散到它所关联的区域范围之外。
  • 11型—在整个AS内传播的Opaque LSA(作用域与类型5).它不会淹没在stub区域和nssa。


如果没有ASBR,则网络中没有类型4和类型5的LSA。


标准的区域

该区域支持1、2、3、4、5种lsa。

使用默认区域的简单多区域网络。本例中,来自area1的所有网络都被扩散到骨干网络,来自骨干网络的所有网络都被扩散到area1。
R1:

/ip地址add address=10.0.3.1/24 interface=ether1 /ip地址add address=10.0.2.1/24 interface=ether2 /路由ospf实例add name=v2inst version=2 router-id=1.0.0.1 /路由ospf区域add name=backbone_v2 area-id=0.0.0.0 instance=v2inst add name=area1 area-id=1.1.1.1 type=default instance=v2inst /路由ospf接口模板add networks=10.0.2.0/24 area=backbone_v2 add networks=10.0.3.0/24 area=area1

R2:

/ip地址add address=10.0.1.1/24 interface=ether2 /ip地址add address=10.0.2.2/24 interface=ether1 /路由ospf实例add name=v2inst version=2 router-id=1.0.0.2 /路由ospf区域add name=backbone_v2 area-id=0.0.0.0 /路由ospf接口模板add networks=10.0.2.0/24 area=backbone_v2 add networks=10.0.1.0/24 area=backbone_v2

R3:

/ip address add address=10.0.3.2/24 interface=ether2 /ip address add address=10.0.4.1/24 interface=ether1 /routing ospf instance add name=v2inst version=2 router-id=1.0.0.3 /routing ospf area add name=area1 area-id=1.1.1.1 type=stub instance=v2inst /routing ospf interface-template add networks=10.0.3.0/24 area=area1 add networks=10.0.4.0/24 area=area1


存根区域

存根区域的主要目的是防止这些区域携带外部路由。从这些区域到外部世界的路由基于缺省路由。stub区域减少了区域内数据库的大小,降低了区域内路由器对内存的需求。

stub区域有一些限制,ASBR路由器不能进入该区域,stub区域不能作为虚连接的中转区域。由于stub区域主要配置为不承载外部路由,所以需要进行这些限制。

该区域支持1、2、3种lsa。


让我们考虑一下上面的例子。Area1被配置为stub区域,这意味着路由器R2和R3将不会从骨干区域接收到除缺省路由以外的任何路由信息。


R1:

/routing ospf instance add name=v2inst version=2 router-id=1.0.0.1 /routing ospf area add name=backbone_v2 area-id=0.0.0.0 instance=v2inst add name=area1 area-id=1.1.1.1 type=stub instance=v2inst /routing ospf interface-template add networks=10.0.0.0/24 area=backbone_v2 add networks=10.0.1.0/24 area=area1 add networks=10.0.3.0/24 area=area1

R2:

/routing ospf interface-template add name=v2inst version=2 router-id=1.0.0.2 /routing ospf area add name=area1 area-id=1.1.1.1 type=stub instance=v2inst /routing ospf interface-template add networks=10.0.1.0/24 area=area1

R3:

/routing ospf interface-template add name=v2inst version=2 router-id=1.0.0.3 /routing ospf area add name=area1 area-id=1.1.1.1 type=stub instance=v2inst /routing ospf interface-template add networks=10.0.3.0/24 area=area1


完全粗短的区域

全短根面积是短根面积的延伸。一个完全粗短的区域阻止外部路由和汇总(区域间)路由进入该区域。只有区域内路由才能注入该区域。完全stub区域配置为带有附加的stub区域no-summaries国旗。本区域支持配置缺省路由的Type 1、Type 2和Type 3 lsa。

/routing ospf area add name=totally_stubby_area area-id=1.1.1.1 instance=v2inst type=stub no- summary


NSSA

当需要注入外部路由,但不需要注入type - 5 LSA路由时,NSSA (not -so-stubby area)非常有用。

该图显示了两个区域(骨干和area1)以及与位于“area1”的路由器的RIP连接。我们需要将“area1”配置为stub区域,但也需要在骨干区域注入外部RIP路由。此时应将Area1配置为NSSA。

配置示例不包括配置。


R1:

/routing ospf instance add name=v2inst version=2 router-id=1.0.0.1 /routing ospf area add name=backbone_v2 area-id=0.0.0.0 instance=v2inst add name=area1 area-id=1.1.1.1 type=nssa instance=v2inst /routing ospf interface-template add networks=10.0.0.0/24 area=backbone_v2 add networks=10.0.1.0/24 area=area1

R2:

/routing ospf instance add name=v2inst version=2 router-id=1.0.0.2 /routing ospf area add name=area1 area-id=1.1.1.1 type=nssa instance=v2inst /routing ospf interface-template add networks=10.0.1.0/24 area=area1


NSSA区域不能使用虚连接。

外部路由信息和缺省路由

在OSPF路由域的边缘,可以找到称为AS边界路由器(asbr)运行其他路由协议之一的。这些路由器的任务是将从其他路由协议中学到的路由信息引入OSPF路由域。外部路由可以根据度量类型在两个不同的级别上导入。

  • 类型1—OSPF度量值是OSPF内部开销和外部路由开销的总和
  • 类型2—OSPF的度量值只等于外部路由开销。

外部路由可以通过实例导入重新分配参数。下面的例子将挑选并重新分配所有静态路由和RIP路由:

/routing ospf instance add name=v2inst version=2 router-id=1.2.3.4 redistribute=static,rip

重新分配缺省路由是一种特殊情况originate-default该参数应使用:

/routing ospf instance set v2inst originate-default=if-installed

因为再分配是由originate-default"和"重新分配参数时,引入了缺省路由过滤的一些极端情况。

  • 如果重新分配,则选择所有匹配重分发参数的路由
  • 如果originate-default=从来没有,默认路由将被拒绝
  • 运行选定的路线out-select-chain(如果配置)
  • 运行选定的路线out-filter-chain(如果配置)
  • 如果originate-default设为总是if-installed
    • OSPF创建假缺省路由,不带任何属性;
    • 这条路线贯穿out-filter-chain可以应用属性,但忽略动作(总是accept);


有关重新分配值的完整列表,请参阅参考手册。

路线综述

路由摘要是将多条路由合并到一个单独的广告中。它通常在区域边界(区域边界路由器)完成。

最好是沿着主干的方向总结。这样主干接收到所有聚合的路由,并将它们注入到其他已经汇总的区域。聚合有两种类型:区域间聚合和外部路由聚合。

区域间路由聚合作用于区域边界(abr),不适用于通过重新分配注入OSPF的外部路由。缺省情况下,ABR为特定区域内的每条路由创建summary LSA,并在相邻区域发布。

使用范围可以为多条路由只创建一条summary LSA,并且只向相邻区域发送一条通告,或者完全抑制通告。

如果一个范围配置了'做广告参数,如果该区域内存在该范围下的路由,则对每个范围发布一条summary LSA。否则(当)做广告参数disable)则不会在区域边界外创建和发布summary lsa。

区域间路由聚合可以从OSPF区域范围菜单。

假设我们有两个区域backbone和area1, area1有几条来自10.0.0.0/16范围的/24路由,如果可以总结,就不需要用每个/24子网淹没骨干区域。在连接area1和骨干网络的路由器上,我们可以设置区域范围:

/routing ospf area range add prefix=10.0.0.0/16 area=area1 advertise=yes cost=10

对于一个活动范围(即至少有一条来自指定区域的OSPF路由落在它下面),创建一条“黑洞”类型的路由并安装在路由表中。


外部路由聚合可以使用路由过滤器来实现。让我们考虑与上面相同的例子,只是area1重新分配了来自其他协议的/24路由。要发送一条summary - LSA,必须添加一条黑洞路由,并添加适当的路由过滤器,只接受summary - LSA:

/ip route add st-address=10.0.0.0/16 blackhole /routing instance set v2inst out-filter-chain=ospf_out /路由过滤规则add chain=ospf_out规则="if (dst == 10.0.0.0/16) {accept} else {reject}"

正如前面提到的,所有OSPF区域都必须连接到骨干区域,但有时物理连接是不可能的。为了克服这个问题,可以使用虚拟链接

使用虚连接的常见场景有两种:

  • 将支离破碎的骨干区域粘合在一起
  • 要连接远端而不直接连接到主干

分区的支柱

OSPF允许骨干区域中不连续的部分通过虚连接连接起来。当两个独立的OSPF网络合并为一个大网络时,可能需要这样做。可以在各个abr之间配置虚连接,这些abr与骨干区域相互接触,并且有一个公共区域。

如上图所示,当公共区域不存在时,额外的区域可以被创建为过境区域。

对非骨干区域进行分区时,不需要虚连接。OSPF不主动尝试修复区域分区,当一个区域被分区时,每个组件只是成为一个单独的区域。主干网在新区域之间进行路由。有些目的地可以通过内部路由时,需要划分区域inter-area路由。

但是,为了在分区后保持完整的路由,地址范围不能在区域分区的多个组件之间分割。

与主干网没有物理连接

当一个区域与骨干网没有物理连接时,虚连接可以为断开的区域的骨干网提供一条逻辑路径。必须在两个ABR之间建立一条链路,这些ABR有一个公共区域,其中一个ABR连接到主干。

可以看到R1和R2都是abr, R1连接到骨干区域。a2将用作a交通领域R1是入口点进入骨干区。两台路由器上都需要配置虚连接。

OSPF接口模板中添加虚连接配置。如果我们从“无物理连接”的例子中选择设置,那么虚拟链路的配置看起来是这样的:

R1:

/routing ospf interface-template add vlink-transit-area=area2 area=backbone_v2 type=virtual-link vlink-neighbor-id=2.2.2.2

R2:

/routing ospf interface-template add vlink-transit-area=area2 area=backbone_v2 type=virtual-link vlink-neighbor-id=1.1.1.1

属性引用

实例

子菜单:/ / ospf路由/实例

财产 描述
域名是十六进制|地址 MPLS-related参数。标识实例所属的OSPF域。该值附加在作为VPNv4路由在BGP中重新分发的OSPF路由上,作为BGP扩展团体属性。当BGP VPNv4路由重新分发回OSPF时,使用该值来决定该路由是否生成区域间LSA或as -external LSA。缺省情况下,使用Null domain-id,如RFC 4577所述。
domain-tag整数(0 . . 4294967295) 如果设置了该参数,则用于路由重新分配(在该路由器生成的所有外部lsa中作为route-tag)和路由计算(所有具有该路由标记的外部lsa都被忽略)。需要与旧的思科系统互操作性。缺省情况下不设置。
在滤波字符串 名称路由过滤器用于输入前缀的链
mpls-te-address字符串 用于MPLS流量工程的区域。TE Opaque lsa是在该区域生成的。配置mpls-te-area的OSPF实例不能超过一个。
mpls-te-area字符串 用于MPLS流量工程的区域。TE Opaque lsa是在该区域生成的。配置mpls-te-area的OSPF实例不能超过一个。
originate-default总是| if-installed |从不;默认值:从来没有 指定缺省路由(0.0.0.0/0)的分发方式。
out-filter-chain名字 名称路由过滤器用于外发前缀过滤的链
out-filter-select名字 路由过滤器选择链的名称,用于输出选择
重新分配边界网关协议、连接、复制、dhcp、幻想,调制解调器,ospf,撕裂,静态的,vpn; 启用特定路由类型的重分发。
路由器idIP |名称;默认值:主要 OSPF路由器ID。可以显式设置为IP地址,也可以设置为router-id实例的名称。
版本2 | 3;默认值:2 本实例运行的OSPF版本号(IPv4为v2, IPv6为v3)。
多联机路由表名;默认值:主要 该OSPF实例运行的VRF表
use-dn是|否 强制使用或忽略DN位。在某些CE - PE场景下,可以将区域内路由注入VRF。如果不设置参数,则根据RFC使用DN位。从v6rc12开始可用。


笔记

OSPF协议支持两种类型的度量:

  • 类型1—OSPF度量值是OSPF内部开销和外部路由开销的总和
  • 类型2—OSPF的度量值只等于外部路由开销。

区域

子菜单:/ / ospf路由/面积

财产 描述
区域idIP地址;默认值:0.0.0.0 OSPF区域标识符。如果路由器在多个区域中有网络,则必须始终存在一个area-id=0.0.0.0(骨干)的区域。主干总是包含所有的区域边界路由器。骨干网负责在非骨干区域之间分发路由信息。骨干网必须是连续的,即不能有断开的网段。但是,区域边界路由器不需要与骨干网进行物理连接,可以使用a虚拟链接。
违约成本整数;设置 区域内注入lsa的缺省开销。如果不设置该值,则不会产生stub区域type-3缺省LSA。
实例名字;强制性的 该区域所属的OSPF实例名称。
no-summaries() 标志参数,如果设置了该参数,则不扩散stub区域内的summary lsa。
名字字符串 区域的名称
nssa-translate是|否|候选人 该参数表示将使用哪个ABR作为type7到type5 LSA的转换器。仅当区域类型为NSSA时适用
  • 是的,路由器将一直被用作转换器
  • 不——路由器永远不会被用作转换器
  • candidate - OSPF选择一个候选路由器作为转换器
类型默认值| nssa | stub;默认值:默认的 区域类型。阅读更多关于OSPF案例研究中的区域类型。


区域范围内

子菜单:/ / ospf路由/区域/范围

财产 描述
做广告是|否;默认值:是的) 是否创建summary LSA并发布到邻近区域。
区域名字;强制性的 与此范围相关联的OSPF区域
成本整数(0 . . 4294967295) 此范围将创建的summary LSA的开销

Default -使用开销最大的路由(即在此范围内的路由)

前缀IP前缀;强制性的 该范围的网络前缀


接口

子菜单:/ / ospf路由/接口

只读匹配接口菜单

界面模板

子菜单:/ / ospf路由/ interface-template

接口模板定义了常见的网络和接口匹配,以及为匹配的接口分配的参数。

匹配器

财产 描述

接口名字

匹配的接口。接受指定的接口名称或接口列表的名称。

网络IP前缀 与该区域关联的网络前缀。在此范围内至少有一个地址的所有接口都会启动OSPF。请注意,此检查使用地址的网络前缀(即不是本地地址)。对于点到点接口,这意味着远程端点的地址。

分配参数

财产 描述
区域名字;强制性的 匹配接口要关联到的OSPF区域。
身份验证Simple | md5 | sha1 | sha256 | sha384 | sha512 指定OSPF协议消息的认证方式。
  • 简单的-明文认证
  • md5-关键字消息摘要5认证
  • sha - HMAC-SHA认证RFC5709

如果未设置该参数,则不使用身份验证。

auth-id整数 密钥id用于计算消息摘要(启用MD5或SHA认证时使用)。该值应该匹配同一区域内的所有OSPF路由器。
认证密钥字符串) 要使用的认证密钥必须与网段的所有邻居匹配。
评论字符串)
成本整数(0 . . 65535]) 以链路状态度量表示的接口开销。
dead-interval时间;默认值:40年代 指定邻居被宣布死亡的时间间隔。该时间间隔在hello报文中发布。对于同一网络中的所有路由器,该值必须相同,否则不会形成邻接关系
禁用是|否)
hello-interval时间;默认值:十年代 之间的间隔你好路由器从该接口发出的报文。该间隔越小,检测到拓扑变化的速度越快,权衡的是更多的OSPF协议流量。同一网络中的所有路由器必须设置相同的值,否则路由器之间不会形成邻接关系。
实例id(我nteger [0 . . 255];默认值:0
被动() 如果使能,则在匹配的接口上不发送或接收OSPF流量
prefix-list(名字) 包含要发布到v3接口的网络的地址列表名称。
优先级整数:0 . . 255;默认值:128

路由器的优先级。用于确定广播网络中指定的路由器。优先级高的路由器优先。优先级值为0表示路由器根本没有资格成为指定或备份指定路由器。

ROS v7的默认值是128(在RFC中定义),而ROS v6的默认值是1,如果您为DR/BDR选举设置了严格的优先级,请记住这一点。

retransmit-interval时间;默认值:5 s 重发丢失的链路状态通告的时间间隔。当一台路由器向它的邻居发送一条LSA (link state advertisement)时,该LSA将一直保存到收到确认为止。如果未及时收到确认(参见transmit-delay),路由器将尝试重传该LSA。
transmit-delay时间;默认值:1 链路状态发送延迟是指在接口上发送链路状态更新报文所需的估计时间。
类型广播| nbma | PTP | PTMP | PTP -unnumbered | virtual-link;默认值:广播 接口上的OSPF网络类型。注意,如果没有接口配置,则PtP接口的默认网络类型为“点对点”,其他所有接口的默认网络类型为“广播”。
  • 广播-网络类型适用于以太网和其他支持组播的链路层。选择指定路由器
  • nbma—非广播多路接入。协议报文被发送到每个邻居的单播地址。需要手工配置邻居。选择指定路由器
  • 20元-适用于只有两个节点的网络。不选择指定路由器
  • ptmp点对多点。比NBMA更容易配置,因为它不需要手动配置邻居。不要选择指定的路由器。这是最强大的网络类型,因此适用于无线网络,如果“广播”模式不能很好地为他们工作
  • ptp-unnumbered -工作原理与ptp相同,只是远端邻居没有与特定ptp接口关联的IP地址。例如,在Cisco设备上使用未编号的IP。
  • virtual-link -用于建立虚连接。
vlink-neighbor-id知识产权 指定了路由器id需要通过虚连接连接的邻居的名称。
vlink-transit-area名字 两台路由器共有的非骨干区域,虚连接将在该区域上建立。stub区域不能建立虚连接。

文理学院

子菜单:/ / ospf路由/救生设备

当前在LSA数据库中的所有LSA的只读列表。

财产 描述
年龄整数 上次更新发生在多久以前(以秒为单位)
区域字符串 LSA所属的区域。
身体字符串
校验和字符串 LSA校验和
动态是|否
冲洗是|否
id知识产权 LSA记录ID
实例字符串 LSA所属的实例名。
链接字符串
link-instance-id知识产权
发起者知识产权 LSA记录的发起者。
self-originated是|否 LSA是否来源于路由器本身。
序列字符串 日志含义一条链路的LSA更新次数。
类型字符串
包着的字符串

邻居

子菜单:/ / ospf路由/邻居

当前激活的OSPF邻居的只读列表。

财产 描述
地址知识产权 OSPF邻居路由器的IP地址
邻接时间 邻接关系形成后经过的时间
区域字符串
bdr字符串 备份指定路由器的IP地址
评论字符串
db-summaries整数
博士知识产权 指定路由器的IP地址
动态是|否
不活跃的是|否
实例字符串
ls-requests整数
ls-retransmits整数
优先级整数 邻居配置的优先级
路由器id知识产权 邻居路由器的RouterID
状态down | attempt | init | 2-way | ExStart | Exchange | Loading | full
  • 下来—没有收到邻居的Hello报文。
  • 尝试—仅适用于NBMA云。表示最近没有收到邻居的信息。
  • 初始化—收到邻居的Hello报文,但没有建立双向通信(RouterID没有列在Hello报文中)。
  • 双向—该状态表示双向通信已经建立。在此状态下进行DR和BDR选举,路由器根据路由器是DR还是BDR建立邻接关系,链路是点对点还是虚连接。
  • ExStart—路由器尝试建立用于报文信息交换的初始序列号。ID较高的路由器成为主路由器并开始交换。
  • 交换—路由器交换DD (database description)报文。
  • 加载—在这种状态下,交换实际的链路状态信息。Link State Request报文发送给邻居,请求在Exchange状态下发现新的lsa。
  • 完整的—邻接关系完全,邻居路由器处于完全邻接状态。相邻路由器之间同步LSA信息。路由器只有在自己的DR和BDR中才能达到full状态,P2P链路除外。
状态改变整数 OSPF自邻居识别以来状态变化的总数

静态邻居配置

子菜单:/ / ospf路由/ static-neighbor

OSPF邻居的静态配置。适用于非广播多址网络。

财产 描述
地址IP % iface;强制性的 单播IP地址和接口,用来到达邻居的IP地址。例如,地址=1.2.3.4%ether1表示有IP地址的邻居为1.2.3.4可在ether1接口。
区域名字;强制性的 邻居所属区域的名称。
评论字符串)
禁用是|否)
实例id整数(0 . . 255];默认值:0
轮询间隔时间;默认值:2米 多长时间向处于“down”状态(即没有来自它们的流量)的邻居发送hello消息?