学习笔记——动态路由——OSPF(邻接/邻居)

十、OSPF的邻接/邻居

1、OSPF路由器之间的关系

(1)基本介绍

在OSPF网络中,为了交换链路状态信息和路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。

OSPF路由器的两种关系:

1)邻居关系(Neighbor):连接到同一个网络,能建立双向通信链路。

2)邻接关系(adjacency):可交换网络的链路状态。建立双向通信链路后,由OSPF协议确定。

不是所有的邻居路由器之间都要建立邻接关系:

1)广播网络或NBMA网络上,DR/BDR与其他路由器之间有邻接关系;

2)其他路由器之间不需要邻接关系。

RIP网络中,如果路由器A与路由器B位于同一个二层网络,那么就说路由器A与路由器B是“邻居关系”;

OSPF网络中,如果路由器A与路由器B位于同一个二层网络,只能说路由器A与路由器B“相邻”,不能说是“邻居关系”。相邻不等于邻居关系更不等于“邻接关系”

OSPF在进行路由计算时首先要完成邻接关系的建立什么是邻接关系邻接关系建立的过程又是怎么样的?

举例:考虑一种简单的拓扑,两台路由器直连。在双方互联接口上激活OSPF,路由器开始发送以及侦听Hello报文。通过Hello报文发现彼此后,这两台路由器便形成了邻居关系

邻居关系的建立只是一个开始,后续会进行一系列的报文交互,例如DD、LSR、LSU和LS ACK等。当两台路由器LSDB同步完成,并开始独立计算路由时,这两台路由器形成了邻接关系

1)邻居(Neighbor)路由器。OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文,用于发现邻居。

收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方一致就会形成邻居关系。Hello报文是使用多播方式发送的,并且IP头的TIL值为1,也就表明了OSPF的邻居关系都是物理链路上直接相连的路由器。

2)邻接(Adjacency)路由器。在路由器形成邻居关系的基础之上进一步建立的,但形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定

只有当双方成功交换DD报文,并能交换LSA之后,才形成真正意义上的邻接关系。但是路由器在发送LSA之前必须先发现邻居并建立邻居关系,即建立邻居关系是建立邻接关系的前提。

(2)邻居关系和邻接关系

1、邻居关系(Neighbor Relationship):OSPF使用邻居关系是用来交换路由信息

当两个OSPF路由器在它们的接口之间建立了邻居关系后,它们就可以互相交换路由信息。

例如,假设我们有两个相邻的OSPF路由器A和B,它们的接口分别是192.168.1.1和192.168.1.2。当它们通过这两个接口建立邻居关系后,它们就可以开始交换路由信息。

如果两台路由器共享一条公共数据链路,并且能够协商Hello数据包中所指定的某些参数,它们就形成邻居关系

1)OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居

2)收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系状态到达2-way即可称为建立了邻居关系

3)如果参数不一致,不能形成邻居关系。

2、邻接关系(Adjacencies Relationship):相互交换LSA的OSPF邻居建立的关系

1)在点到点,点到多的网络邻居路由器都形成邻接关系

2)在广播多路由访问非广播多路访问网络(NBMA)上,要选举指定路由(DR)和备份指定路由(BDR)DR和BDR路由器与所有的邻居路由器形成邻接关系,但是DRother路由器之间不能形成邻接关系只能形成邻居关系

(下左图示)RTA通过以太网连接了3个路由器,所以RTA有3个邻居,但不能说RTA有3个邻接关系。

谁来决定邻居关系路由器是否形成邻接关系呢?        

答案:是OSPF的网络类型。网络类型:是指运行OSPF网段的二层链路类型。

                   

一个运行点到点协议(PPP)的64Kb/s串行线路就是一个点到点网络的例子。

点到点网络常见的链路层协议有PPP、链路访问过程平衡(LAPB), HDLC。

广播型网络(Broadcast)则是当链路层协议是Ethernet、FDDI时,OSPF默认的网络类型。

非广播网络是指不具有广播能力的网络。

在非广播网络上,OSPF有两种运行方式非广播多路访问和点到多点。

非广播多路访问要求网络中的路由器组成全连接。例如,使用全连接的ATM网络。在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置。

对于不能组成全连接的网络,应当使用点到点方式,例如,不完全连接的帧中继网络,将整个非广播网络看成是一组点到点网络。每个路由器的邻居可以使用底层协议,例如反向地址解析协议(Reverse ARP, RAAP)来发现。

点到多点网络类型不是OSPF在非广播网络中默认的网络类型,OSPF在非广播网络中默认的网络类型是NBMA

