初识OSPF
目录
目录
一、OSPF简介
二、OSPF的工作过程
2.1 建立邻居
2.1.1 router-id
2.1.2 hello报文
2.1.3 状态机(OSPF建立邻居的过程)
2.2 同步LSDB
2.2.1 DR
2.2.2 DD报文
2.2.3 状态机(OSPF同步LSDB的过程)
2.2.4 LSR报文、LSU报文、LSACK报文
2.2.5 DR把数据库“泛洪”给其他设备,如何“泛洪”的呢?(针对P2P和P2MP网络)
三、计算路由
四、OSPF相关的部分概念
4.1区域
4.2 网络类型
4.2.1 四种网络类型的简单介绍
4.2.2 OSPF四种网络类型的差别
4.2.3 NBMA网络场景
4.2.4 P2MP网络场景
4.3 进程
4.4 设备类型
一、OSPF简介
OSPF(open shortest path first,开放式最短路径优先)是一种基于网络层的动态路由协议,属于IGP协议,用于生成路由表。
二、OSPF的工作过程
1、建立邻居
2、同步数据库
3、计算路由
2.1 建立邻居
2.1.1 router-id
说到“建立邻居”,我们必须先了解一个东西——“router-id”。router-id相当于OSPF设备的一个标识,每台使能了OSPF的设备都拥有一个router-id,并且全局唯一。
router-id的产生方式有两种,一是手工配置(最优),二是自动选举。手工配置需要配置为IPV4地址的格式,可配置范围为0.0.0.1~255.255.255.255。自动选举的选举规则为,先选自身配置的最大的loopback口地址,次选自身配置的最大的接口IP地址。但实际上,设备会选择自身配置的第一个IP地址作为router-id。当设备配置了第一个IP地址后,这个地址会作为设备全局的router-id,所以假如后期未手工指定协议的router-id,就默认使用该地址作为协议的router-id。
2.1.2 hello报文
hello报文是OSPF的一种报文,用于发现OSPF邻居、建立OSPF邻居以及维持邻居关系。通过向外发送hello报文来发现邻居;通过交互hello报文来建立邻居;通过周期性的发hello报文来维持邻居,默认10s/次(40s的死亡时间)。在broadcast网络中,hello报文的目的地址为224.0.0.5。
2.1.3 状态机(OSPF建立邻居的过程)
状态机用于标识协议的工作过程,以及具体进行到了哪个步骤。此处讲的是OSPF建立邻居的过程所涉及到的几个状态。
OSPF建立邻居的过程:
“down”状态:当设备没有邻居的时候,则认为它处于“down”状态(也称为空状态)。
“init”状态:当设备收到了对方发送的hello报文,但该hello报文的neighbor字段中没有自己的router-id时,进入“init”状态(也称为1-way)。此时表示自己发现了邻居,但是邻居还没有发现自己。
“2-way”状态:当设备收到了对方发送的hello报文,且该hello报文的neighbor字段中有自己的router-id时,进入“2-way”状态。此时表示自己发现了邻居,且邻居也发现了自己。
当建立邻居的双方都处于2-way状态时,表示邻居关系建立完毕。
2.2 同步LSDB
每台OSPF设备都拥有一张“链路状态数据库”(link state database,简称LSDB)。LSDB中存储的是路由信息以及拓扑信息,所以设备之间同步LSDB就是同步路由信息和拓扑信息。在同步了LSDB后,设备就可以根据这些信息来计算出最优的路径,同时可以避免出现环路。
2.2.1 DR
在讲“同步数据库”之前,我们先说一下LSDB的交互。假设一个广播域中有四台OSPF路由器,那么他们之间需要交互12次LSDB,才能完成数据库的同步,如下图所示。假设有五台OSPF路由器,那么需要交互20次LSDB。总之,假设有n台OSPF路由器,则需要交互n(n-1)次。可以发现,随着路由器数量的增加,交互次数会猛增,而交互的次数越多,同步数据库所花费的时间也就越多,同时也消耗了更多的带宽资源。
所以,为了减少LSDB的交互次数,一个广播域中的设备在建立好邻居之后,同步LSDB之前,会选举出一台“指定路由器”(designated router,简称DR)。同时也会选举一台“备份指定路由器”(backup designated router,简称BDR),顾名思义,就是作为DR的备份。而其他没有被选举为DR/BDR的设备,就称作DR other。(注意:一个广播域中选举一台DR/BDR,可以没有BDR,但必须有DR,否则无法同步LSDB)
DR的选举规则:先选优先级大的,优先级相同的话就选router-id大的。每台设备的dr-priority默认为1,如果优先级为0,则不参与选举。DR优先级的可配置范围为0~255,而且是基于接口配置的。还有一点需要注意,在选出DR/BDR后,不能进行抢占,意思就是在选出了DR/BDR后,如果又来了一台更优的设备,那么它也无法立即抢占,成为DR/BDR,只有等后期DR/BDR挂掉了,它才有机会替补上去。
DR的选举范围:在一个广播域中选举一个DR,因为交互数据库的时候是在一个广播域中交互的。而且前面我们说了hello报文的目的IP为224.0.0.5,这是一个预留的组播地址,专门给OSPF协议使用,只在一个广播域内有效,说明建立OSPF邻居关系的范围的也是在一个广播域内建立的,无法跨网段建立。因为路由器的每个接口属于不同的广播域,所以它可能A接口是DR,但B接口不是DR。
DR的选举时间:40s
在选举完DR/BDR后,所有DR other设备都需要和DR、BDR交互LSDB(DR和BDR之间也会交互LSDB)。在不同类型的网络中,DD报文的发送方式是不一样的,在P2P和P2MP网络中DD报文是组播发送,在broadcast和NBMA网络中DD报文是单播发送。DD报文只会在建立邻接关系的过程中发送,后面如果数据库有变化,会直接发送LSU报文来做更新,不会再次发DD报文。
选举DR/BDR之后交互LSDB的规则:交互LSDB是other和DR之间交互、other和BDR之间也会交互(other需要发送LSDB给BDR,是为了防止DR挂了的情况,到时候BDR可以不用再次收集LSDB就拥有完整的数据库,从而可以顶替DR的工作),other和other之间不会交互。正因为other和other之间不会交互LSDB,不会继续进行后面的同步LSDB的过程,进而状态机也不会发生迁移,所以other与other之间会一直停留在2-way状态。
2.2.2 DD报文
设备之间交互LSDB是通过DD报文来进行交互的。通过将链路状态数据库的摘要信息(可以理解为LSDB的目录)封装在DD报文中发送给邻居,从而实现LSDB的交互。所以DD报文的作用是描述LSDB。
DD报文中有三个标志位,分别是I位、M位、M/S位。双方发送的第一个DD报文,这三个位其实刚开始都会置1。
I位(initialization):表示第一个DD报文,如果置位,则表示该DD报文是用于选举主从的。
M位(more):表示后面有更多的DD报文。如果不置位,则表示这是最后一个DD报文。
M/S位(master/slave):表示主/从,如果置位,则表示自己是主。所以刚开始的时候,双方不知道谁是主,都认为自己是主。
2.2.3 状态机(OSPF同步LSDB的过程)
此处讲的是OSPF同步LSDB的过程所涉及到的几个状态。
OSPF同步LSDB的过程(以other和DR之间同步数据库为例):
exstart状态:选举完DR/BDR后进入exstart状态。exstart状态下会选举主从,最开始的两个DD报文(也就是R1和R2发送的第一个DD报文,也称为first DD)就是用于选举主从的(前两个DD报文是不含有摘要信息的“空DD报文”,它不起描述作用)。
选举主从的规则:选择router-id大的一方为主。
选举主从的目的:确定序列号。设备发出的第一个DD报文的序列号是随机产生的(上图中的X和Y是随机值)。选出主从后,“主”使用多少序列号,“从”就使用多少序列号,“从”跟着主走,“从”不会主动增加序列号。
序列号的作用:确保DD报文有序交互。因为每个DD报文都有一个序列号,且DD报文的序列号是有序增加的,从而通过序列号可以得知DD报文是否发生了丢包。假设从这次收到的是一个序列号为2000的DD报文,然后下次收到的是一个序列号为2002的DD报文,那么从根据序列号就可以判断出序列号为2001的DD报文发生了丢包。注意:设备发送的第一个DD报文的序列号是随机产生的。
exchange状态:交互有链路状态摘要信息的DD报文。(“从”发送第一个有摘要信息的DD报文)
loading状态:双方的数据库描述信息交互完后,进入loading状态。(当双方发送的DD报文的M位都为0后,表示两边的DD报文都发完了,于是两边进行loading状态。)
full状态:收到LSACK报文后,进入full状态,表示数据库同步完成(设备的数据库是完全一致的才叫“同步”),数据库同步完成后就开始计算路由了。full状态也表示OSPF邻接关系建立成功。(当双方全部确认完后,就进入full状态)
2.2.4 LSR报文、LSU报文、LSACK报文
LSR报文(link state request):链路状态请求,用于请求LSDB。
LSU报文(link state update):链路状态更新,用于更新LSDB,真正携带详细的数据库信息的是LSU报文。详细的数据库信息指的是LSA。LSA中有路由信息和拓扑信息。
LSACK报文(link state acknowledgement):链路状态确认,用于确认LSU。
注意:并不是一定要进入loading状态才可以发LSR、LSU、LSACK。进入loading状态的标志是收到M位=0的DD报文,而LSR、LSU、LSACK在exchange状态下就可以发送了。因为在exchange状态下双方会交互DD报文,然后就会知道自己缺少哪些信息,知道了缺哪些信息就可以立马发LSR来请求自己缺少的信息,不用等对方描述完后再来发请求,当对端收到LSR后,就会立马回复LSU。
2.2.5 把数据库“泛洪”给其他设备,如何“泛洪”的呢?(针对P2P和P2MP网络)
我们知道OSPF属于网络层协议,那么OSPF报文发送出去的时候也必定会封装源IP(发送该OSPF报文的接口的IP地址)、目的IP。DD报文属于OSPF报文的其中一种,它的目的IP为224.0.0.5或224.0.0.6。(224.0.0.5和224.0.0.6这两个组播地址属于预留的组播地址(也叫永久组地址),只能用于局域网中,是路由器不会转发的地址,是专门提供给OSPF协议使用的。)
当报文的目的IP为224.0.0.5时,表示所有使能了OSPF的设备都能接收该报文。
当报文的目的IP为224.0.0.6时,表示只有DR和BDR能接收该报文。
我们前面谈到了:other要把自己的LSDB发给DR和BDR,但其实other不用分别给DR和BDR发送一份LSDB,只要目的IP为224.0.0.6(组播地址),那么只需要发送一份LSDB,DR和BDR就都可以收到该LSDB了,但其他other不会接收。所以other只需要发一份LSDB,就可以同时发给DR和BDR了。
当所有设备都把自己的LSDB发给DR、BDR后,DR和BDR就拥有了所有的数据库(完整的数据库),此时DR、BDR再往外发送一份目的IP为224.0.0.5的LSDB,那么所有的设备就都可以收到了。设备收到了这份DR发送的完整的LSDB后,与自身的LSDB进行对比,如果有自身缺少的LSA,就通过与DR交互LSR、LSU、LSACK报文,来完善自身的LSDB。最后实现所有设备LSDB的同步。(其实邻居关系是两台设备之间去建立的,所以并不存在DR发出去一个DD报文,所有设备都根据这个DD报文来请求自己缺少的信息。而且DD报文只有在P2P和P2MP网络中是组播发送)
三、计算路由
OSPF根据LSDB中的信息来计算路由。OSPF是一种链路状态协议,LSDB中存放的是链路状态信息(包括接口带宽、cost、邻居、网段等信息。接口带宽、cost、邻居这类信息可以理解为拓扑信息,网段信息可以理解为路由信息),所以在同步数据库的时候就会把这些信息都传递给邻居。
设备利用拓扑信息来“画出拓扑”,画出拓扑后再计算路由,这样就很清晰明了,也不会触环。就像我们平时去一个地方,总会看地图,然后选择最短的线路,先到哪里,再到哪里,这样也不会迷路。画拓扑以及计算路由的具体方法会在后面的文章中讲。
这里先说两点:
1、在OSPF域中不同的路由器只会拓扑信息有所差别,但是路由信息是一样的。
2、一台路由器只会有本区域的拓扑信息,但是有整个OSPF域的路由信息。
四、OSPF相关的部分概念
4.1区域
OSPF的区域分为骨干区域和非骨干区域。骨干区域就是指的area 0,非骨干区域分为普通区域和特殊区域。特殊区域有四种,分别是stub区域、totally-stub区域、nssa区域、totally-nssa区域。
区域的划分可以减小数据库的大小。
4.2 网络类型
4.2.1 四种网络类型的简单介绍
OSPF有四种网络类型,分别是广播型网络(broadcast)、点对点网络(P2P)、非广播多路访问网络(NBMA)、点对多点网络(P2MP)。
broadcast:假如设备之间使用以太网链路互联(如G口、F口、E口),那么默认就是广播型网络。
P2P:假如设备之间使用广域网链路互联(如serial口、pos口),那么默认就是点对点网络。
NBMA:假如设备之间使用帧中继交换机(FRSW)互联,那么默认就是非广播多路访问网络。
P2MP:一般情况下是不会出现的,但是在某些特殊情况下需要将NBMA网络改造为P2MP网络。
但是目前,帧中继交换机已经很少见了,所以NBMA网络和P2MP网络也就很少出现了。
4.2.2 OSPF四种网络类型的差别
hello时间 | dead时间 | 是否需要选择DR | |
broadcast | 10s | 40s | 需要 |
p2p | 10s | 40s | 不需要 |
NBMA | 30s | 120s | 需要 |
P2MP | 30s | 120s | 不需要 |
通过上面的表格,我们可以发现OSPF的dead时间是hello时间的4倍。
为什么P2P网络中不需要选举DR呢?因为在P2P网络中,设备之间通过串口线直接相连(无中间设备),所以只有两台设备,就不需要选DR,因为2台设备之间选DR并不会减少数据库的交互次数,而且选DR还会浪费时间。双方到了2-way之后不用等40s来选DR,直接进入exstart、exchange、full状态。
4.2.3 NBMA网络场景
如图所示,上面三台路由器之间通过帧中继交换机互联,FRSW和我们普通的交换机不太一样,这个需要配置DLCI号,让交换机之间互通。假设我们配置的让R1和R2之间可以通信,R1和R3之间可以通信,R2和R3之间不能通信。
这种情况下,它是可以多路访问的(R1可以访问到R2和R3),但是它是非广播的(因为R3发送一个广播包出去,R2是收不到的),所以叫不支持广播的多路访问——NBMA。在NBMA网络中,必须要选DR,在上面这种场景下,就必须保证R1成为DR,因为2、3之间不能交互数据库,他们只能和R1交互数据库。
4.2.4 P2MP网络场景
什么时候需要手动强制将NBMA网络改成P2MP网络?
假如我们配置的让R1和R2之间可以通信,R1和R3之间可以通信,R3和R4之间可以通信,其他两两之间不能通信。因为上图原本是一个帧中继网络,所以默认情况下是NBMA,但NBMA有个问题,就是默认要选DR。但是上面这种情况(1、2通;1、3通;3、4通)不能让它选DR。因为如果选DR,假如让R1选为DR,因为1和2之间可以通信,1和3之间可以通信,但1和4之间不能通信,所以这时1和4之间的数据库交互就会出现问题,所以R1不能作为DR。同理,R2、R3、R4也是不能作为DR的。所以上面这种场景,如果是NBMA网络的话,谁做DR都不合适,但NBMA网络又必须选DR,所以不能是NBMA网络。所以只能强制将上面这种网络改为P2MP。
改成P2MP后,R1可以和R2建立邻居,可以和R3建立邻居,这样一个点可以和多个点建立邻居,叫点对多点。R3可以和R1建立邻居,也可以和R4建立邻居,也是一个点可以和多个点建立邻居,叫点对多点。只有这样,才能完成R1、R2、R3、R4之间数据库的同步。所以综上所述,上面这种情况只能强制改为点对多点(P2MP)。
4.3 进程
OSPF的进程只在本地有意义,进程号的作用是隔离数据库。如果在一台设备上启用了两个进程,那么这两个进程的LSDB是相互隔离的,互不影响。而且对于一台设备而言,不同的进程相当于不同的路由协议,路由表也是隔离的。
如上图所示,即使R1和R2的进程号不同,但是R1和R2之间还是可以建立邻居的,因为hello报文中是不携带进程号的。
4.4 设备类型
- 区域内路由器(Internal Router):该类设备的所有接口都属于同一个OSPF区域。
- 区域边界路由器ABR(Area Border Router):该类路由器可以同时属于两个以上的区域,但其中一个接口必须在骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。
- 骨干路由器(Backbone Router):该类路由器至少有一个接口属于骨干区域。所有的ABR和位于Area0的内部路由器都是骨干路由器。
- 自治系统边界路由器ASBR(AS Boundary Router):与其他AS交换路由信息的路由器称为ASBR。ASBR并不一定位于AS的边界,它可能是区域内路由器,也可能是ABR。只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!