网络问题 OSPFv3的邻接图关系建立后的状态为Full OSPF协议使用2-way状态表示邻居关系已经建立?

本文基于RFC2740介绍了OSPFv3OSPFv2的区别和实现对继承OSPFV2的内容可以参考RFC2328,这里不再赘述

V2基础上开发的支持IPV6的协议,它使用的仍然是链路状态算法OSPFV2的基本机制,如洪泛(flooding)、DR选举、區域划分、SPF算法保持不变相对于OSPFV2OSPFV3最大的变化就是对IPV6地址的支持以及对IPv6体系架构的兼容。另外OSPFv3OSPFv2的基础上,对功能做了增强

IPv6中使鼡地址/前缀长度描述地址,而没有子网掩码的概念IPv6中的链路(Link)就类似于IPv4中子网或网络。因此本文中也使用链路(Link)表达类似的意思。

OSPFv3保留了OPSFv2的大部分机制为了支持IPv6地址、IPv6报文结构和体系,OSPFv3主要做了以下修改:

IPv6使用链路(link)表示节点赖以在链路层通信的媒介或工具Interface連接到链路上。多个IPv6地址前缀可以分配到一个单独的链路上;对连接到链路上的两个节点即使他们的IPv6地址前缀不同,也可以直接通信

楿应的,OSPFv3也是运行在链路上而不象IPv4中是基于网段的。链路的概念取代了OSPFv2中的网络和子网因此,我们说OSPF接口是连接到链路上而不是子网仩

OSPFv3中,OSPF协议报文头和大部分LSA中去掉了地址部分从而与网络层协议无关。具体说来有以下方面:

LSA的洪泛范围归纳为3类放在LSALS类型域(field)。这三类是:

OSPFv3支持在单链路上运行多实例这使得多个供应商在共享一台甚至多台网络设备的情况下,仍然可以保持各自网络的独立運行在OSPFv2中,是通过设置不同的OSPF验证来实现的

在单链路上运行多实例是通过在OSPF报文头和OSPF接口数据结构中包含实例号(Instance ID)做到的。实例号呮影响OSPF报文接收

IPv6中的本地链路地址用于单链路上的邻居发现,无状态自动配置等等对于以本地链路地址作为源地址的报文,IPv6路由器不莋转发本地链路单播地址范围是FF80/10

OSPFv3假定每个路由器的物理接口都分配了本地链路单播地址除了虚连接以外,所有的OSPFv3接口都使用本地链蕗单播地址作为报文的源地址路由器从链路上学到其他路由器的本地链路单播地址,再使用这些地址作为转发报文的下一跳

虚连接使鼡全球范围地址或本地站点地址作为OSPF报文源地址。

OSPFv3的认证依赖于IPv6报文的认证头和IP封装安全有效载荷报头OSPFv3通过这些IP报文头来确保路由交换嘚完整性和认证/保密。

OSPFv3报文利用IPv6标准的16位完整校验和防止报文数据的随机错误该校验和覆盖了整个OSPF报文和伪IPv6头。

OSPFv3报文直接封装在IPv6报文中OSPFv3报文头中去除了素有的地址相关字段,做到与网络协议无关所有的地址信息都放在各种LSA中。OSPFv3报文的具体变化有(分别见图一——图三):

OSPFv3的报文头如下图所示:

OSPFv3LSRLSAck报文的发送保持不变。HelloDDLSU报文的发送有所不同。

M: More表明接下来还有DD报文

LSA头和Router-LSANetwork-LSA中去掉了所有的地址内嫆。Router-LSANetwork-LSA描述了路由域的拓扑结构而该结构与具体的网络层协议无关。增加了新的LSA用来分发IPv6地址信息和下一跳信息一些IPv4中的LSA名称改变了,以保持所有LSA意思的一致性LSA的具体变化有:

IPv4中,router-LSA携带了路由器的IPv4接口地址该地址与IPv6中的本地链路地址相当。只在OSPF计算路由的下一条時会用到这些地址信息因此,Router-LSA中的这些地址信息不需要传播到本地链路以外的区域IPv6中使用Link-LSA分发这些地址更为有效。而仅仅通过接收Hello报攵路由器是无法学到本地链路地址的:在NBMA网络上,路由器和下一条路由器不一定会交互Hello报文他们是通过DR来感知对方的存在。

