十、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】