OSPF建立邻接关系的过程
- 格式:docx
- 大小:12.66 KB
- 文档页数:9
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的收敛过程由链路状态公告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邻接关系建立过程:分两大步骤七种状态: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(Open Shortest Path First)是一种用于路由的链路状态协议,它是一种开放式的协议,不受专利限制,因此得到了广泛的应用。
OSPF协议工作原理是通过计算最短路径来确定数据包的传输路线,下面我们来详细了解一下OSPF协议的工作原理。
首先,OSPF协议使用Dijkstra算法来计算最短路径。
当一个路由器加入到OSPF网络中时,它会向周围的路由器发送Hello消息,以建立邻居关系。
通过Hello消息,路由器可以确定相邻路由器的状态,包括IP地址、路由器ID等信息。
一旦建立了邻居关系,路由器之间就可以交换链路状态信息,这些信息包括链路的带宽、延迟、可靠性等。
每台路由器都会根据收到的链路状态信息,构建链路状态数据库(Link State Database),然后使用Dijkstra算法计算最短路径树,确定到达目的地的最佳路径。
其次,OSPF协议将网络划分为不同的区域(Area),每个区域内部使用自己的链路状态数据库,通过区域边界路由器(Area Border Router)来连接不同的区域。
这样可以减少链路状态数据库的规模,提高路由器的计算效率。
同时,OSPF协议还引入了虚拟链路(Virtual Link)的概念,允许不相邻的区域之间通过其他区域进行通信,从而实现整个网络的连通性。
另外,OSPF协议还引入了路由器优先级(Router Priority)的概念,用于确定每个路由器在选举DR(Designated Router)和BDR(Backup Designated Router)时的优先级。
通过选举DR和BDR,可以减少网络中LSA(Link State Advertisement)的传播次数,降低网络的负载。
此外,OSPF协议还支持多路径(Equal Cost Multi-Path),允许在有多条等价路径时同时使用这些路径进行数据转发,提高网络的负载均衡能力。
邻居关系和邻接关系。
如果两台路由器之间共享一条公共数据链路(两台路由器中间没有其它路由器,或者两台路由器之间存在虚连接),并且成功协商了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 报文超时,那么该路由器就会宣告这里邻居失效。
OSPF路由协议概念及工作原理1.概述OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。
在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。
在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。
作为一种链路状态的路由协议,OSPF将链路状态广播数据包LSA(Link State Advertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。
运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。
2.数据包格式在OSPF路由协议的数据包中,其数据包头长为24个字节,包含如下8个字段:* Version number-定义所采用的OSPF路由协议的版本。
* Type-定义OSPF数据包类型。
OSPF数据包共有五种:* Hello-用于建立和维护相邻的两个OSPF路由器的关系,该数据包是周期性地发送的。
* Database Description-用于描述整个数据库,该数据包仅在OSPF初始化时发送。
* Link state request-用于向相邻的OSPF路由器请求部分或全部的数据,这种数据包是在当路由器发现其数据已经过期时才发送的。
* Link state update-这是对link state请求数据包的响应,即通常所说的LSA数据包。
* Link state acknowledgment-是对LSA数据包的响应。
* Packet length-定义整个数据包的长度。
* Router ID-用于描述数据包的源地址,以IP地址来表示。
* Area ID-用于区分OSPF数据包属于的区域号,所有的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 地址),以及本路由器收到这个分组的接口。
R2会查看R1发送过来的这个Hello 分组当中的邻居列表字段,发现当中并没有自己的路由器ID,我们称这个状态为init状态,这时候,双方的通信关系还没有建立起来。
3.R2 会发送一个Hello 分组给R1 作为响应(使用单播),其中的邻居列表中包含R1的ID,R1会将R2加到自己的邻居表中,这个时侯,双方的邻居表都已经有对方的存在了。
这时候称为2-way 状态。
*Apr 8 00:47:58.919: OSPF: Rcv hello from 10.1.1.2 area 0from FastEthernet0/0 10.1.1.2*Apr 8 00:47:58.923: OSPF: 2 Way Communication to 10.1.1.2 onFastEthernet0/0, state 2WAY4.R1收到R2的这个分组后,会立即发回一个Hello分组来进行响应,这时候使用的也是单播,只发给R2。
这时候,是真正交换链路之前的状态,称为exstart 状态。
*Apr 8 00:47:58.923: OSPF: Send immediate hello to nbr10.1.1.2, src address 10.1.1.2, on FastEthernet0/0*Apr 8 00:47:58.923: OSPF: Send hello to 10.1.1.2 area 0 on FastEthernet0/0 from 10.1.1.1*Apr 8 00:47:58.927: OSPF: End of hello processing5.接下来我们会看到R1 会继续向外组播Hello 两次,这只是Hello 的周期性行为,以确定对方的状态。
我们看到两次Hello 的时间间隔刚好是10秒。
*Apr 8 00:48:04.063: OSPF: Send hello to 224.0.0.5 area 0 on FastEthernet0/0 from 10.1.1.1*Apr 8 00:48:08.927: OSPF: Rcv hello from 10.1.1.2 area 0 from FastEthernet0/0 10.1.1.2*Apr 8 00:48:08.927: OSPF: End of hello processing*Apr 8 00:48:14.063: OSPF: Send hello to 224.0.0.5 area 0 on FastEthernet0/0 from 10.1.1.1*Apr 8 00:48:18.935: OSPF: Rcv hello from 10.1.1.2 area 0 from FastEthernet0/0 10.1.1.2*Apr 8 00:48:18.939: OSPF: End of hello processing6.接下来R2 开始向R1 发送DBD ,这里我们看到几个重要标记:seq (DBD的序列号)、flag (—个三bit的标志位,第 1 位是initial 位,如果为 1 表示第一个DBD ,第 2 位为more 位,表示后面还有DBD要发送,第3位是master位,表示主、从)。
这里提到的主、从(master、slave)大概可以想象为人跟影子的关系,人是主,影子是从,影子总会跟着人走。
后面的state 表示当前双方的状态,这里依然是2WAY 。
我们看到这里的收到的两条DBD,它们的seq相同。
flag为0x7, 二进制为111,说明这是第一个DBD,而且第2条收到的DBD 还不是最后一条,因为第 2 位为 1 ,最后一位也为 1 ,说明这是MASTER ,在初始的时候, 每个路由器都会认为自己是MASTER 。
*Apr 8 00:48:18.939: OSPF: Rcv DBD from 10.1.1.2 on FastEthernet0/0 seq 0x4DB opt 0x52 flag 0x7 len 32 mtu 1500 state 2WAY*Apr 8 00:48:18.943: OSPF: Nbr state is 2WAY*Apr 8 00:48:23.955: OSPF: Rcv DBD from 10.1.1.2 on FastEthernet0/0 seq 0x4DB opt 0x52 flag 0x7 len 32 mtu 1500 state 2WAY*Apr 8 00:48:23.959: OSPF: Nbr state is 2WAY7.Hello 间隔又到期了,R1 又会组播Hello 分组。
另外,从上面的DBD 中的flag 我们得知该DBD 还没有完整,所以我们看到下面还收到了两条DBD ,序列号跟上面的相同,也是0x4DB 。
最后一行我们看到“end of Wait...” ,这是路由器在推举DR/BDR 之前的一个等待时间,这时候该等待时间到期,于是开始推举DR/BDR ,所以我们可以推断出,接下来路由器的动作应该是推举DR/BDR 。
另外,那个DBD 的flag 依然显示后面还有DBD ,所以后面应该还会收到序列号为0x4DB 的DBD 。
*Apr 8 00:48:24.063: OSPF: Send hello to 224.0.0.5 area 0 on FastEthernet0/0 from 10.1.1.1*Apr 8 00:48:28.919: OSPF: Rcv hello from 10.1.1.2 area 0 from FastEthernet0/0 10.1.1.2*Apr 8 00:48:28.923: OSPF: End of hello processing *Apr 800:48:28.927: OSPF: Rcv DBD from 10.1.1.2 on FastEthernet0/0 seq 0x4DB opt 0x52 flag 0x7 len 32 mtu 1500 state 2WAY*Apr 8 00:48:28.927: OSPF: Nbr state is 2WAY*Apr 8 00:48:33.959: OSPF: Rcv DBD from 10.1.1.2 on FastEthernet0/0 seq 0x4DB opt 0x52 flag 0x7 len 32 mtu 1500 state 2WAY*Apr 8 00:48:33.963: OSPF: Nbr state is 2WAY*Apr 8 00:48:34.059: OSPF: end of Wait on interface FastEthernet0/08.开始DR/BDR 的选举过程。
这里我们两台路由器都使用默认的优先级,所以选举的结果是谁的路由器ID 大就谁当DR,由于只有两台路由器,所以R2为DR, R1为BDR。
*Apr 8 00:48:34.059: OSPF: DR/BDR election on FastEthernet0/0 *Apr 8 00:48:34.059: OSPF: Elect BDR 10.1.1.1*Apr 8 00:48:34.059: OSPF: Elect DR 10.1.1.2*Apr 8 00:48:34.059: OSPF: Elect BDR 10.1.1.1*Apr 8 00:48:34.063: OSPF: Elect DR 10.1.1.2*Apr 8 00:48:34.063: DR: 10.1.1.2 (Id) BDR:10.1.1.1 (Id)9.R1 也开始向R2 发送DBD ,我们看到这时候它的DBD 的序列号是0x56 , flag也是0x7,所以R1也会宣告自己是MASTER 。
另外Hello 定时器又到期,于是又组播Hello 分组。
*Apr 8 00:48:34.063: OSPF: Send DBD to 10.1.1.2 on FastEthernet0/0 seq 0x56 opt 0x52 flag 0x7 len 32 *Apr 800:48:34.067: OSPF: Send hello to 224.0.0.5 area 0 on FastEthernet0/0 from 10.1.1.1*Apr 8 00:48:38.927: OSPF: Rcv hello from 10.1.1.2 area 0 from FastEthernet0/0 10.1.1.2*Apr 8 00:48:38.931: OSPF: End of hello processing10.收到R2 发送过来的最后一个序列号0x4DB 的DBD ,由于这时候R2 已经收到了R1 的序列号为0x56 的那个DBD ,所以这时候R2 可以根据路由器ID 确定自己才是真正的MASTER ,并在最后一个DBD 中将状态更改为EXSTART 状态,而R1 成为SLAVE 。