ospf邻接关系的建立过程

合集下载

OSPF协议原理及配置详解

OSPF协议原理及配置详解

OSPF协议原理及配置详解OSPF(Open Shortest Path First)是一种用于计算机网络中的内部网关协议(IGP),用于在大型网络中动态确定数据包的传输路径。

其算法基于Dijkstra最短路径算法,并支持IPv4和IPv6网络。

OSPF的工作原理如下:1. 链路状态数据库(Link State Database):每个OSPF路由器都维护着一个链路状态数据库,其中存储了它所连接的所有网络的信息,包括链路的状态、带宽、延迟等。

每个OSPF路由器通过发送链路状态更新(Link State Update)将自己的链路状态信息告知其他路由器。

2.路由器之间的邻居关系建立:OSPF路由器之间通过邻居发现过程建立邻居关系。

当一个OSPF路由器启动时,它会向网络广播HELLO消息来寻找其他路由器。

当两个路由器之间收到彼此的HELLO消息时,它们可以建立邻居关系。

3. 路由计算:每个OSPF路由器通过收集链路状态信息来计算最短路径。

路由器将链路状态信息存储在链路状态数据库中,并使用Dijkstra 最短路径算法来确定到达目标网络最短路径。

4.路由更新:当链路状态发生变化时,OSPF路由器将会发送更新消息通知其他路由器。

其他路由器接收到更新消息后,会更新自己的链路状态数据库,并重新计算最短路径。

OSPF的配置如下:1. 启用OSPF协议:在路由器配置模式下使用"router ospf"命令启用OSPF协议。

2. 配置区域(Area):将网络划分为不同的区域。

在配置模式下使用"area <区域号> range <网络地址> <网络掩码>"命令将网络地址加入到区域中。

3. 配置邻居:使用"neighbor <邻居IP地址>"命令来配置OSPF邻居关系。

邻居IP地址可以手动配置或通过HELLO消息自动发现。

OSPF邻居关系建立过程详解

OSPF邻居关系建立过程详解
3.init
当OSPF接口收到链路上某个邻居发来的第一个HELLO包的时候,它会在接口上将该邻居置为init状态,注意这个hello包中可能并未包含任何的邻居信息。但是这至少证明,我这个OSPF接口在这个链路上,至少有个活的邻居。下面是一个没有发现任何active neighbor的hello包:
4.Two-way
指定路由器DR和一个备份指定路由器BDR。
3.非广播多址网络(NBMA)
NBMA网络,像X.25、帧中继和ATM等,可以连接两台以上的路由器,但是他们没有广播数
据包的能力。在NBMA网络上的OSPF路由器需要选举DR和BDR,并且所有的OSPF报文都是单播的。
4.点到多点网络(Point-to-Multipoint)
下面是一个装载了LSA头部的DBD消息:
7.loading 状态
OSPF router使用LSR去请求LSA的详细信息,对方使用LSU发来更新,因此只有LSU里才有LSA的完整信息。在收到LSU后,一方面本地使用LSAack进行确认,另一方面将LSU中包含的LSA装载进自己的LSDB。
以下是一个LSR消息,非常的简单:
I位 或称为初始位(initial bit)用于ex-start协商主从关系的初始化协商的DBD包,该位置1
M位 或称为后继位(More bit) 如果这不是OSPFrouter发送的最后一个DBD,该位置1
MS位 或称为主/从位(Master/slave bit) 如果始发路由器是Master,则该位置1
在这里我们有个地方需要留意,我们通常说,OSPF路由器A与B进入了xx状态,其实这句话并不严谨,原因之一,是因为OSPF是接口敏感型协议,许多的操作都是以OSPF接口作为立足点去考虑的,譬如邻居关系的建立,再如DR和BDR,我们不能说一台路由器是DR,准确的说,应该是某路由器的某个接口是DR;再者,说两台路由器之间是xx状态,这个也不严谨,所谓的邻居状态,必须是以某台路由器为观察点,在其某个接口上观察到的某个邻居的状态,因此可能出现的一个情况是,在A上,看到的B的状态为Loading,但是在B上,A的状态已经是FULL了。

OSPF建立邻接关系的过程

OSPF建立邻接关系的过程

OSPF建立邻接关系的过程OSPF 建立邻接关系的过程2008-10-29 23:15:50| 分类:Cisco | 标签:ospf 邻居| 字号大中小订阅首先要了解这个过程中涉及到的几种分组:(1)Hello 分组:这是一台路由器告诉其他路由器自己存在的一种方式。