为什么网络类型会决定邻居关系路由器是否建立邻接关系呢。

回到(上左图)中,对于路由器RTA而言,它有3个邻居。

如果图中的4台路由器彼此之间都建立邻接关系,会有多少呢?

答案:是6。

如果该网络中的n台路由器都属于广播型或者NBMA网络,彼此之间会建立的邻接关系是多少呢?

答案:是n*(n-1 )/2。

这时大家会发现,网络中(广播型或者NBMA)随着路由器数量的增加,邻接关系数量也会随之大量增加,邻接关系数量增加意昧着网络中需要泛洪大量的报文,而大量的报文交互需要足够的带宽资源以及设备性能的支持。

在广播型网络或者NBMA网络中需要减少邻接关系的数量,那么怎么减少呢?

在全广播型网络和NBMA网络中,为了避免两两路由器之间建立邻接关系而导致路由收敛慢,设计了DR和BDR两种路由器角色,如(上右图)所示,每一个含有至少两个路由器的广播型网络和NBMA网络都有一个指定路由器和一个备份指定路由器。

(3)邻居和邻接的区别

1)形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定只有当双方成功交换DD报文,并同步LSDB后才形成真正意义上的邻接关系

2)邻居关系只是进行了关系的确认,但是没有进行数据库的同步,所以无法实现最终路由的计算。

3)邻接关系已经实现了数据库的同步,可以通过已经同步的数据库进行SPF算法的计算。

4)邻居关系止步于“2-Way”,邻接关系包含整个过程。(下图示)

是否和邻居建立邻接关系

网络类型

是否和邻居建立邻接关系

Point-to-point(P2P)

总是和邻居建立邻接关系

Point-to-MultiPoint(P2MP)

总是和邻居建立邻接关系

Virtual link(虚链路)

总是和邻居建立邻接关系

Broadcast

NBMA

DR总是和其他所有路由器包括BDR建立邻接关系;

BDR总是和其他所有路由器包括DR建立邻接关系;

处于DROther状态的路由器只与DR和BDR建立邻接关系

2、OSPF的邻居状态

(1)OSPF建立邻居关系的三个状态

在建立邻居关系的过程中,路由器主要需要经历从Down到2-way状态,这个过程的最终状态是2-way状态,详细介绍分别如下:

状态

含义

Down

这是邻居的初始状态,表示没有从邻居收到任何信息。

Init

在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中表示尚未与邻居建立双向通信关系

2-Way

在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信

Init和2-way最大的区别

Init:收到了对方的hello报文,但是没有在active-router看到自己的RID。

2-way:收到了对方的hello报文,但是在active-router看到自己的RID处于2-way建立了邻居关系。

 

3、OSPF邻居关系建立

(1)OSPF邻居关系建立过程

1、Down状态:这是邻居的初始状态表示没有从邻居收到任何信息

启用了OSPF功能的链路默认成为down状态,并开始向外发送Hello报文(基于网络类型的不同发送方式也会不同,广播类型Hello为组播发送)报文发出之后,从Down状态转Init状态。

在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为Poll Interval,通常和Router Dead Interval间隔相同。

注意:OSPF的每条链路都会经历状态机,每条OSPF链路的状态机互不影响

启用OSPF的链路从Down状态开始,向外发送Hello报文后转为Init状态。

2、Init状态:在此状态下,路由器已经从邻居收到了Hello报文。

在Init状态下的链路,如果接收到传来的Hello包中含有自己的router-id,则表示对端已经发现了自己,此时链路就能成为2-way状态了。

3、Attempt状态(NBMA)

该状态仅发生在NBMA网络中,表明该链路在发送Hello报文之后,到达了失效时间(dead interval)仍然没有收到对端回复Hello报文。如果Router Dead Interval间隔内未收到邻居的Hello报文,则转为Down状态。

处于该状态下的链路仍然会向对端发送Hello报文。

4、2-way状态:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。

其它链路类型在成为2-way之后,发送第一个空DD报文后,进入Exstart状态。(因为在其它网络类型中,DD报文通过单播发送,无法确认谁先发送DD报文,同时为了保障DD的可靠传递,需要进行选举主机设备)

如果链路为P2P类型,则直接进入Exchange状态进行交互DD报文(因为p2p类型链路所有报文交互都是组播,同时p2p是点到点网络,完全不需要担心LSA传递过程中丢失)

