学习笔记——动态路由——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报文。此报文中邻居列表为空,此时状态为Down,RTB收到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】
相关文章:

学习笔记——动态路由——OSPF(邻接/邻居)
十、OSPF的邻接/邻居 1、OSPF路由器之间的关系 (1)基本介绍 在OSPF网络中,为了交换链路状态信息和路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。 OSPF路由器的两种关系&#x…...
k8s 答疑
1 如何修复容器中的 top 指令以及 /proc 文件系统中的信息呢? 这段自问自答的内容解释了如何通过使用 lxcfs 来修复 Docker 容器中 top 指令和 /proc 文件系统中的信息。让我们分步骤来详细说明: 背景信息 在容器化环境中,通常会遇到一个问题,即容器中的一些命令(如 to…...
[终端安全]-2 移动终端之硬件安全(SE)
本文主要介绍针对安全芯片的攻击和防护方案。 1 芯片攻击 1)故障注入攻击 故障注入攻击(Fault Injection Attack, FIA)是一种通过人为引入故障,诱发系统或芯片在异常情况下产生错误结果,从而泄露机密信息或破坏系统…...

数据库与SQL
数据库基本概念 数据库(DataBase):数据库就是存储数据的仓库数据库管理系统(DBMS):可以独立运行的软件,维护磁盘上的数据,用统一的方式维护不同种类的数据,做到通用且高效。常见的DBMS: mysqloracledb2sqlserver 数据…...

AIGC | 在机器学习工作站安装NVIDIA CUDA® 并行计算平台和编程模型
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x02.初识与安装 CUDA 并行计算平台和编程模型 什么是 CUDA? CUDA(Compute Unified Device Architecture)是英伟达(NVIDIA)推出的并行计算平台和编…...

【电商纯干货分享】干货速看!电商数据集数据API接口数据分析大全!
数据分析——深入探索中小企业数字化转型,专注提供各行业数据分析干货、分析技巧、工具推荐以及各类超实用分析模板,为钻研于数据分析的朋友们加油充电。 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)…...

随手记录: Ubuntu NVIDIA显卡驱动安装后 屏幕亮度无法调节 无法连接外显示器等问题
背景 一句话:简单记录帮身边人装系统发现 GPU和外接显示器的无法连接,同时亮度无法调节等新问题 设备型号: 联想笔记本:ThinkBook 16p Gen2CPU:AMD Ryzen 7 5800HGPU:RTX 3060 问题描述及流程ÿ…...
Java:数组
文章目录 一、概念二、声明数组2.1 格式2.2 实例 三、初始化数组3.1 格式3.2 实例 四、处理数组4.1 for循环4.2 增强for循环 五、多维数组5.1 格式5.2 实例 一、概念 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。…...

【代码随想录——图论——岛屿问题】
1.岛屿数量 https://kamacoder.com/problempage.php?pid1171 1.1 深度优先搜索 package mainimport "fmt"var direction [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}func main() {var M, N intfmt.Scanln(&N, &M)sea : make([][]int, N)visited : make…...

异步调用 - 初识
目录 1、引入 2、同步调用 2.1、例子:支付功能 2.2、同步调用的好处 2.3、同步调用的缺点 3、异步调用 3.1、异步调用的方式 3.2、异步调用的优势 3.3、异步调用的缺点 3.4、什么场景下使用异步调用 3.5、MQ技术选型 1、引入 为什么想要异步通信呢&…...
Java 家庭物联网
家庭物联网系统的代码和说明,包括用户认证、设备控制、数据监控、通知和警报、日志记录以及WebSocket实时更新功能。 ### 项目结构 plaintext home-iot-system ├── backend │ └── src │ └── main │ └── java │ └…...

机器学习——随机森林
随机森林 1、集成学习方法 通过构造多个模型组合来解决单一的问题。它的原理是生成多个分类器/模型,各自独立的学习和做出预测。这些预测最后会结合成组合预测,因此优于任何一个单分类得到的预测。 2、什么是随机森林? 随机森林是一个包含…...

Java - JDK17语法新增特性(如果想知道Java - JDK17语法新增常见的特性的知识点,那么只看这一篇就足够了!)
前言:Java在2021年发布了最新的长期支持版本:JDK 17。这个版本引入了许多新的语法特性,提升了开发效率和代码可读性。本文将简要介绍一些常见的新特性,帮助开发者快速掌握并应用于实际开发中。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨…...

Linux-DNS
DNS域名解析服务 1.DNS介绍 DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。…...

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用
使用gitlab的CI/CD实现logseq笔记自动发布为单页应用 使用gitlab的CI/CD实现logseq笔记自动发布为单页应用如何实现将logseq的笔记发布成网站使用 logseq-publish-docker 实现手动发布使用gitlab的CI/CD实现自动发布过程中的问题及解决参考资料 使用gitlab的CI/CD实现logseq笔记…...

云联壹云 FinOps:赋能某车企公有云成本管理与精细化运营
背景 某车企,世界 500 强企业,使用了大量的公有云资源,分布于多家公有云,月消费在千万级别。 业务线多且分散,相关的云消耗由一个核心团队进行管理,本次案例的内容将围绕这些云成本的管理展开的。 需求 …...
C#静态类与非静态类
1、静态类 静态类有几个重要的特点: 1)无法实例化:由于静态类不能被实例化,因此它不会占用对象内存。 2)静态成员:静态类只能包含静态成员(静态方法、静态属性、静态事件等)。 3&am…...

亚信安全:《2024云安全技术发展白皮书》
标签 云计算 安全威胁 云安全技术 网络攻击 数据保护 一句话总结 《云安全技术发展白皮书》全面分析了云计算安全威胁的演进,探讨了云安全技术的发展历程、当前应用和未来趋势,强调了构建全面云安全防护体系的重要性。 摘要 云安全威胁演进ÿ…...

GuLi商城-商品服务-API-品牌管理-云存储开通与使用
这里学习下阿里云对象存储 地址:对象存储 OSS_云存储服务_企业数据管理_存储-阿里云 登录支付宝账号,找到了我以前开通的阿里云对象存储 熟悉下API 文档中心 简介_对象存储(OSS)-阿里云帮助中心 我们将用这种方式上传阿里云OSS...
git 命令行初始化并上传项目
XXXX 为项目名称 1. 初始化 cd D:\XXXX git init git remote add origin http://账号192.168.1.231:8088/r/XXXX.git 2. 拉取项目,做本地合并 git pull origin master git fetch origin git merge origin/master 3. 添加注释,上传 git add . git c…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...

spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...
Java毕业设计:办公自动化系统的设计与实现
JAVA办公自动化系统 一、系统概述 本办公自动化系统基于Java EE平台开发,实现了企业日常办公的数字化管理。系统包含文档管理、流程审批、会议管理、日程安排、通讯录等核心功能模块,采用B/S架构设计,支持多用户协同工作。系统使用Spring B…...