ID来标识的哋址信息和Router ID被放在LSA体中

ID。因此这两类LSA也是目前唯一对长度不作限定的LSANetwork-LSA必须包含本链路上的所有路由器;Link-LSA必须包含本链路上的所有路甴器的本地链路地址。

OSPFv3能够处理未知类型的LSA对于未知类型的LSA,可以只在本地链路范围发送也可以把它当作一种已知的类型洪泛。具体嘚处理方式取决于link state

IPv6中需要路由器在单个链路上提供对报文的多种处理。IPv4中对未知类型报文直接丢弃的做法已经不适用了当DR比链路上其他路由器支持的Option类型少时,直接丢弃报文会产生问题

IPv4中设置Stub区域减小了区域内部路由器的链路数据库和路由表规模。这使得在大规模OSPF路由域内的路由器只占用了很少的资源

与上一版本不同的是,OSPFv3允许不能识别类型的LSA被当作已知类型洪泛无节制的加入未知类型LSA可能導致Stub区域的链路状态数据库超过路由器的处理能力。

为防止这种现象的发生必须同时满足下列两个条件的LSA才可以在Stub区域内洪泛:

ID来识别;对broadcastNBMAp2mp上的邻居用他们的IPv4接口地址来识别。在OSPFv3中所有链路上的邻居路由器是由他们的Router ID来识别的。这样的变化使得OSPF报文的接收、邻居发現有了相应的变化

IPv4IPv6,基本的OSPF机制保持不变详细内容请参加RFC2328 Section4。归纳起来两者的共性主要体现在以下几个方面:

在保留大部分OSPFv2机制嘚同时,部分机制有了变化下面描述OPSFv3的具体实现方法。

主要的数据结构是不变的分为:区域数据库,接口数据库邻居数据库,链路狀态数据库和路由表Top-level数据结构与RFC2328 Section 5中列出的一致。对数据库主要做了下列修改:

OSPFv3中路由器通过接口连接到链路。OSPFv3的接口数据结构相对於OSPFv2做了以下修改:

路由器的每个接口都分配了接口ID用来唯一的标识这些接口。例如有些应有会用MIB-II IfIndex作为接口ID接口ID出现在:该接口发送的Hello報文中;路由器向连接该接口的链路发送的link-local-LSA中;所属区域的Router-LSA中。链路上的DR发送的network-LSA中把本设备该链路上的接口ID作为link

1即给其余的接口分配Instance ID 1。這样OSPF的发送和接收过程就能保证两个团体的独立

该列表包括了所有洪泛范围为本地链路范围的LSA,也包括这样一些LSA他们是由连接到该链蕗的接口的接口数据结构中包含的链路产生或传播的。该列表包含了本链路的Link-LSA

该数据结构包括所有未知LS类型和’U-bit’设为0(对未知LS类型,認为该LSA传播范围为本地链路范围)

OSPFv3中几乎所有报文的源地址都是发送接口的本地链路地址,只有虚连接除外:在虚连接上发送的报文必須使用路由器的本地站点地址或IPv6全球地址作为接口IP地址

路由器在Link-LSA中会通告本链路上的IPv6前缀列表。这样链路上的DR就可以在intra-area-prefix-LSA中通告这些地址

OSPFv3中,每个路由器接口有唯一的metricmetric代表了该接口发送报文的花费。OSPFv3的认证依赖于IPv6报文的认证头和IP封装安全有效载荷报头OSPFv3通过这些IP报文頭来确保路由交换的完整性和认证/保密。因此关键字AuTypeAuthenticationOSPF接口无关。

OSPFv3中邻居数据结构的作用不变:收集所有建立邻接图关系需要的信息每个数据结构绑定到单个的OSPF接口上。IPv6中定义的邻居数据结构与RFC2328中的定义有以下差异:

邻居数据结构必须记录邻居发出的Hello报文中的接口ID茬两种情况下,路由器发布的Router-LSA会包含邻居的接口ID

OSPFv3中邻居IP地址是对方的本地链路地址。虚链路除外

邻居选举出的DRRouter ID来标识,而不象過去用IP地址标识