在邻居建立过程中,为了提高OSPF网络收敛的速度。在广播网络中建立邻居时,需要同时进行DR与BDR的选举。(2-way建立之前或之后就已经选举出DR与BDR了)

选举DR与BDR主要为了解决同网络中,报文信息相互发送造成网络中流量过大的问题。通过选举DR与BDR实现流量的统一整理与发送,减少网络中的OSPF报文过多,同时提高收敛的速度。

OSPF使用Hello报文发现和建立邻居关系(Hello报文中包含了路由器的RouterID、邻居列表等)

在以太网链路上,缺省时OSPF采用组播的形式发送Hello报文。(目的地址224.0.0.5)

1)RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2。

RTA启动OSPF后,RTA会发送第一个Hello报文。此报文中邻居列表为空,此时状态为DownRTB收到RTA的这个Hello报文,状态置为Init

2)RTB发送Hello报文,此报文中邻居列表为空,RTA收到RTB的Hello报文,状态置为Init。

3)RTB向RTA发送邻居列表为1.1.1.1的Hello报文,RTA在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。

4)RTA向RTB发送邻居列表为2.2.2.2的Hello报文RTB在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way

因为邻居都是未知的,所以Hello报文的目的IP地址不是某个特定的单播地址邻居从无到有,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)。

对于不支持组播的网络可以通过手动配置实现邻居的发现与维护

(2)影响OSPF建立邻居的条件

基础配置详情:

PC1:ip:192.168.1.1 gw:192.168.1.254      PC2:ip:192.168.2.1 gw:192.168.2.254

[AR1] interface GigabitEthernet0/0/0

[AR1_interface GigabitEthernet0/0/0] ip address 192.168.1.254  255.255.255.0

[AR1] interface GigabitEthernet0/0/1

[AR1_interface GigabitEthernet0/0/1] ip address 192.168.12.1  255.255.255.0

[AR1] interface Loopback 0

[AR1_LoopBack0] ip address 1.1.1.1  255.255.255.255

[AR2] interface GigabitEthernet0/0/0

[AR2_interface GigabitEthernet0/0/0] ip address 192.168.12.2  255.255.255.0

[AR2] interface GigabitEthernet0/0/1

[AR2_interface GigabitEthernet0/0/1] ip address 192.168.23.2  255.255.255.0

[AR2] interface Loopback 0

[AR2_LoopBack0] ip address 2.2.2.2  255.255.255.255

[AR3] interface GigabitEthernet0/0/0

[AR3_interface GigabitEthernet0/0/0] ip address 192.168.2.254  255.255.255.0

[AR3] interface GigabitEthernet0/0/1

[AR2_interface GigabitEthernet0/0/1] ip address 192.168.23.3  255.255.255.0

[AR3] interface Loopback 0

[AR3_LoopBack0] ip address 3.3.3.3  255.255.255.255

OSPF配置详情:

[R1]ospf 1 router-id 1.1.1.1

[R1-ospf-1]area 0.0.0.0

[R1-ospf-1-area-0]network 1.1.1.1 0.0.0.0

[R1-ospf-1-area-0]network 192.168.1.0 0.0.0.255

[R1-ospf-1-area-0]network network 192.168.12.0   0.0.0.255

[R2]ospf 1 router-id 2.2.2.2

[R2-ospf-1]area 0.0.0.0

[R2-ospf-1-area-0]network 2.2.2.2 0.0.0.0

[R2-ospf-1-area-0]network 192.168.23.0 0.0.0.255

[R2-ospf-1-area-0]network network 192.168.12.0   0.0.0.255

[R3]ospf 1 router-id 3.3.3.3

[R3-ospf-1]area 0.0.0.0

[R3-ospf-1-area-0]network 3.3.3.3 0.0.0.0

[R3-ospf-1-area-0]network 192.168.2.0 0.0.0.255

[R3-ospf-1-area-0]network 192.168.23.0 0.0.0.255

OSPF邻居与邻接关系建立的8种必要条件      

外部(协议上)

(1)Version版本(OSPFv2、OSPFv3)

(2)router id冲突

情况1)在同一个OSPF的区域内相邻的设备router-id不能相同。

验证:将AR2的Router_id由原来的2.2.2.2改为1.1.1.1与 AR1的Router_id矛盾

结果:不能建立邻居

命令:在AR2上:ospf 2 router-id 1.1.1.1

dis ospf error //查看有哪些原因导致OSPF邻居无法建立

情况2)同一个区域不相邻的设备,router-id可以相同,但是会影响路由的接收。(下左图)

如果是华为的设备,会有短暂的路由震荡然后,C检测出路由冲突,会自动修改router id

                      

