OSPF建立邻居的过程
OSPF邻居关系建立过程详解

当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 建立邻接关系的过程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邻居状态建立

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协议原理
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工作原理
OSPF的工作原理是基于链路状态的路由算法。
它使用信标(Hello)消息来建立、维护和验证邻居关系,并通过链路状态更新(LSU)消息来广播链路状态信息。
以下是OSP的工作原理的简要描述:
1. 邻居发现:路由器通过发送Hello消息来发现相邻的OSPF 路由器,并建立邻居关系。
Hello消息包含发送路由器的IP地址、区域ID和Hello间隔等信息。
2. 状态同步:邻居关系建立后,相邻的路由器交换链路状态信息,即每个路由器将其所知道的链路状态信息记录在链路状态数据库(LSDB)中,并使用数据库描述(DBD)消息进行交换。
该过程确保所有的路由器都拥有相同的链路状态信息。
3. 最短路径计算:每个路由器在获得完整的链路状态信息后,使用Dijsktra算法计算出到达所有目的地的最短路径树,这个树被称为最短路径树(SPF Tree)。
4. 路由更新:每个路由器根据最短路径树生成路由表,并将路由更新信息以链路状态更新(LSU)消息的形式发送给相邻的路由器。
这样,所有的路由器都能够互相交换自己的路由表,并将其更新到本地的路由表中。
5. 路由选择:根据本地路由表中的路由信息,路由器可以根据某种路由选择策略选择最佳的路由进行数据转发。
通过使用这种基于链路状态的路由算法,OSPF能够实现快速收敛、网络拓扑灵活性以及容错性。
同时,在OSPF网络中,每个区域之间可以通过区域边界路由器(ABR)进行连接,并在多区域网络中实现更高效的路由。
13、OSPF协议工作过程

3 OSPF 的工作过程:建立邻接关系
DR(村长)的选举过程
• (1)登记选民
• 本村的18岁以上公民;本网段的OSPF路由器;
• (2)登记候选人
• 本村内的30岁以上公民;本网段的priority>0的OSPF路由器;
• (3)竞选演说
• 所有的候选人都认为自己应该当村长; • 所有的priority>0的OSPF路由器都认为自己是DR
3 OSPF 的工作过程:邻居发现阶段
小王
小一 小二 小三
你好啊
小王 (1)你好,我叫小王
你好啊
小一
小王
小一
(2)你好,小王,我叫小一
嘻嘻嘻,我 有3邻居
(3)邻居关系建立完成
3 OSPF 的工作过程:邻居发现阶段
D
E
Hello
B
A
C
afadjfjorqpoeru 39547439070713
Hello
2 OSPF 的关键概念
• 路由器ID即Router ID,它是唯一标识运行OSPF协议的一台路由器,经 常设置为掩码为32bits的IP主机地址。
• 产生方法: 手工指定:通过命令router-id ip-address 设置,一般指定逻辑的环回口 地址(环回口地址的稳定性) 自动产生:环回口地址——如果没有手工指定,则选择环回口IP地址; 如果有多个环回口,则比较IP地址大的作为Router ID; 物理接口IP地址——如果没有创建环回口,则选用物理接口IP 地址,如果有多个IP地址,则同样选择IP地址最大的作为Router ID。
Frame Checksum
IP协议号为89
1 OSPF 概述
快速收敛:快速扩散链路状态更新并同步计算路由表; 无路由环路:最短路径优先(SPF)算法; 完全无类别:支持可变长子网掩码(VLSM)和无类域间路由(CIDR); 减少所需的网络带宽:采用触发更新机制; 支持接口的包认证:确保路由计算的安全性; 使用组播方式发送更新:减小了对非相关网络设备的干扰。
OSPF的邻接关系建立需要经历7种状态

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邻居-邻接关系建立

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