Hello 分组会定期发送,以告诉其他路由器自己还活着。

(2)DBD 分组:数据库描述,这是链路状态的一个概况,可以把它看做是链路状态的一个目录,其中包含它知道的所有路由器的ID ,以及各条链路的序列号(用来判断链路的新旧程度)。

(3)LSU 分组:链路状态更新,这是真正的链路状态信息,也就是通往某个目标的详细路径信息。

(4)LSR 分组:用来请求一个链路状态信息。

(5)LSAck 分组:对其他分组进行确认。

还有一个概念就是LSDB (链路状态数据库),它保存所有链路状态信息。

下面我们结合在R1 上执行debug ip ospf events 的输出(该输出来自互联网),来详细说明建立的步骤:1.R1的OSPF接口开始向外发送Hello分组,发送的时候使用组播,组播地址是224.0.0.5。

这个Hello 分组包含一些重要的信息:路由器ID、DR/BDR 、区域号、优先级等,以及R1 知道的所有邻居的列表(这时侯为空)。

*Apr 8 00:47:54.059: OSPF: Interface FastEthernet0/0 going Up *Apr 8 00:47:54.059: OSPF: Send hello to 224.0.0.5 area 0 on FastEthernet0/0 from 10.1.1.12.R2 收到Hello 分组后,会将R1 加入到自己的邻居表中,邻居表中除了从Hello 分组中得到的信息之外,还会从承载Hello 分组的IP 数据包中得到源IP 地址(R1 某个接口的IP 地址),以及本路由器收到这个分组的接口。

OSPF_协议的解析及详解

OSPF_协议的解析及详解

OSPF_协议的解析及详解OSPF协议的解析及详解OSPF(Open Shortest Path First)是一种内部网关协议(IGP),用于在IP网络中实现动态路由。

本文将对OSPF协议进行解析和详解,包括其基本概念、工作原理、路由计算算法、协议报文格式以及配置和故障排除等方面的内容。

一、基本概念1.1 OSPF协议OSPF是一种链路状态路由协议,通过交换链路状态信息来计算最短路径,并维护路由表。

它基于Dijkstra算法,具有快速收敛、可扩展性强等特点。

1.2 OSPF区域OSPF将网络划分为不同的区域,每个区域由一个区域边界路由器(Area Border Router,ABR)连接。

区域之间通过区域边界路由器进行路由信息的交换。

1.3 OSPF邻居关系OSPF通过建立邻居关系来交换路由信息。

邻居关系的建立是通过Hello报文来实现的,Hello报文中包含了路由器的标识、优先级、网络类型等信息。

二、工作原理2.1 OSPF路由计算OSPF使用Dijkstra算法来计算最短路径。

每个路由器维护一个链路状态数据库(Link State Database,LSDB),其中保存了所有邻居路由器发送的链路状态信息。

根据LSDB中的信息,路由器计算出最短路径树,并更新路由表。

2.2 OSPF的路由选择OSPF使用最短路径优先(Shortest Path First,SPF)算法来选择最优路径。

SPF算法考虑了路径的成本(Cost),成本越低的路径被认为是最优路径。

2.3 OSPF的路由更新OSPF使用链路状态通告(Link State Advertisement,LSA)来更新路由信息。

当网络拓扑发生变化时,路由器会生成LSA,并向邻居路由器发送更新信息。

邻居路由器收到LSA后,更新自己的链路状态数据库,并重新计算最短路径。

三、协议报文格式3.1 Hello报文Hello报文用于建立邻居关系。

它包含了路由器的标识、优先级、Hello间隔等信息。

华为OSPF理论和配置命令

华为OSPF理论和配置命令

OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径。

OSPF的收敛过程由链路状态公告LSA(Link State Advertisement)泛洪开始,LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息。

收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(Link State Database),并在LSDB的基础上使用SPF算法进行运算,建立起到达每个网络的最短路径树。

最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中。

OSPF直接运行在IP协议之上,使用IP协议号89。

OSPF有五种报文类型,每种报文都使用相同的OSPF报文头。

Hello报文:最常用的一种报文,用于发现、维护邻居关系。

并在广播和NBMA(None-Broadcast Multi-Access)类型的网络中选举指定路由器DR(Designated Router)和备份指定路由器BDR(Backup Designated Router)。