情况3)不同的区域,不相邻的设备,router-id可以相同,也不会影响路由的接收。(上右图)

不同区域内冲突,不会产生路由影响,但是如果引入路由或者有5类LSA就会在自治系统见传递,引发路由震荡。

(3)区域ID不一致

直连的接口区域ID一定要相同

内部(链路上)

(3)子网掩码必须相同

MA网络掩码需一致(P2P 不需要)(两端配置的接口地址掩码要一致)

MA网络中需要选DR,BDR,当掩码不一致时,无法选出DR,BDR,从而导致ospf邻居建立失败。

1)默认情况下以太链路(网络类型为broadcast)掩码长度必须相同

2)默认情况下串行链路掩码长度可以不同或者(网络类型为P2P链路掩码长度可以不同)

3)网络类型P2MP,掩码长度必须相同(也可以不相同,但是必须通过OSPF P2MP-netmask-ignore忽略对网络掩码的检查)

interface Serial4/0/1

ospf network-type p2mp //修改OSPF网络类型为P2MP

ospf p2mp-mask-ignore //忽略对网络掩码的检查

dis ospf error

(4)两边的hello时间和dead time必须相同

hello在广播型网络中默认10S,后续修改为8S进行实验 dead时间自动变为hello的4倍

interface GigabitEthernet0/0/0

[R1-GigabitEthernet0/0/0]ospf timer hello 8 //范围<1-65535> 修改hello 时间

1)不同的OSPF的网络类型hello time 和dead time时间不一样

2)默认情况下,dead time 是hello时间的4倍

3)当修改hello time,dead time会自动发生变化

4)如果只修改dead time,hello time不会自动发生变化

interface Serial4/0/1

ospf timer hello 15     //修改hello时间15s

ospf timer dead 45          //修改dead 时间45s

[AR1]dis ospf int s4/0/1

   

(5)认证类型需要保持一致

auth type/Data要相同

认证类型分为:空——不认证、明文认证、密文认证。

认证类型、密码认证,任何一个认证地方的不同都会导致邻居无法建立(比如认证方式不同,明文或密文,密码配了或者没配,密码不一致等)

(6)优先级不能全为0

在MA、NBMA网络类型下:

将两边router的dr优先级都设为0,这时,两个路由器都不参与选举,也就是DRother,在DRother之间只建立邻居关系(two-way),不建立邻接。

所以就卡在two-way状态了。

在MA网络中,需要选出DR,BDR,当设备优先级都为0时,说明所有设备不参加DR,BDR,的选举,也就导致ospf林记建立失败

(7)option中(E、N)区域类型要一致(OSPF的是否为特殊区域)

(7)MTU值 DD报文

只影响邻接关系,不影响邻居关系。

MTU字段在exstart状态进行比较,MTU在DD报文中,如果一致性不通过,就会停在exstart状态,如果不进行MTU一致性检测,报文会被重复分片,降低转发效率。华为设备默认将DD中的MTU设置为0,并不做MTU的比较,如果使用ospf mtu-enable,则DD报文中的MTU会被设置为IP MTU,并且在本接口对对端接口做MTU比较。

【非必要】对于华为设备来说,并不会在意链路的MTU值是否一致。

MTU是在DD报文中携带,华为接口默认不开启MTU检查

在dd报文之间,携带MTU字段(MTU:接口可发出的最大IP报文的长度,默认为1500)。

检查MTU字段是否一致,如果不一致,那么dd报文就不能下一步,就会永远卡在exstart状态

如果MTU不一致则会卡在exstart和exchange状态。MTU小的卡在exstart,MTU大的卡在exchange。

interface GigabitEthernet0/0/0

[R1-GigabitEthernet0/0/0]mtu 1300 //如果不开启MTU检查只修改MTU值也是可以建立邻居的

[R1-GigabitEthernet0/0/0]ospf mtu-enable //接口开启MTU检查(两端都开启才会d导致不能full)

dis interface GigabitEthernet0/0/0 //查看接口mtu dis ospf error //查看ospf报错

1)华为设备默认是不检测MTU的,可以通过命令配置检测MTU(思科设备默认是检测MTU)

2)如果MTU不一致,会卡在什么状态

3)如果从设备的MTU小于主设备的MTU,两端都会卡在Estart状态

[AR1]int g0/0/0

[AR1-GigabitEthernet0/0/0]ospf mtu-enable 开启MTU检测

