学习笔记——动态路由——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】

相关推荐

  1. 动态-ospf

    2024-07-09 18:26:01       7 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 18:26:01       3 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 18:26:01       3 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 18:26:01       2 阅读
  4. Python语言-面向对象

    2024-07-09 18:26:01       2 阅读

热门阅读

  1. window wsl安装ubuntu

    2024-07-09 18:26:01       8 阅读
  2. 5、Redis 缓存设计相关知识点

    2024-07-09 18:26:01       10 阅读
  3. 面试题 14- I. 剪绳子

    2024-07-09 18:26:01       9 阅读
  4. 机器学习 - 比较检验

    2024-07-09 18:26:01       8 阅读
  5. Mac OS系统中Beyond Compare 4破解方式

    2024-07-09 18:26:01       9 阅读
  6. Mongodb索引的创建与命名

    2024-07-09 18:26:01       9 阅读
  7. 搭建纯净的SpringBoot工程

    2024-07-09 18:26:01       11 阅读