OSPF的七种状态机

Router ID:在一个OSPF域内,用于标识每台路由器的ID。算法

选举规则:网络

1.手工指定(建议)ide

2.若是没有手工指定,使用Loopback接口中最大的IP地址做为Router IDoop

3.若是没有配置Loopback接口,那么使用物理接口中最大的IP地址做为Router ID学习


链路状态信息spa

链路信息包括有:3d

1.链路的类型blog

2.接口IP地址和掩码接口

3,链路上所链接的邻居路由器ip

4.链路的带宽(开销)


Hello报文:

做用:发现创建并维护邻居关系

OSPF内的路由器在交换链路状态信息时,首先须要创建一个邻居关系,这个关系是经过Hello报文实现的。邻居关系创建以后,Hello报文周期性的发送以实现邻居保持的功能,若是在必定的时间内没有收到Hello报文,则会中断邻居关系。

OSPF邻居创建的过程

状态含义:

Down:没有启用OSPF的状态;邻居失效后变为该状态

Init:初始化状态,第一次收到对端发来的hello包(包含对端route-id)时,将对端的状态设置为init

2-way:邻居状态,相互间周期发送hello的状态(双方创建会话)

Exstart:交换信息的初始化状态

发送DBD(包含本地的LSA的摘要信息)报文,选举主从路由器(利用HELLO报文中的ID和优先权来进行选举,不容许抢占,DR没了,DBDR才能上)

Exchange:交换信息的状态

该状态下,相互间发送DBD,告知对端本地全部的LSA的目录;同时,能够发送 LSR,LSU,LSACK来学习对端的LSA

Loading:加载状态(没有学习完的状态)

发送LSR,LSU,LSACK,专门学习对端的LSA的详细信息

Full:邻接状态(学习完的状态)

彼此的LSDB同步,即全部的LSA相同


成为邻居的6个条件:

1.RID不一样

2.特殊区域的flag字段相同

3..子网掩码相同

4.验证相同

5.区域号相同

6.hello/dead相同

邻居创建以下:

1.RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2。RTA启动OSPF后,RTA会发送第一个Hello报文(以组播的方式发送,目的地址为224.0.0.5),此时状态为Down,RTB收到RTA的Hello报文后,状态置为init

wKiom1mOo9SyKUduAABYCPZM86Y211.png-wh_50

上图是RTA首次发送一个Heloo报文。须要主要的是,首次发送hello包的时候不包括邻居字段,包的长度为44。

2.RTB发送Hello报文,RTA收到RTB发送的报文以后,状态为Init

wKiom1mOo_GxoNC5AABBfaKFyGk024.png-wh_50

3.RTB向RTA发送邻居列表为1.1.1.1的Hello报文,Hello报文发送三个周期(也有超过3个周期),RTA在收到RTB发来的报文邻居列表中发现本身的Router ID,并且匹配6个条件(创建邻居的6个条件)成功以后,状态为2-way,也称为邻居状态

wKioL1mOpAPDt5xcAACzw_63HrQ592.png-wh_50

4.RTA向RTB发送邻居列表为2.2.2.2的hello报文,Hello报文发送三个周期(也有超过3个周期),RTB在收到hello报文邻居列表中发现本身的Router ID,并且匹配6个条件(创建邻居的6个条件)成功以后, 状态置为2-way,也称为邻居状态

wKioL1mOpDGSbCJJAACcAeRy3jg873.png-wh_50

OSPF有多种类型的网络(p2p,broadcast,NBMA,P2MP)

首先说一下什么是MA网络:

MA网络就是 Multiaccess 多路访问网络,它分为两种: 一是Broadcast 广播,二是Nonbroadcast Multiacccess(NBMA)非广播的多路访问网络,MA网络在OSPF中须要选出DR和BDR,来减少LSA的泛滥。

broadcast(广播)

两台或者两台以上的路由器经过共享介质互联

支持广播,组播

Hello Interval时间为10s ,Dead Interval时间为40s,选举DR/BDR

NBMA(非广播多路访问):

Hello Interval时间为30s ,Dead Interval时间为120s

在NBMA网络内,由于NBMA默认不支持广播和组播,因此没法发送Hello包,邻居也就没法接受到信息,因此,在这个网络内,须要手工指定邻居,指定邻居以后才能支持DR/BDR。

P2P(点到点):

仅有2台路由器相连

支持广播和组播

Hello Interval时间为10s ,Dead Interval时间为40s,不选举DR/BDR就能够直接达到full状态

P2MP(点到多点):

Hello Interval时间为30s ,Dead Interval时间为120s

支持广播和组播

在P2P网络中,不选举DR/BDR,能够直接达到full状态

一个路由器的接口类型改成broadcast,另外一个接口改成P2P,是否能通讯呢

wKioL1mOpFuRQzWPAAArkAmaJfw299.png-wh_50

wKiom1mOpHDQ7B7-AACd5sUMjvs667.png-wh_50

能够看出,他们已经创建起了邻居,创建邻居的条件仍是那6个条件,他们都能知足,可是他们并不能传递路由,由于broadcast支持DR/BDR,P2P不支持DR/BDR。因此,在创建邻居关系的基础上,同有或者同无DR/BDR,能够传递路由。


发送第一个DBD报文,来协商主从关系

R1

wKioL1mOpKmDcQWdAABeLH8_gmY975.png-wh_50

R2

wKiom1mOpNSihUMeAABLUzOqIOs969.png-wh_50

wKiom1mOpRuwegktAAAazDwH2BA319.png-wh_50

上图的意思是:我是主,这不是我发的第一个报文,之后也没有更多的报文

wKiom1mOpUzSL7K2AAATj3Kv8Vk124.png-wh_50

上图的意思是:我是从,这不是我发的第一个报文,之后也没有更多的报文

这样,DBD交互完成

PS:DBD报文间用序列号进行确认,主发送的序列号递增,从序列号跟主序列号是同样的,来进行确认。这是隐式确认。

收到对方发来的第一个DBD报文,就把对方的状态设成EXSTART。

在EXCHANGE状态下,就开始发送LSR,来请求LSA(请求本地没有的)

wKioL1mOpYTBdqM4AAAxp5qDXws318.png-wh_50

接收到LSR的路由器,会返回一个LSU

wKioL1mOpc3Q7TMcAABLsGSwNeo334.png-wh_50

接收到LSU的路由器以后,不只会发送LSU,还会发送一个LSACK确认

wKioL1mOpfLCBPEzAABHGq_8MZU329.png-wh_50

当收到对方发来的LSU,而且更新了LSU后,若是学完了,直接进入full状态,若是没有学习完,则进入loading状态。

PS:判断OSPF有没有路由,就看他有没有LSA


1.Link-state Request 链路状态请求包 LSR 可靠

2.Link-state Update 链路状态更新包 LSU 可靠

3.Link-state Acknowledment 链路状态确认包 LSACK

如何去处理一个接收到的LSA?

若是没有,就把它放入LSDB当中,同时用LSACK确认,而且须要LSA的泛洪;经过SPF算法,去计算最优路由。

若是有,并且优于本身的LSA,就把他放入本身的LSDB,同时用LSACK确认,而且须要LSA的泛洪;经过SPF算法,去计算最优路由。

若是次于本身的LSA,OSPF就会把本身的LSA发送给对方,让对方去学习

若是他们接收到的LSA是同样的话,就会忽略掉。

相关文章
相关标签/搜索