华为设备默认不开启MTU值检测,但是在遇到华为与其他厂商设备对接建立ospf时,必须在两台设备上同时开始MTU检测,或同时关闭MTU检测,否则会导致ospf邻居建立失败。

8.silent-interface (静默端口,端口不收不发)禁止接收和发送OSPF报文

一般配置在连接终端的接口,不会影响路由的通告

注意:千万不要配置在路由器之间相连的接口

配置:

ospf 1 router-id 11.1.1.1

silent-interface all //所有使能OSPF的接口都会被变成静默接口

undo silent-interface Serial4/0/1 //排除S4/0/1接口

在端口上配置静默端口命令,端口对于报文,不收不发,没有报文的交流,自然也就无法建立ospf邻居关系。

9.过滤 OSPF报文

acl number 3000

rule 10 deny ip

interface Serial4/0/1

traffic-filter inbound acl 3000 //接口调用ACL

10.NBMA

单播指定邻居

4、OSPF邻接状态

状态

含义

ExStart

邻居状态变成ExStart状态以后,路由器开始向邻居发送DD报文(不包含链路状态描述)

Master/Slave(/)关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。

Exchange

在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。

Loading

在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文

Full

LSDB同步过程完成,路由器与邻居之间形成了完全的邻接关系。

Exstart: 在该状态下,使用DD报文进行主从关系的选举,且此时的DD报文中不会包含任何的LSDB的摘要信息,简称为="空DD" |DD报文| [通过seq进行了隐式的确认,对收到的报文进行确认,至于报文中的数据的好坏,此时是不参与确认的]

Exchange:发送的OSPF的DD报文中携带了LSA的摘要信息,此时则认为进入该状态。

LSR :链路状态请求报文 //请求自己本地没有的LSA --->摘要

LSU :链路状态更新报文 //向对方发送对方请求的LSA --->详细内容

LSACK :链路状态确认报文 //确认已经收到对方发送的LSU -->摘要

Loading:彼此通过查看DD报文,得知自己本地没有的LSA信息,此时会开始发送报文进行请求 。

FULL(稳定状态):所有的LSU都得到确认之后,此时双方到达Full的状态。

(1)OSPF邻接关系建立过程

Exstart状态

OSPF为了保障LSA信息在传递过程中的可靠性,定义了OSPF主从身份(Master、Slave)。

OSPF为何设计如此复杂的交互机制?

1、OSPF基于IP层的协议,IP本身是一种不可靠、不安全的。

2、通过设置主从设备+序列号,让报文有序的进行交互,能有效提高OSPF传递报文的可靠性。

选举主从的方式:通过OSPF的第一个空DD报文,比较router-id,router-id大的成为主。

Exchange状态

如何通过DD报文确定主从身份?

主从设备在Exchange状态下的工作过程:

(1)基于选出的主从,slave主动向master发送DD(LSA信息)报文描述本地LSDB数据库信息,此时报文序列号使用的是master的序列号。

(2)masterr收到DD信息之后序列号递增并回复自己的DD报文(携带自己的链路状态信息)

(3)slavev收到master回复的DD时,需要回复确认信息,序列号为master的序列号(slave不可递增序列号值)

DD报文交互过程(图片)

1、从设备向主设备发送序列号为Y的DD报文,携带自己的设备路由简要信息。

从设备发送的序列号Y为主设备的序列号,该序列号是在空DD报文主从选举时知道的。

2、主设备向从设备发送序列号为Y+1的DD报文,携带主设备路由简要信息。

序列号+1,对从设备发来的DD报文进行确认。同时也是作为下一个从设备DD报文的序列号。

3、从设备向主设备发送序列号为Y+1的空DD报文,用于确认收到主设备的DD报文。

仔细观察会发现与TCP协议报文交互相似,在给对端发送报文之后,对端会给予一个确认的回复报文。如此下来就能够有效提升OSPF报文交互的可靠性,这也就是主从机制的作用。

Loading状态

基于DD报文中的描述信息,OSPF设备按需求发出LSR与LSA、LSACK等报文。

LSR、LSU、LSA交互过程(图片)

A设备主要向B设备发起LSR请求详细的LSA信息。

B设备通过LSU回复A设备所需的详细LSA信息。

A设备收到LSU确认无误之后,回复B设备LSACK。

A设备与B设备在完成所有LSA交互之后,就能够进入Full状态了。

这里不需要应用到主从了嘛?

不需要,主从机制主要是在Exchange状态下保障DD报文的可靠传输。而在Loading状态下有LSACK保障可靠传输。

Full状态

