OSPF基础
程序员文章站
2024-02-15 18:59:34
...
OSPF
1.ospf天生无环,是因为使用了SPF算法,该算法的概述是:选择一条花费最少而且没有环路的路径.
2.ospf里有三张表:
a.邻居表:ospf使用hello报文来发现并维持邻居关系,使用ospf的路由器每10s向相连的路由器发送hello报文,40s未收到邻居的hello报文就认为该邻居down掉,并删除该邻居.
hello报文:包含有hello报文更新时间,area-id,RID,验证消息等..
如果在一个多路访问网络里,如果出现两个相同的RID(造假)或者出现area-id或者hello更新时间不一致的话,就没有办法形成邻居,因为hello报文会进行这些数据的验证.
b.拓扑表:当建立邻居关系后,路由器就向邻居发送LSA报文,路由器收集网络中所有路由器的LSA报文以形成LSDB,也就是网络的拓扑表.
LSA:链路状态通告,包含该链路的接口信息,带宽,等..
LSDB:链路状态数据库,由所有的LSA组成.(拓扑表)
c.路由表:在LSDB上面运行SPF算法,计算出到每一个网络的最优路由. COST(花费)=10的8次方/带宽(bps)
当路由收敛后,路由器只发送有变化的链路通告(LSA)
3.对于大型网络来说,许多的路由器一起发送hello报文和LSA,会占用大量的带宽,而且,如果没有分区域,那么网络中一个路由的变化就会导致整个网络路由表的更新.(当LSDB变化的时候就会重新运行spf计算路由),所以要划分区域.
划分区域后会使得网络的更新只影响本区域
area 0 叫骨干区,每个子区域都要连接到骨干区,每个子区域相互通信都要靠骨干区来传达,所以也叫传输区. area 后面的数值是0到42亿.(虽然有划分区域,但是每个子区域里的路由器都会学到整个大网络的所有路由)
4.ospf里有5种网络结构:广播多路访问,非广播多路访问,点到点,点到多点.点到多点非广播
所谓多路访问网络,指的是,多台路由器在同一个网段或者使用以太网介质(网线)的网络结构. 多路访问网络一定要选举DR和BDR.
在多路访问网络里,每台路由器会向每个邻居发送自己的LSA,如果有N台路由器,则LSA洪泛次数为N*(N-1),如果选举了DR和BDR,则每台路由器就只是把自己的LSA洪泛(组播)给DR,然后再由DR把收集到的所有LSA一次性的洪泛(组播)给BDR和DOTHER,此时LSA洪泛次数为N次.
DR和BDR发送任何包目的都是224.0.0.5(代表所有ospf路由器,包括DR,BDR),而Dother是以目的地为224.0.0.6组播DBD给DR和BDR,以224.0.0.5发送hello包和所有路由器建立2-way.(和DR.BDR建立邻接)
DR和BDR是接口概念,首要因素是时间,最先开启的接口就是DR(其实是要在40s的wait time之内),如果多个接口同时开启,按就按照下面的选举方式
DR和BDR的产生:1,先看接口优先级,以太网默认接口优先级为1,如果手工设置为0表示不参加选举(1-255),串行链路就是0. 2,其次看RID,越大的为DR,其次BDR.
RID的产生:1,手工设置,可随便设置一个ip地址为RID,必须是a,b,c类. 2,先看有没有loopback接口,有的话选ip最大的为RID,没有的话选活跃的物理接口中ip最大的为RID.一般都建议选一个loopback接口做RID.(因 为只有路由器down掉loopback接口才会down) RID也是非抢占式产生
在接口优先级都是默认的情况下,比较各台路由器的RID,最大的为DR,其次BDR.但是要注意选举有先后顺序之分!!!!(在多路访问里最先配置ospf的第一台路由器为DR,第二台为BDR,即非抢占式选举)
RID可以手工指定,但是要clear ip ospf process ,因为RID是非抢占式
DR和BDR的改变要等到下一次的选举,要使用clear ip ospf process重新启动ospf进程,在DR上输入这条命令会释放DR,BDR就会变成DR(就是重新选举),
串行口不参与选举
5.ospf配置,配置的时候要有进程号,这个是本地的概念.不同路由器的进程号可以一样
通告网络的时候要使用反掩码,0表示精确匹配,255表示无所谓. network 0.0.0.0 0.0.0.0 a 0 表示通告所有的网络.
sh ip ospf n 查看邻居表 2-way表示处于邻居状态,full表示处于邻接状态(邻接表示有LSA的交互),邻接一定是邻居,邻居不一定是邻接
sh ip ospf datebase 查看链路状态数据库
sh ip rou 查看路由表
sh ip ospf int 查看接口的ospf信息
ospf里的环回接口路由都是32位掩码,这个是ospf的特性,因为通告的时候路由器是以255.255.255.255通告出去的
在启用ospf的时候,必须保证至少有一个接口是up的
如果在多路访问网络中,把所有的接口优先级都设置为0,则所有的接口都不参加选举,那么,这些接口相互之间只能形成邻居关系(2-way),不参加选举就直接变成DOTHER,DOTHER之间只能是邻居(他们之间是不交互LSA的) 如果有DR和BDR,那么这个网络里除了DR的所有路由器只能分别和DR成为邻接关系,而他们之间只能是邻居
6.使用debug命令能看到ospf的交互和学习过程
7.ospf只能手工汇总,而且只能在ABR或者ASBR上进行,对于某一个区域内的路由器来说,是不会出现同一个区域的汇总条目的,也就是说在一个区域内无法汇总,只能学习明细路由.
ABR和ASBR上的汇总是针对区域的,把一个区域汇总之后,就通报给所有相连的区域,但是自己的路由表里不会有汇总条目,反而会增加null 0的条目.(防止路由黑洞)
学习到别的区域的路由条目标记是IA
手工汇总是在路由进程里进行,命令是:area 1 range 172.16.0.0 255.255.0.0(把area 1的路由进行汇总)
当把area 1的路由汇总后,只会通报给除了area 1的其它区域,包括area 0 ,就是说在area 0的其它路由器上就变成了一条汇总条目,但是自己路由表中还是有明细路由,而且多了null 0
8.对于ospf里的loopback接口ip,都是以255.255.255.255的掩码通告出去的.所以学到的是目的主机的路由.
router-id只有手工指定后(router-id x.x.x.x)再clear ip ospf process才能改过来
如果是添加一个loopback接口,要no router ospf 1然后再router ospf 1才能改过来
上一篇: OSPF状态机
下一篇: OSPF中的状态迁移