OSPF建立邻居的过程
- 格式:docx
- 大小:15.15 KB
- 文档页数:2
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 地址),以及本路由器收到这个分组的接口。
Init:收到hello参数协商成功,但是没有看到自己的router-id 。
同时发送携带对端router-id 的Hello2-way:参数协商成功,看到了自己的router-id 。
同时发送携带对端router-id的Hello 双向到达2-WAY后会周期性发送HELLO来维护邻居关系。
Exstart:发送空DD报文,前两个DD报文用于进行Master/salve ,此时DD报文不含任何LSA 信息为什么要建议主从关系?目的是为了保证后续exchange交互DD报文的可靠性和可控性。
为什么DD报文的交互需要可靠性和可控性?可靠性:OSPF协议是直接封装在IP报文之上的,但是IP报文本身是不保证报文可靠传递的网络层协议,所以OSPF协议必须设计自身的可靠性机制,必须实现自身的可靠性。
可控性:DD报文是用于交换LSDB的摘要信息,可能需要发送多个DD报文才能交换完毕,需要表明何时开始发送,何时表明发送完毕,需要有个控制能力。
可靠性:通过DD的seq完成的可控性:通过DD报文的I 、M 、MS来完成。
Exstart路由器会随机生成seq ,并且I \M \MS都置1I = 1 代表第一次发DD报文0 代表不是第一次发M= 1 代表还没发完,后面还要发0代表已经发完MS= 1 代表我为主0 代表我为从何为mster/何为salve :router-id大的为master ,小的为salve这也是router-ID不能冲突的原因,一样后会导致后续exstrat主从选举无法进行。
后续邻居也就建立不起来。
M/S选举完毕后就会进入Exchange状态Exchang:此时发送DD报文就会携带LSDB中LSA的摘要信息(LSA的头部信息)LSA的头部信息是用于唯一的标识一条LSA以及用于判断LSA的新旧。
所谓LSDB同步就是指邻居之间交换彼此没有的LSA以及用新的LSA替换掉旧的LSA,从而使邻居LSDB保持一致。
ospf协议原理
OSPF(Open Shortest Path First)是一种链路状态路由协议,
用于计算和选择最短路径来转发数据包。
1. 邻居发现:每个OSPF路由器(也称为OSPF进程)在启动时,通过向本地网络中的其他路由器发送Hello消息来发现邻居。
当两个路由器接收到对方的Hello消息时,它们将建立一
个邻居关系。
2. 路由器链路状态数据库(LSDB)同步:一旦邻居关系建立,路由器之间将开始同步链路状态信息。
每个路由器将收集关于它所连接网络的链路状态信息,并将其存储在链路状态数据库中。
链路状态信息包括连接的网络地址、链路的代价(成本)等。
3. SPF计算:一旦链路状态数据库同步完成,每个路由器将使
用Dijkstra算法计算从自身到达所有目标网络的最短路径树(SPF tree)。
在计算过程中,每个路由器将选择代价最小的
路径。
4. 路由表生成:根据SPF树的结果,每个路由器将生成本地
的路由表。
路由表中包含了到达每个目标网络的下一跳路由器以及相应的接口信息。
5. 连通性维护:一旦路由表生成完成,OSPF协议将定期发送Hello消息来维护邻居关系和链路状态信息。
如果某个邻居在
一段时间内没有收到Hello消息,将被认为是不可达的,邻居
关系将被删除,并相应地更新链路状态数据库和路由表。
6. 路由选择和数据包转发:当有数据包需要转发时,路由器将使用路由表中的信息选择最佳路径,然后将数据包发送到下一跳路由器。
总结来说,OSPF通过邻居发现、链路状态数据库同步、SPF 计算、路由表生成、连通性维护和数据包转发等步骤来实现最短路径路由的计算和选择。
简述ospf工作原理
OSPF的工作原理是基于链路状态的路由算法。
它使用信标(Hello)消息来建立、维护和验证邻居关系,并通过链路状态更新(LSU)消息来广播链路状态信息。
以下是OSP的工作原理的简要描述:
1. 邻居发现:路由器通过发送Hello消息来发现相邻的OSPF 路由器,并建立邻居关系。
Hello消息包含发送路由器的IP地址、区域ID和Hello间隔等信息。
2. 状态同步:邻居关系建立后,相邻的路由器交换链路状态信息,即每个路由器将其所知道的链路状态信息记录在链路状态数据库(LSDB)中,并使用数据库描述(DBD)消息进行交换。
该过程确保所有的路由器都拥有相同的链路状态信息。
3. 最短路径计算:每个路由器在获得完整的链路状态信息后,使用Dijsktra算法计算出到达所有目的地的最短路径树,这个树被称为最短路径树(SPF Tree)。
4. 路由更新:每个路由器根据最短路径树生成路由表,并将路由更新信息以链路状态更新(LSU)消息的形式发送给相邻的路由器。
这样,所有的路由器都能够互相交换自己的路由表,并将其更新到本地的路由表中。
5. 路由选择:根据本地路由表中的路由信息,路由器可以根据某种路由选择策略选择最佳的路由进行数据转发。
通过使用这种基于链路状态的路由算法,OSPF能够实现快速收敛、网络拓扑灵活性以及容错性。
同时,在OSPF网络中,每个区域之间可以通过区域边界路由器(ABR)进行连接,并在多区域网络中实现更高效的路由。
OSPF的邻接关系建⽴需要经历7种状态OSPF的邻接关系建⽴需要经历7种状态DOWN—>INIT—>TWO WAY—>EXSTART—>EXCHANGE—>LODING—>FULL下⾯具体描述这7个状态的发⽣过程:DOWN——运⾏OSPF协议的接⼝还没有收到hello包时的状态,此时不会发⽣任何建⽴邻居关系的动作INIT——当双⽅收到hello包时将进⼊INIT状态,前提是hello包中必须匹配4个条件,分别为:①hello和dead的时间间隔要相同②area ID要相同③认证⽅式认证⼝令要相同④末节区域标⽰要相同TOW WAY——当收到了邻居发送过来的hello包并且在hello包中看到⼰⽅的RouterID时,将进⼊TOWTOW WAY——当收到了邻居发送过来的hello包并且在hello包中看到⼰⽅的RouterID时,将进⼊TOWEXSTART状态之间进⾏EXSTART——此状态将在邻居之间选择MASTER和SLAVE⾓⾊,⽤于交换DBD信息,拥有⾼RouterID的EXSTART——此状态将在邻居之间选择MASTER和SLAVE⾓⾊,⽤于交换DBD信息,拥有⾼RouterID的MASTER的⾓⾊,因为其RouterID为2.2.2.2,⼤于R1的1.1.1.1。
另,如果邻居之间的MTU值不匹配,将卡在EXSTART状态,这也是唯⼀⼀个卡在EXSTART状态的原因Exchange--当经过Exstart状态选出master和slave⾓⾊后将进⼊Exchange状态,⾸先由master和slave同步DBD信息,最终将完成双⽅DBD信息的同步。
Loading--当DBD信息同步完成后双⽅开始加载LSDB,此状态下将发送LSR和LSU。
Full--此时LSDB构建完成,双⽅数据库保持⼀致,⾄此可以说双⽅已经进⼊了逻辑上的邻接关系,同区域的OSPF路由器维护同⼀张LSDB。
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协议的工作原理如下: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(Open Shortest Path First)是一种基于链路状态的内部网关协议(IGP),它用于在自治系统内部路由器之间进行动态路由选择。
以下是OSPF协议的工作原理:1. 邻居发现:OSPF路由器通过发送Hello报文来发现相邻的OSPF路由器,并建立邻居关系。
当两个路由器在相同的网络上收到对方的Hello报文时,它们就会成为邻居。
2. 路由器状态:每个OSPF路由器都会维护一个链路状态数据库(Link State Database),其中包含该路由器所知的所有网络和链路的状态信息。
这些信息包括链路带宽、延迟、可靠性等。
3. 链路状态广播:OSPF路由器通过发送链路状态广播(LSA)将自己的链路状态信息传播给网络中的其他路由器。
LSA包含了该路由器所连接网络的拓扑信息以及链路状态。
4. 最短路径计算:每个OSPF路由器根据收到的链路状态信息计算出到达目的网络的最短路径。
OSPF使用Dijkstra算法来计算最短路径,其中考虑了链路的带宽、延迟等因素。
5. 路由更新:一旦计算出最短路径,OSPF路由器就会更新自己的路由表,并将更新后的路由信息传播给其他路由器。
这样,网络中的每个路由器都会拥有到达目的网络的最短路径信息。
6. 动态路由选择:OSPF路由器根据路由表中的信息选择传输数据的最佳路径。
OSPF使用最短路径优先的原则进行路由选择,选择路径时首先考虑路径的成本和可靠性。
7. 路由调整:当网络拓扑发生变化或链路状态信息发生变化时,OSPF路由器会重新计算最短路径并更新路由表。
这种动态的路由调整可以提高网络的可靠性和适应性。
总的来说,OSPF协议通过邻居发现、链路状态广播、最短路径计算和路由更新等步骤实现动态路由选择,并通过路由调整来适应网络拓扑的变化,从而提供高效、可靠的内部网关路由。
1.R1的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个HELLO报文(使用组播地址224.0.0.5)。
由于此时R1在该网段中还未发现任何邻居,所以HELLO报文中的Neighbor字段为空。
2.R2收到R1发送的HELLO报文后,为R1创建一个邻居的数据结构。
R2发送一个HELLO报文回应R1,并且在报文中的Neighbor字段中填入R1的Router -id,表示已收到R1的HELLO报文,并且将R1的邻居状态机置为Init
3.R1收到R2回应的HELLO报文后,为R2创建一个邻居的数据结构,并将邻居状态机置为Exstart状态。
下一步双方开始发送各自的链路状态数据库。
为了提高发送的效率,双方需先了解一下对端数据库中那些LSA是自己所需要的(如果某一条LSA自己已经有了,就不再需要请求了)。
方法是先发送DD报文,DD报文中包含了对本地数据库中LSA的摘要描述(每一条摘要可以惟一标识一条LSA,但所占的空间要少得多)。
由于OSPF直接用IP报文来封装自己的协议报文,所以在传输的过程中必须考虑到报文传输的可靠性。
为了做到这一点,在DD报文的发送过程中需要确定双方的主从关系。
作为Master的一方定义一个序列号seq,每发送一个新的DD报文将seq 加一。
作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的seq。
实际上这种序列号机制是一种隐含的确认方法。
如果再加上每个报文都有超时重传,就可以保证这种传输是可靠的。
R1首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号为x。
I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。
M=1说明这不是最后一个报文。
4.R2在收到R1的DD报文后,将R1的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。
由于RT2的Router ID 较大,所以在报文中R2认为自己是Master,并且重新规定了序列号为y。
5.R1收到报文后,同意了R2为Master,并将R2的邻居状态机改为Exchange。
R1使用R2的序列号y来发送新的DD报文,该报文开始正式地传送LSA的摘要。
在报文中R1将MS=0,说明自己是Slave。
6.R2收到报文后,将R1的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,需要注意的是:此时R2已将报文的序列号改为y+1了。
7.上述过程持续进行,R1通过重复R2的序列号来确认已收到RT2的报文。
R2通过将序列号+1来确认已收到R1的报文。
当R2发送最后一个DD报文时,将报文中的M=0,表示这是最后一个DD报文了。
8.RT1收到最后一个DD报文后,发现R2的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。
此时R2也收到了R1的最后一个DD报文,但RT1的LSA,RT2都已经有了,不需要再请求,所以直接将R1的邻居状态机改为Full状态。
9.R1发送LS Request报文向R2请求所需要的LSA。
R2用LS Update报文来回应R1的请求。
R1收到之后,需要发送LS Ack报文来确认。
上述过程持续到R1中的LSA与R2的LSA完全同步为止。
此时R1将R2的邻居状态机改为Full 状态。