该状态下表示链路LSA已经交互成功,邻接关系建立完成。

后继链路将定时发送Hello报文进行维持邻接关系,如果链路到达Dead死亡时间未能收到Hello报文,则邻接关系断开,成为Down状态重新进行建立。

Full状态下会将学习到的LSA信息加入到LSDB表中,通过SPF算法计算选举出最优的路由条目加入到路由表中。

邻接关系的建立过程

两台路由器建立起了邻居关系之后,才会进行数据库的同步过程,邻居关系才得以建立

在建立起了邻居关系之后,路由器之间就开启数据库的同步过程。数据库的同步过程是通过LSA(链路状态)来实现的

LSDB同步过程如下:

1)、RTA和RTB的RouterID分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系。

当RTA的邻居状态变为ExStart后RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master。

2)、当RTB的邻居状态变为ExStart后,RTB会发送第一个DD报文

此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)由于RTB的RouterID较大,所以RTB将成为真正的Master。收到此报文后,RTA会产生一个Negotiation-Done(协商结束)事件,并将邻居状态从ExStart变为Exchange

3)、当RTA的邻居状态变为Exchange后,RTA会发送一个新的DD报文

此报文中包含了LSDB的摘要信息,序列号设置为RTB在步骤2中使用的序列号Y,I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示RTA宣告自己为Slave。收到此报文后,RTB会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。

4)、当RTB的邻居状态变为Exchange后,RTB会发送一个新的DD报文

此报文包含了LSDB的摘要信息,DD序列号设置为Y+1, MS-bit=1,表示RTB宣告自己为主(Master)

5)、虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为从(Slave),RTA需要对Master发送的每一个DD报文进行确认

所以,RTA向RTB发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading

RTB收到此报文后,会将邻居状态变为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。

6)、RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。

7)、RTB向RTA发送LSU报文,LSU报文中包含了那些被请求的链路状态的详细信息。RTA在完成LSU报文的接收之后,会将邻居状态从Loading变为Full。

8)、RTA向RTB发送LSAck报文,作为对LSU报文的确认。RTB收到LSAck报文后,双方便建立起了完全的邻接关系。

(2)P2P网络和P2MP网络

如果两台邻居路由器之间的二层网络是P2P网络或P2MP网络,则这两台邻居路由器之间一定会进入LSDB同步的过程;

当这两台路由器之间完成了LSDB同步的过程说明他们之间建立了邻接关系,彼此之间成为了对方的邻接路由器;

LSDB同步的过程是为了保证参与LSDB同步的路由器最终能够拥有完全一样的LSDB。

LSDB同步是交互DD报文,LSR报文和LSU报文来实现的;

(3)Broadcast网络和NBMA网络

如果两台邻居路由器之间的二层网络是P2P网络或P2MP网络,并且其中一台路由器是这个而层网络的DR或BDR,那么这两台邻居路由器一定会进入彼此之间的LSDB同步的过程;

当这两台路由器之间完成了LSDB同步之后,他们之间建立了邻接关系;

如果这两台路由器都不是这个二层网络的DR或BDR,那么这两台路由器就不会进入彼此之间的LSDB的同步过程,也就是说,彼此之间是不可能建立起邻居关系;

一个OSPF网络中的邻接关系一定是小于等于邻居关系的;

配置NBMA网络

[RTA]router id 1.1.1.1

[RTA]ospf

[RTA-ospf-1]peer 10.1.1.2

[RTA-ospf-1]peer 10.1.1.3

[RTA-ospf-1]area 1

[RTA-ospf-1-area-0.0.0.1]network 1.1.1.10.0.0.0

[RTA-ospf-1-area-0.0.0.1]network 10.1.1.00.0.0.255

[RTA-ospf-1-area-0.0.0.1]return

5、OSPF建立全过程

OSPF建立过程可以简单分为以下三个步骤:

1)、建立邻居关系     2)、建立和各自拓扑表     3)、建立邻接关系

OSPF完成邻接关系的建立有四个步骤,建立邻居关系、协商主/从、交互LSDB信息,同步LSDB。

(1)邻接关系建立流程——建立邻居关系

当一台OSPF路由器收到其他路由器发来的首个Hello报文时会从初始Down状态切换为Init 状态。

当OSPF路由器收到的Hello报文中的邻居字段包含自己的Router ID时,从Init切换2-way状态。

(2)邻接关系建立流程——建立和各自拓扑表

邻居状态机从2-way转为Exstart状态后开始主从关系选举

。R1向R2发送的第一个DD报文内容为空,其Seq序列号假设为X。

