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
上图是RTA首次发送一个Heloo报文。须要主要的是,首次发送hello包的时候不包括邻居字段,包的长度为44。
2.RTB发送Hello报文,RTA收到RTB发送的报文以后,状态为Init
3.RTB向RTA发送邻居列表为1.1.1.1的Hello报文,Hello报文发送三个周期(也有超过3个周期),RTA在收到RTB发来的报文邻居列表中发现本身的Router ID,并且匹配6个条件(创建邻居的6个条件)成功以后,状态为2-way,也称为邻居状态
4.RTA向RTB发送邻居列表为2.2.2.2的hello报文,Hello报文发送三个周期(也有超过3个周期),RTB在收到hello报文邻居列表中发现本身的Router ID,并且匹配6个条件(创建邻居的6个条件)成功以后, 状态置为2-way,也称为邻居状态
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,是否能通讯呢
能够看出,他们已经创建起了邻居,创建邻居的条件仍是那6个条件,他们都能知足,可是他们并不能传递路由,由于broadcast支持DR/BDR,P2P不支持DR/BDR。因此,在创建邻居关系的基础上,同有或者同无DR/BDR,能够传递路由。
发送第一个DBD报文,来协商主从关系
R1
R2
上图的意思是:我是主,这不是我发的第一个报文,之后也没有更多的报文
上图的意思是:我是从,这不是我发的第一个报文,之后也没有更多的报文
这样,DBD交互完成
PS:DBD报文间用序列号进行确认,主发送的序列号递增,从序列号跟主序列号是同样的,来进行确认。这是隐式确认。
收到对方发来的第一个DBD报文,就把对方的状态设成EXSTART。
在EXCHANGE状态下,就开始发送LSR,来请求LSA(请求本地没有的)
接收到LSR的路由器,会返回一个LSU
接收到LSU的路由器以后,不只会发送LSU,还会发送一个LSACK确认
当收到对方发来的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是同样的话,就会忽略掉。