邻居选举出的BDRRouter ID来标识,而不象过去用IP地址标识

邻居状态、事件和邻居状态机保持不变,可参加RFC10.210.3判断是否建立鄰接图关系不变,可参加RFC

OSPFv3直接运行在IPv6网络层之上,因此OSPFv3报文被封装在一个或多个IPv6报文头之后,而其紧邻的前一个报文头Next

OSPFv2一样除了保持邻居关系的Hello报文外,其他的OSPF协议报文只发给建立邻接图关系的邻居OSPFv3报文类型和功能与OSPFv2报文一致,在标准OSPF报文头Type域中标明

IPv6路由器发送OSPF协议报文时,如下填充标准IPv6 OSPF报文头的各个域:

包括标准OSPF报文头在内的整个OSPF报文的字节数

标识发送报文的路由器本身。

接收OSPF报文的区域號

绑定发送OSPF报文的接口的OSPF实例号。

标准IPv6 16位报文完整校验和覆盖了整个OSPF报文和IPv6伪头。

8.1目的地址从建立邻接图路由器的AllSPFRoutersAllDRouters和邻居IP地址中選取在IPv6中,除了虚连接外都是选择对方的本地链路地址。

OSPFv3中发送Hello报文有如下改变:

Hello报文中Option域不能识别的位应清空。

DD报文中Option域不能识別的位应清空

当路由器收到OSPF协议报文时,他用接收接口对报文进行标记对于配置虚连接的接口,可能无法立即找到标识接口在下面嘚描述中,我们都假设报文不是来自虚连接链路

处理OSPFv3报文前,必须对封装OSPFv3报文的IPv6报文头做如下检验:

在处理完IPv6报文头后紧接着处理OSPF报攵头。OSPFv3报文头的字段必须服从如下规则否则报文将被丢弃:

ID是虚连接另一端的路由器Router ID。接收接口也配置在该虚连接中通过以上检查后,路由器接收该报文并把该报文绑定到虚连接上

报文头处理完后,报文按照不同的OSPF报文类型来处理

Hello报文,送给Hello协议处理其他报文則只在建立邻接图的双方收发。这也意味着发送报文的路由器是active的邻居

除了Hello报文外,其他报文的接收机制不变

Hello报文的接收有如下变化:

OSPFv3的路由表项与OSPFv2相似:包含IPv6地址前缀表项,ASBR表项后者只是建立路由表过程中的一个中间结果。

为了保持SPF运算中每个区域的中间结果每個区域有各自的路由表,路由表包含的表项如下:

ID来标识;这些路由表项包含到路由器的最短路径集路由器用Intra-area-prefix-LSA发布自己产生的IP地址前缀時,会用到这些信息;对于ABR这些信息也用于计算到区域内部地址前缀的路径。

路由表查找(即决定指导IP转发的最佳路由项)保持不变

丅面将详细介绍这些变化。

该域从8位扩展到16位前两位表示洪泛的范围,接下来的位表示对未知的LSA类型的处理

该字段长度保持32位不变,泹是除了network-LSAlink-LSA外其他LSA中的该值已经没有了地址意义。比如一个支持IPv6的路由器在生成多个ASE时,可以给他们依次分配Link State ID:第一个分配0.0.0.1;第二个汾配0.0.0.2等等这时,Link State ID已不具备地址意义只是为了区分单个路由器产生的多个LSA的一个标识。

LS Type: 9种类型, 其中67两种不属于基本类型

ID和发布路由器三个字段的组合唯一确定的对同一条LSA的两个实例而言,通过LSALS Sequence Number来判定哪一条是最近发布的当出现一样的情况,使用LS

重新生成LSA的过程鈈变:LSALS sequence number增加LS age0,重新计算checksum后加到链路状态数据库中从特定的接口发布。

除了RFC2328 Section12.4中描述的触发重新生成LSA的事件外OSPFv3增加了如下的触发事件/动作:

下面的章节详细叙述了7LSA的结构。

----- 每个路由器生成描述本路由器的链路状态和花费,只在路由器所处区域内传播

Metric: 到其他区域的蕗由器的花费

----- 由自治系统边界路由器ASBR生成描述到达其它AS的路由,传播到整个ASStub区域除外)AS的缺省路由也可以用AS-external-LSAs来描述。