DD报文:两台路由器进行LSDB数据库同步时,用DD报文来描述自己的LSDB。

DD报文的内容包括LSDB中每一条LSA的头部(LSA的头部可以唯一标识一条LSA)。

LSA头部只占一条LSA的整个数据量的一小部分,所以,这样就可以减少路由器之间的协议报文流量。

LSR报文:两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地LSDB 所缺少的,这时需要发送LSR报文向对方请求缺少的LSA,LSR只包含了所需要的LSA的摘要信息。

LSU报文:用来向对端路由器发送所需要的LSA。

LSACK报文:用来对接收到的LSU报文进行确认。

邻居和邻接关系建立的过程如下:Down:这是邻居的初始状态,表示没有从邻居收到任何信息。

Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。

OSPF邻居-邻接关系建立

OSPF邻居-邻接关系建立

OSPF邻接关系建立过程:分两大步骤七种状态:1、建立邻居关系:建立双向通信:DOWN:没有检测到活动邻居INIT:路由器(R2)收到对方(R1)的hello包,并将R1加入到R2的邻居表中,R2成为INIT状态Two-way:收到hello的R2将单播回复R1一个hello,其中包含R2的所有邻居路由器,包括路由器R1。

R1收到来自R2的hello后,发现其中包含有自己的信息,则R1将R2加入到自己的邻居列表中。

R1,R2都处于Two-way状态。

第一步完成后,R1,R2形成邻居关系!2、建立邻接关系:R1,R2成为邻居后,如果在多路访问的广播网络中,R1,R2便选举DR,BDR。

注:新网络的DR,BDR的选举是在two-way状态后完成的,并且DR,BDR是非抢占的,并且DRother只能与DR或BDR建立邻接关系,DRother之间只能建立邻居关系(Two-way状态)。

建立邻接关系的机制是为了减少路由形成的冗余度,成为邻接关系最终是为了能够形成路由,能够转发数据包,所以就要进行发现网络路由和添加链路状态条目1)、发现网络路由:Exstart:确立主从关系,在DR和BDR,DR和DRother,BDR 和DRother之间确立主从关系,Router ID大的为主路由器。

Exchange:发送DBD(LSDB摘要),发现需要更新的LSA的条目2)、添加链路状态条目:Load:交换LSR,LSU以填充LSDB,完成链路状态条目更新。

Full:完全邻接状态。

LSA:链路状态通告DR:制定路由器,只作用于接口,因为邻接关系是基于接口的,而DR是为邻接关系服务的。

也就是说,DR是链路级的,每个网段(MA网络)都有自己DR和BDR。

BDR:备用DR。

ospf协议的工作原理

ospf协议的工作原理

ospf协议的工作原理OSPF(Open Shortest Path First)协议是一个用于路由选择的链路状态路由协议,它通过收集链路信息并计算最短路径来确定网络中的最佳路径。

OSPF协议的工作原理如下:1. 邻居发现:启动OSPF路由器会发送Hello消息来探测相邻路由器,通过相互交换Hello消息来建立邻居关系。

邻居关系是通过比较OSPF路由器配置中的OSPF区域号、认证密码和虚拟链路等参数来判断的。

2. 路由器地图:每个OSPF路由器维护一个链路状态数据库(Link State Database,LSDB),其中存储了与其他路由器相邻链路的信息。

这些信息包括链路的状态、度量值(通常是链路带宽)和与链路关联的路由器。

3. 路由计算:每个OSPF路由器使用Dijkstra算法在链路状态数据库上进行计算,以确定到达网络中其他路由器的最短路径。

该算法通过比较路径的度量值来选择最佳路径。

4. 路由更新:一旦计算出最短路径,OSPF将把这些路径信息发送给相邻路由器。

路由器之间使用链路状态更新(Link State Update)消息来交换路由信息。

5. 路由表生成:每个OSPF路由器使用从相邻路由器接收到的链路状态更新消息来更新其路由表。

它选择最佳路径并将其添加到路由表中。

6. 路径维护:OSPF协议不仅在路由计算时选择最佳路径,还在路径维护过程中对网络进行监控。

当链路状态发生变化(例如断开连接、带宽变化等)时,OSPF会使用链路状态通告(Link State Advertisement)消息更新链路状态数据库,并重新计算路径。

