OSPF中的邻接关系的建立

花了几天时间重新温习了下OSPF的相关知识,这里用自己的话简单梳理下对OSPF邻接关系的建立过程的理解。

背景:OSPF作为典型的链路状态路由协议,它与同区域的直接相连的路由器(Area)建立OSPF邻接关系,并以LSU承载多种类型的LSA来对链路状态进行描述。什么是链路状态?路由器的链路状态主要包括接口的IP,接口的带宽(隐含在度量值),接口所在网段的子网掩码,同直连链路上的路由器的连接状况等信息。路由器关心链路状态,以LSA为核心进行路由的计算,将能够找到总度量值最小的路径,与此同时也能加快网络收敛,及时面对网络波动、故障、震荡带来路径变化。

我们以下图两个直连路由器作为案例,来描述路由器邻居关系到邻接关系的建立过程。其本质是两个路由器LSDB的同步过程。

1.现在我们在两个路由器上激活OSPF,R1与R2便开始在这个直连网段上以组播方式发送Hello报文,Hello报文用于同网段上的邻居发现。它是类型为1的OSPF报文。该类型的报文关键字段有路由器ID+区域ID+网络掩码+Hello报文间隔+路由器失效时间+路由器优先级(DR和BDR)+邻居router-ID,可以说你大概记住7个字段即可简单的描述Hello报文在起始阶段的发现邻居作用。

假设R1先激活OSPF,率先发送Hello报文

R1——》R2 Hello 报文

router-id 1.1.1.1
area 0.0.0.0
netmask 255.255.255.252
priorities:1(defalut value)
hello interval:10 s
router invalid-time 40s(一般为hello intervals的4倍)
neigbor:Null 


R2由于激活了OSPF,便在224.0.0.5上侦听hello报文。收到之后,R2将报文中router-id添加到自己的邻居表中,并将邻居状态置为init初始状态,因为R1还不认识R2。接着R2以相同的格式发送自己的hello报文,router-id 2.2.2.2,neigbor为1.1.1.1((我们忽略掉R2发送的neigbor为空初始hello报文),R1收到这个报文之后,发现hello报文中有自己的router-id,于是将2.2.2.2加入自己的邻居表的同时,将邻居状态置为2-way。 同理,随后收到hello报文的R2也将邻居状态置于2-way。这个状态是OSPF最稳定的状态,也是邻接关系建立的基础。

2.R1发现R2,R2发现了R1之后,将进入Exstart预交换阶段。

该阶段先交互用于Master/slave路由器协商的DD报文(或DBD),这报文不携带任何LSA信息,因此可以称为空的DD报文。我们主要了解下空的DD报文的关键字段:                                                

type = 2 
router-id=1.1.1.1
area 0.0.0.0
MTU = 0
DD sequence = x
Ms= 1 // master为1,slave为0
I= 1// Initial bit,为1的时候,表示此DD报文用于M/S的协商
M= 1 //是不是最后一个DD报文,是的话为0不是为1
LSA头部 = NUll

当R1发送DD报文时,认为自己的是Master所以将Ms比特位置为1,同时设置自己的DD序列号为X。同样R2发送DD报文时,认为自己也是Master所以将Ms比特位置为1,同时设置自己的DD序列号为Y。在经过DD报文的交互之后,R1发现R2的router—ID大于自己,承认了R2是master路由器于是在之后的多次DD报文交互中将自己的DD报文的Ms比特位置位0,I比特位置位0,DD sequence与收到的master(R2)发过来的DD报文中的DD序列号相同。master路由器的当选,将使得R2在后续的Exchange阶段即DBD交互阶段起主导作用。在Exchange阶段,DD报文将含LSA头部信息,开始对本地的LSDB进行描述。当然路由器的LSDB在此刻往后都是变化的,因此描述过程只是描述让邻接能够比较LSDB的差异。

我比较好奇在Exchange阶段,各路由器的LSDB中都有些什么类型的LSA。各种类型的LSA都有吗?但LSA需要LSU来承载和传输,而LSU和LSR的交互发生在之后Loading阶段。所以应该不是所有LSA都有。我们仔细想想,唯有哪些区域内路由器自己产生的LSA可存在在本地LSDB中。比如每个OSPF路由器都会产生的type-1 LSA 和由网段中DR设备产生的type-2 LSA,这些LSA暂时需被LSU承载传播出去,它们是组成现有LSDB的一部分,以为Exchange状态下路由器提供DBD报文描述时所需要的本地LSA头部。

3.完成了DD报文的交互,R1和R2分别将自己邻居状态设置为Loading。在此状态下,双方将进行LSR和LSU的交互,目的是使双方的LSDB保持一致。比如在Exchang阶段,R1通过R2发过来的DD报文,发现自己的LSDB中不存在DD报文中某LSA头部字段所标识的LSA信息,便将此LSA放置到LSR的请求列表中,然后向R2请求完整的LSA报文。然后,R2将与请求列表中的LSA头部信息匹配的LSA承载于LSU报文中,最终封装在OSPF报文中进行传输。

当R1与R2在各自LSR的LSA请求列表中无LSA头部信息,便互相将邻居状态置为Full状态。说明已无其他的LSR请求,邻居双方的LSDB同步完成。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本
建立OSPF邻接关系的过程如下: 1. Hello报文交换:当两个OSPF路由器在相同的网络上启动时,它们会开始发送Hello报文来识别和建立邻接关系。Hello报文包含了路由器的标识和其他必要的参数。这些参数包括:OSPF区域ID、Hello和Dead Interval、路由器优先级等。 2. 确认相邻路由器:在收到对方的Hello报文后,路由器会检查对方是否满足建立邻接关系的条件。这些条件包括:OSPF区域ID、Hello和Dead Interval、路由器优先级等。如果满足条件,则确认对方为相邻路由器。 3. 数据库描述(DBD)报文交换:一旦确认对方为相邻路由器路由器会开始交换数据库描述(DBD)报文。DBD报文包含了自己的链路状态数据库(LSDB)摘要信息,用于比较和同步LSDB。 4. 链路状态请求(LSR)和链路状态更新(LSU)报文交换:在DBD报文交换完成后,如果有需要同步的LSDB信息,路由器会发送链路状态请求(LSR)报文请求对方发送缺失的链路状态广告(LSA),对方则回复链路状态更新(LSU)报文发送相应的LSA。 5. 链路状态确认(LSAck)报文交换:LSR和LSU报文的交换完成后,对方会发送链路状态确认(LSAck)报文进行确认。 通过以上步骤,OSPF邻接关系建立完成,路由器之间可以开始交换链路状态信息,并计算出最短路径来更新自己的路由表。这样就实现了OSPF协议的运行和路由信息的传递。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值