。R2也向R1发出第一个DD报文,其Seq序列号假设为Y。

。选举主从关系的规则是比较Router ID,越大越优。

R2的Router ID比R1大,因此R2成为真正的主设备。主从关系比较结束后,R1的状态从Exstart转变为Exchange。

R1邻居状态变为Exchange后,R1发送一个新的DD报文,包含自己LSDB的描述信息,其序列号采用主设备R2的序列号。R2收到后邻居状态从Exstart转变为Exchange。

R2向R1发送一个新的DD报文,包含自己LSDB的描述信息,序列号为Y+1。

R1作为从路由器需要对主路由R2发送的每个DD报文进行确认,回复报文的序列号与主路由R2一致。

发送完最后一个DD报文后,R1将邻居状态切换为Loading。

(3)邻接关系建立流程——建立邻接关系

邻居状态转变为Loading后,R1向R2发送LSR报文,请求那些在Exchange状态下通过DD报文发现的,但是在本地LSDB中没有的LSA。

R2收到后向R1回复LSU。在LSU报文中包含被请求的LSA的详细信息。

R1收到LSU报文后,向R2回复LSACK报文,确认已接收到,确保信息传输的可靠性。

此过程中R2也会向R1发送LSA请求。

当两端LSDB完全一致时,邻居状态变为Full,表示成功建立邻接关系。


整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun    暗号:CSDN】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/769538.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型概述-定义/分类/训练/应用

大模型概述 随着时代的发展, 大模型各个领域的应用正在不断扩大. 本文尽力梳理各种材料, 将从概念定义, 类型分类, 训练以及应用等方面对大模型进行一个简要的概述. 如果你想了解大模型但是却缺乏基础的知识或者觉得无从下手, 那么阅读该文章可能对你有所帮助. 如果想了解更多…

linux深度deepin基于rsync和apt-mirror同步软件源及构建本地内网源

目录 一、rsync方式二、apt-mirror方式1.安装apt-mirror2.配置apt-mirror(/etc/apt/mirror.list)3.新建存放目录开始下载 3.发布mirror站点 一、rsync方式 参考官方文档地址&#xff1a; https://www.deepin.org/index/docs/wiki/05_HOW-TO/08_%E9%95%9C%E5%83%8F%E5%8A%A0%E9%…

机器学习原理之 -- 最近邻算法分类:由来及原理详解

最近邻算法&#xff08;k-Nearest Neighbors&#xff0c;k-NN&#xff09;是一种简单且直观的分类算法&#xff0c;广泛应用于分类和回归问题。由于其易于理解和实现&#xff0c;k-NN在数据挖掘、模式识别和机器学习领域中占据重要地位。本文将详细介绍最近邻算法的由来、基本原…

LabVIEW干涉仪测向系统

开发了一套基于LabVIEW的软件系统&#xff0c;结合硬件设备&#xff0c;构建一个干涉仪测向实验教学平台。该平台应用于信号处理课程&#xff0c;帮助学生将理论知识与实际应用相结合&#xff0c;深化对信号处理核心概念的理解和应用。 项目背景&#xff1a; 当前信号处理教学…

02 数据加工层 如何搭建用户与内容的标准规范体系

你好&#xff0c;我是周大壮。 01 讲我们提到了个性化流量分发体系的四个阶段&#xff0c;并着重讲解了数据采集阶段的内容。那么&#xff0c;这一讲我们主要围绕数据加工阶段的内容进行详细讲解。 在课程开始之前&#xff0c;我们先举一个场景进行说明。 近年来&#xff0c…

学习springMVC

第四章 Spring MVC 第一节 Spring MVC 简介 1. Spring MVC SpringMVC是一个Java 开源框架&#xff0c; 是Spring Framework生态中的一个独立模块&#xff0c;它基于 Spring 实现了Web MVC&#xff08;数据、业务与展现&#xff09;设计模式的请求驱动类型的轻量级Web框架&am…

昇思25天学习打卡营第7天|深度学习流程全解析:从模型训练到评估

目录 构建数据集 定义神经网络模型 定义超参、损失函数和优化器 超参 损失函数 优化器 训练与评估 构建数据集 首先从数据集 Dataset加载代码&#xff0c;构建数据集。 代码如下&#xff1a; #引入了必要的库和模块&#xff0c;像 mindspore 以及相关的数据处理模块等等。…

vue高德地图使用