E: 1, 表明为Metric为苐2类外部路由的花费

----- 路由器为每一条链路生成一个Link-LSA在本地链路范围内传播。每一个Link-LSA描述了该链路上所联系的IPv6地址前缀包含Link-local地址。

3个參数表明引用的是哪条router-LSAnetwork-LSA以及产生这条LSA的路由器。报文中的地址前缀信息即为相应路由器或网段/链路的地址前缀

其余各个域的意义同仩。

大多数的OSPFv2中的洪泛机制保持不变可参见RFC2328 Section13。完全继承的部分有:

洪泛范围的修改和对未知LS类型的报文处理使得洪泛机制有了变化:LSU的收发必须考虑LSA的洪泛范围和’U-bit’设置;另外由于IPv6中对LSA的类型和内容进行重组,在数据库中加入一条LSA也会触发不同的事件下面对这些内嫆进行详细描述。

LSU的接收与以前不同这些变化是因为在LS type中包含了洪泛范围,以及处理未知LS类型报文的需要在IPv4中,要检验LSU中的每一条LSA檢验的8个步骤详见RFC2328

2)检验LS type。丢弃下列LSA转而处理LSU中的下一条:

3LSA的洪泛范围置为’reserved’。丢弃该LSA转而处理LSU中的下一条。

发送LSU的步骤不變可参见RFC2328 Section 13.3。在OSPFv3中洪泛LSA的合法接口不同了,接口的选择基于以下因素:

因此合法接口的选择有以下三种情况:

情况1LSALS类型已知

此时,合法接口集取决于LS type中的洪泛范围

对洪泛范围为’AS-flooding-scope’LSA,合法接口集合包括除虚连接外的所有路由器接口此外,ASE不从连接到Stub区域的接ロ发送

对洪泛范围为’link-local flooding scope’LSA,合法接口只包含一个接口就是路由器连接到这条链路上的接口,该接口也是收到这条LSA的接口

情况2:未知LS类型且’U-bit’0

认为该LSA洪泛范围为本地链路范围。合法接口只包含一个接口就是路由器连接到这条链路上的接口。

情况3:未知LS类型且’U-bit’1

这时合法接口的选择与情况1类似,要排除连接到Stub区域的接口

有时候,在将一条LSA加入指定邻居的链路状态重传列表时还需要其他條件。如果路由器能识别LS Type而他的邻居不能(可以从邻居发出的DD报文的Option字段判定)并且此时LSA’U-bit’置为0,当且仅当邻居是DRBDR时将该LSA加入鄰居链路数据库重传队列。除了group-membership-LSA外我们假定前面提到的9LSA都能被所有的路由器识别。对于group-membership-LSA只有MOSPF路由器才能识别,它的’U-bit’是置0的仅當一个non-MOSPF邻居路由器是DRBDR时,该邻居才转发这类LSA

由于数据库被分为独立的三个部分,添加LSA也相应的分为三种情况:

在向链路状态数据库中加入LSA时必须检查LSA的内容是否改变。当LSA的内容改变时根据LSA类型的不同,路由表的如下部分必须重新进行计算:

当得到一条LSA的新的实例时该LSA的旧的实例必须从数据库中清除,同时所有邻居的重传请求队列中也应该去掉该LSA

除了以下情况外,OSPFv3对虚连接的定义不变:

l         接口范围必须是站点本地或全球范围地址而不是被其他接口类型使用的本地链路地址。站点本地或全球范围地址才能用于虚连接的协议报文源地址;

路由表计算过程中OSPFv3OSPFv2的区别有:

路由表变化触发的事件以及等价路由保持不变。

ASE的计算有如下修改:

当单个ASE改变时可以不对整个蕗由表进行重新计算。

OSPFv3中路由器可能有多个接口连接到单个链路上,所有的接口都收发数据报文但只有一个接口收发OSPF控制信息,具體实现如下:

ID但是接口ID不是接收接口的ID时;

l         如果选出的收发控制报文的接口失败,另一个接口将接替他的工作从新建立邻接图关系。通过其他接口停止收到该接口发出的hello报文路由器可以侦测到接口失败。

我要回帖

更多关于 什么是邻接 的文章

 

随机推荐