通过上述步骤,OSPF协议能够建立网络中的最佳路径,并在网络发生变化时及时更新路径信息,确保数据在网络中的快速传输。

OSPF邻居、邻接关系

OSPF邻居、邻接关系

邻居关系和邻接关系。

如果两台路由器之间共享一条公共数据链路(两台路由器中间没有其它路由器,或者两台路由器之间存在虚连接),并且成功协商了hello包中所指定的参数,那么它们就成为邻居。

如果两个邻居之间需要同步LSDB,那么它们之间需要建立邻接关系。

如果两个路由器之间建立了邻接关系,那么它们的LSDB一定是同步的。

LSA只在存在邻接关系的路由器之间传递。

那么邻居关系和邻接关系怎么建立呢?邻居关系通过hello报文来建立。

Hello报文中包含如下一些内容:1、始发路由器的router-id2、始发路由器接口的area-id3、始发路由器接口的地址掩码4、始发路由器接口的authentication type和authentication message5、始发路由器接口的hello-interval6、始发路由器接口的router dead-interval7、路由器优先级8、指定DR和BDR9、标识可选性能的5个标志位10、始发路由器的所有有效neighbor router-id(始发路由器接收到了它们的hello报文)以两台路由器之间建立邻居关系为例:1、R1发送hello报文(组播或者单播,链路层类型来定),neighbor字段为空2、R2收到hello报文,为R1建立一个邻居数据结构,并把R1的邻居状态臵为init,然后向R1发送hello报文,neighbor字段中包含R1的rougerID,表示自己收到了R1的hello报文。

3、R1收到R2的hello报文之后,为R2建立一个邻居数据结构,并把邻居状态臵为2way,然后向R2发送hello报文,报文的neighbor字段中包含R2的routerID。

4、R2收到R1的hello报文后,把R1的邻居状态臵为2way至此,邻居关系就建立起来了,邻居路由器之间会按时发送hello报文进行保活,如果hello 报文超时,那么该路由器就会宣告这里邻居失效。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运行OSPF协议的路由器,如果你想正常运转的话,那么就得和其他的路由器建立完全邻接的关系。

因为这种状态下,同一个区域中的所有的路由器的LSDB都是完全同步的、一致的。

呵呵、、、其实呢,应该反过来说,当同一个区域中的所有的路由器的LSDB的完全同步、一致的情况下,OSPF路由器才算是达到了这个完全邻接的状态!
有这么几个过程:
OSPF 处于down 状态----àInit状态-----à双向(two—way)状态-----à邻接状态--à预启动( exstart )状态------à交换(exchange )状态----à完全( full )邻接状态!
当配置了OSPF的路由器刚刚启动的时候,这个协议还是处于down的状态的,为什么呢?因为还没有其他的路由器和他交换信息啊。

所以他接下来要做的就是通过所有的OSPF接口向外发送HELLO分组,并且分组的目标地址是224.0.0.5 (这个地址代表的是哪些路由器呢?我认识吧,他代表的是与发送HELLO分组的路由器直接相连的那些路由器,就是指的那些直连路由器。

并且在这里需要说明的是,HELLO分组不会被路由,这个HELLO分组的行程只有一跳。

那我们看到的“HELLO分组在整个区域中的多个路由器之间进行扩展”又该如何解释呢?HELLO分组在同一个区域中的多个路由器之间进行扩展,运用的不是路由功能,而是一个路由器发送这个HELLO分组到了直接相连的所有的路由器后,这些路由器就复制一个副本,并且将自己的信息添加进去后,就还是运用目标地址为224.0.0.5来分发这个HELLO分组到与自己直接相连的各个路由器上。

就这样一直下去,以此类推!)
所有的直连OSPF路由器接收到这个路由器发送来的HELLO分组后,就将这个路由器加入到邻居列表中。

这就是Init状态!(这里说的这个“邻居列表”说的是HELLO分组中的数据部分。

如果不理解的话,可以去看看5种类型的OSPF 分组的格式)
所有的这些收到HELLO分组的路由器,都会向发送这个HELLO分组的路由器发送一个单播应答分组;其中包含着自己的信息(因为人家这个路由器也不是死的啊,人家也同时在进行这个过程啊,人家也有自己的一些邻居啊),这个发回去的应答分组中的“邻居列表”中自然是包含那个开始发送这个HELLO分组的路由器了。

现在这个应答分组就是返回给他的。

原来那个路由器接收到这个应答分组后,先看看这个邻居列表中是否包含自己。