先根据官方方法给vue项目引入高德 高德文档地址 做好准备后使用 初始化地图 AMap.plugin(AMap.MoveAnimation, () >{//地图this.map new AMap.Map("mapContainer", {resizeEnable: true,center: [116.397447,39.909176],//地图中心坐标zoom:12,//缩放值});this.…

《NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构》

NATURE丨使用 AlphaFold 3 准确预测生物分子相互作用的结构 注意&#xff01;&#xff1a;本文创作仅根据个人理解和网络信息&#xff0c;如有错误恳请指正&#xff01;谢谢&#xff01; 大家好&#xff0c;今天分享的文献是2024年5月发表在Nature上的“ Accurate structure …

Qt/C++编写地图应用/离线地图下载/路径规划/轨迹回放/海量点/坐标转换

一、前言说明 这个地图组件写了很多年了&#xff0c;最初设计的比较粗糙&#xff0c;最开始只是为了满足项目需要&#xff0c;并没有考虑太多拓展性&#xff0c;比如最初都是按照百度地图写死在代码中&#xff0c;经过这几年大量的现场实际应用&#xff0c;以及大量的用户提出…

深度学习标注文件格式转换

json转xml 原始数据集文件夹中图片格式为bmp&#xff0c;标注文件为json&#xff0c;图片和标注文件放在同一个文件夹下面&#xff0c;将json转为xml格式&#xff0c;图片和标注文件分别存放在一个文件夹下面。 headstr """\ <annotation><folder>…

C语言 -- 函数

C语言 -- 函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return 语句6. 数组做…

页面加载503 Service Temporarily Unavailable异常

最近发现网页刷新经常503&#xff0c;加载卡主&#xff0c;刷新页面就正常了。 研究之后发现是页面需要的js文件等加载失败了。 再研究之后发现是nginx配置的问题。 我之前为了解决一个漏洞检测到目标主机可能存在缓慢的HTTP拒绝服务攻击 把nginx的连接设置了很多限制&#…

通过easyexcel导入数据,添加表格参数的校验,同表格内校验以及和已有数据的校验

引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version><scope>compile</scope></dependency> 需要导入到某个目录下 如果产品名称相同&#xff0c…

这玩意终于有免费的了———Navicat Premium Lite

免费啦&#xff01;&#xff01;&#xff01;X&#xff01;&#xff01;&#xff01; 免费啦&#xff01;&#xff01;&#xff01;X&#xff01;&#xff01;&#xff01; 免费啦&#xff01;&#xff01;&#xff01;X&#xff01;&#xff01;&#xff01; 去下载吧&…

基于Teager-Kaiser能量算子的肌电信号降噪方法(MATLAB)

Teager-Kaiser能量算子是一种非线性算子&#xff0c;它能有效提取信号的瞬时能量&#xff0c;对信号瞬时变化具有良好的时间分辨率。Teager-Kaiser能量算子只需信号三个采样点&#xff0c;即可快速跟踪信号的幅值和角频率变化&#xff0c;计算实现简单、运算量小。 clc clear a…

【 香橙派 AIpro评测】大语言模型实战教程:香橙派 AIpro部署LLMS大模型实站(保姆级教学)

引言 OrangePi AIpro 这块板子作为业界首款基于昇腾深度研发的AI开发板&#xff0c;一经发布本博主就火速去关注了&#xff0c;其配备的 8/20TOPS澎湃算力是目前开发板市场中所具备的最大算力&#xff0c;可谓是让我非常眼馋啊&#xff01;这么好的板子那必须拿来用用&#xff…

WPF 3D绘图 点云 系列五

基本概念:点云是某个坐标系下的点的数据集。 可能包含丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等 点云可以将现实世界原子化,通过高精度的点云数据可以还原现实世界。万物皆点云。 通过三维激光扫描仪进行数据采集获取点云数据,其次通过二维影像进行…

初次使用GitHub教程入门

注册一个github账户 访问地址&#xff1a;https://github.com/&#xff0c;点击右上角sign up&#xff0c;录入以下信息&#xff0c;邮箱&#xff0c;密码&#xff0c;账号&#xff0c;会有邮箱验证&#xff0c;跟着步骤来就好了 配置 本机上设置你的github的邮箱和用户名 …

R语言学习,入门

我是一名6年开发经验的程序员&#xff0c;后端&#xff0c;大数据&#xff0c;前端都会。 现在加入了医疗行业&#xff0c;要做数据分析&#xff0c;前同事的实验室生信专业的&#xff0c;用的是R语言&#xff0c;为了跑通他的程序。就来学一下吧&#xff0c;看了一下好像挺简…