之前的文章里我们说过路由器的工作原理和路由协议的分类,这次我们来介绍一下链路状态路由协议OSPF。
OSPF简介
OSPF(Open Shortest Path First开放式最短路径优先),是一个基于状态的内部网关路由协议,因为其收敛快,使用特殊的SPF算法不会产生路由环路,扩展性好和支持认证等优点,逐渐取代了距离矢量路由协议rip。
OSPF是链路状态路由协议,所以它发送的不是路由条目,而是链路状态信息,也叫作LSA,每一个运行了OSPF的路由器都会将自己的本地直联接口生成LSA,而有个专程储存这些LSA的东西叫做链路状态数据库也叫作LSDB。OSPF通过LSDB中的信息,计算生成出去往目的地的路由条目。
OSPF工作原理
①当两台路由器连接之后,运行了ospf这时候他们就会建立ospf的邻居
②邻居建立完成之后两个邻居互相发送自己的LSDB(LSDB中包含的是LSA)
③OSPF收到邻居的LSA之后放入自己的LSDB中,然后运行SPF算法,计算出去往一个目的地的最短路径,放入自己的路由表。
LSA:里面包含了一个接口ip地址 掩码 开销 等信息,OSPF通过一个LSA就能够计算出一条或者多条路由条目。LSA老化时间是60分钟,当LSA老化之后对应的路由条目就会被删除
OSPF三张表
邻居表:运行了OSPF之后的路由器,开始互相发送hello包10s一次,用于建立邻居,40秒没收到邻居的hello包就将其断开
链路状态数据库:收到了对方的LSA之后,放入自己的LSDB开始计算
路由表:将LSA计算出最优的路由条目放入路由表中
(OSPF不会把从一台路由器收到的LSA再发回去)
配置思路:
①启用ospf并设置rid
②进入不同的区域中
③将接口宣告进区域中
配置命令
[Huawei]ospf 100 router-id 1.1.1.1 //设置ospf进程号为100 rid为1.1.1.1
[Huawei-ospf-100]area 0 //进入到区域0中
[Huawei-ospf-100-area-0.0.0.0]net 12.1.1.1 0.0.0.0//宣告ip为12.1.1.1的接口
进程号的作用
100是ospf的进程号,本地有效,用于分割,一个路由器可以启用多个进程。
![d5bde164b563413dfbb82c9c8bd5a1b6.png](https://i-blog.csdnimg.cn/blog_migrate/79e7c149c69702a33799d0ce446578d5.png)
看这样一张图,三台路由器运行了OSPF,这时候不想让R3学到R1上的1.1.1.1这时候可以在R2上面启用两个ospf进程,将F0/0口宣告近一个进程中,将F0/1宣告近另一个进程中,两个进程彼此独立,从一个进程学到的路由不会传到另一个进程里去。
RID的作用
每个启用ospf的路由器都要设置一个RID,在一个ospf路由域中一个RID,唯一标识了一台路由器。
Rid的选举方式:
①手动配置
②自动选举:1.比较本地逻辑接口ip最大的,2.比较本地物理接口ip最大的
区域的作用
ospf为了防环和可扩展性提出骨干区域和非骨干区域的概念,将一个或多个路由器划入不同的区域,非骨干区域只能通过骨干区域交互路由信息,实现无环路。
举个例子
![6273c64daadef6e8e1bf50bee0a0adb5.png](https://i-blog.csdnimg.cn/blog_migrate/be0ebc8bd307340b70d157d99be5fa71.png)
我们看这样一张图比如R4上面有一个4.4.4.4的路由会传给邻居R1传给R2,R2传给R3,R3传给R4,这样就形成了R4-R1-R2-R3-R4的环路,为了防环ospf提出区域划分的概念,将整个ospf路由域,化为骨干区域和非骨干区域,非骨干区域之间不能之间传递路由信息,只能通过骨干区域进行传递来实现防环。
![972fc92e9f9b6cfd332c3e60c8617fa7.png](https://i-blog.csdnimg.cn/blog_migrate/14b15ff78efdf7ebcecaaf4bab40b600.jpeg)
像这样,非骨干区域1的路由条目4.4.4.4只能通过骨干区域0,传递给非骨干2,当R3接收到这个条目之后,无法将从非骨干区域收到的路由传递到另一个非骨干区域。
0:骨干区域 除0以外的所有区域都是非骨干区域。
以上都懂的话我们再来看两个问题
问题一
![cdd8239c1fdbd71de65907c40dd1b802.png](https://i-blog.csdnimg.cn/blog_migrate/4ca6cc6c1c75301bd456fc48dbeeb7f6.png)
我们看这样一个图,R1 R2之间运行OSPF,这时候他们会开始建立邻居关系,当邻居建立完成之后,R1将自己的LSDB中的LSA发给R2,R2也将自己的发给R1,从R1收到的不发,他们将收到的LSA放入自己的LSDB计算出最优路径放入路由表。
这时候我们来看一个问题,R1将自己的1.1.1.1发给R2之后,如果R1因为某些原因导致这条1.1.1.1断了,那R2那边是不是还有这个路由条目,他要等到LSA老化(30min)之后才能删除。OSPF为了结局这个问题内置了触发更新和周期更新两种。
触发更新:当ospf路由器检测到链路变化之后重新发送给邻居自己的LSDB。
周期更新:OSPF每30min周期更新一次,发送自己的LSDB给邻居。
问题二
![ed5e7816d1dbca3a20e27dbc8c1d0fa1.png](https://i-blog.csdnimg.cn/blog_migrate/f3fdb8d4ee16b42c5885a96317720945.png)
看这样一张图,在广播网络里,我们现在的以太网就是广播网络。
五台路由器通过一台交换机互连运行ospf,拿R1举例,R1需要分别给四台路由器建立邻居关系并且发送LSA更新,R2要互相建立邻居发送LSA,R3 4 5也是,如果网络中路由器数量很多或者LSDB很大,这样的交换会占用到一定的带宽,增加了路由器的处理压力。
为了减免路由器的压力我们ospf在广播网络中选举DR和BDR,所有邻居都把LSA发送给DR,由DR统一发送给其他路由器,除了DR之外减轻了其他路由器的压力。BDR是DR的备份,当DR出现故障之后BDR接手DR的工作。
DR选举原则:
①优先级(越大越好) -----一个接口启用ospf之后就会有一个默认的优先级为1
②RID(越大越好)
BDR是优先级仅此于DR的路由器,如果优先级相同也是比较RID