如果包含自己的话,就说明一个问题:即对方已经知道我的存在了。

并且接下来就将这个HELLO分组中带来的那些邻居表中包含的路由器ID加入到自己的LSDB中。

这样一来呢,这些路由器就建立了双向(two-way )状态。

到此为止,所有的路由器之间都建立了双向状态,即路由ID彼此出现在对方的邻居列表中;
接下来,要看看网络类型,确定下是否有必要进行DR与BDR的选举。

如果这个网络属于广播类型的网络(如以太网),那么就需要进行选举。

具体的选举过程可以自己去查阅相关的资料。

选择了DR与BDR后,那么网络中的路由器都
只与这种身份的路由器建立双向邻接关系,然后路由器之间才能进行交换链路状态信息。

注:当一个路由器加入到已经有DR与BDR的广播网络时,将同所有的路由器(包括DR、BDR、DROTHER)建立双向状态,但是只与DR与BDR建立双向邻接关系!并且我们需要知道的是,网络中的所有的路由器都会定期的进行HELLO包的交换,以确保通信不中断。

默认的时间间隔是10S。

这个HELLO分组中包含DR、BDR与一个路由器列表,其实他们都是邻居,也可以说是已经相互建立了双向状态的路由器。

还想来分析下这个“双向状态”与“邻接”状态的不同之处:
双向状态:这个状态下的路由器之间定期进行交换的是HELLO分组,通过这个HELLO分组可以学习到的是所有可能存在的邻居。

这个定期的交换,指的是10S 一次,并且这个对象说的是同一个区域中的所有的路由器,他们相互之间都会定期的进行这个动作,而不是某些具备特定条件的路由器才进行定期的交换!
邻接状态:这种状态是在“双向状态”状态下的一种提升。

且,这种状态下进行交换的已经不是HELLO分组了,而是LSU了。

并且,这种动作并不是定期的,而是触发式的,即只要有链路状态的改变,就会进行相应的LSU的建立、发送。

并且这个动作也不是发生在同一个区域中的所有路由器之间了。

而是发生具有特定身份的路由器之间的。

即发生在一个普通的路由器(DROTHER)与一个特殊角色路由器(DR/BDR)之间。

上面是选举了DR、BDR,各个路由器与DR、BDR建立了双向邻接关系,此时路由器就是处于预启动(exstart)状态了。

这个状态下,路由器已经做好了发
现有关互联网络的链路状态信息并建立LSDB的准备。

处于预启动状态后,DR与BDR之间建立主从关系。

接下来他们就开始互相交换DBD(此时就算是进入了交换状态),这个就是5种OSPF分组中的第二种。

里面包含的是LSDB中LSA条目的摘要信息。

LSA是关于链路或者网络的。

摘要信息包括链路状态类型、通告LSA的路由器的IP地址、链路的成本和序列号。

当路由器收到DBD后并不是将其中的包含的内容全部的收下,而是一步一步的采取下面的步骤:
1、首先给对方一个LSACK,来确认下已经收到了这个分组;
2、将收到的信息同本身的LSDB中信息进行比较。

如果有更新的条目的话,那么就向发送方发送一个LSR(这时候你就想了,他知道这个LSR发给谁吗?只要想要的是什么吗?呵呵、当然知道了,因为这些信息都在发送来的LSA摘要信息中包含着呢。

尤其是那个“通告LSA的路由器的地址”。


3、对方用LSU分组进行响应,该LSU中包含着有关被请求的条目的完整信息。

同样呢,收到这个LSU分组后,也要给对方一个LSACK进行确认下!
4、路由器将提供来的新的完整的LSA条目加入到自己的LSDB中。

彼此给对方提供所需要的全部LSA后相邻路由器就处于同步和完全的邻接状态了。

上面说的是DR与BDR之间完全邻接的这么一个过程,那么其他的互为邻接关系的路由器达到完全邻接的状态也是这么一个过程。

其实说的就是DRother 与DR之间的完全邻接过程!
那么如何来判定条目的新旧呢?通过摘要信息中的序列号字段就可以了,这个
序列号是个长32位的字段,最小的一个序列号是0X80000001,最大的是0X8FFFFFFF。

当序列号越大的时候,就表示越新!
路由器想转发数据流的话,必须处于完全邻接状态。

至此,区域内所有路由器的LSDB都相同。

相关文档
最新文档