十分钟理解OSPF路由协议
- 1.RIP的缺陷
- 以跳数为度量值
- 最大跳数为15
- 更新路由表采用全更新
- 收敛速度慢
- 2.RIP与OSPF比较
- OSPF概述
- 运行OSPF协议之前
- 运行OSPF协议之后
- 3.OSPF协议工作过程
- 1.发现邻居
- 2.建立邻接关系
- 3.传递链路状态信息
- 4.计算路由
- 4.OSPF分区域管理
有RIP协议,为什么还需要OSPF?
1.RIP的缺陷
以跳数为度量值
在开始之前我们先回忆一下RIP协议,RIP协议是以跳数作为度量值,这是它的缺陷。如下图:RIP协议会从上面64Kbs到达10.2.0.0,但是很明显下面的带宽1Gbps,下面应该更快,但是因为下面有3跳,上面只有2跳。
最大跳数为15
更新路由表采用全更新
收敛速度慢
2.RIP与OSPF比较
摘要 | RIP | OSPF |
---|---|---|
协议 | 距离矢量路由协议 | 链路状态路由协议 |
度量值 | 基于跳数选择最优路径 | 基于链路开销选择最优路径 |
路由表更新 | 每隔30s向邻居广播自己的整个RIP路由表 | 触发更新或每隔30分钟向邻接路由器发送链路状态信息的摘要,增量更新机制 |
OSPF概述
-
工作于IP层之上,IP协议号为89
-
以组播地址224.0.0.5发送协议包
-
基本思想:每个路由器将其已知的链路状态信息告诉邻居,收敛以后,网络上每个路由器对全网的链路状态有相同的认识。然后,每台路由器根据了解到的全网链路状态,独立计算路由。
如下图:R1和R2之间运行了OSPF
运行OSPF协议之前
- 对于R1来说,R1知道自己有两个直连接口,分别是:GE/0/1,10.0.0.0/24,开销是1G。GE/0/0,20.0.0.0/24,开销是1G。R1最初也只知道这么多信息。
- 对于R2来说也是一样的,R2知道自己有两个直连接口网段分别是:GE/0/1,30.0.0.0/24,开销是1G。GE/0/0,20.0.0.0/24,开销是1G,R2最初也只知道这么多信息。
运行OSPF协议之后
R1和R2会相互交流,交流方式是R1会问R2我知道的链路信息是GE/0/1-10.0.0.0/24和GE/0/0-20.0.0.0/24,你对哪个感兴趣?
R2查看自己的链路信息,20和30段我已经有了,但是我不知道10段,我想知道10段的信息,于是R1就把10段完整的信息发给了R2。这样R2就会学到10段的链路信息。同样的R1对R2说我想知道30段完整的信息,于是R2就把10段的信息发给了R1,这样R1就会学到30段的链路信息。
最终的结果就是:R1就会知道在这个网络中还有一个路由器R2,并且这个网络中有3个网段分别是10,20,30,30段直连在R2上面。同样R2也会知道全网信息。
3.OSPF协议工作过程
1.发现邻居
- 通过组播发送hello包
- 所有邻居都可能跟自己交换链路状态信息
相互发送hello包,hello包中有他们建立邻居所需的必要参数,相互收到hello包确认参数符合之后,那他们会相互认定对方是自己的邻居。并且把自己的邻居信息存到自己的邻居表。那邻居有什么作用呢?正如我们上面所说的第二点所有邻居都可能跟自己交换链路状态信息。那为什么是可能?接着往下看
2.建立邻接关系
- 只有建立邻接关系的邻居路由器才会交换链路状态信息
- 不是跟所有邻居都建立邻接关系
- 在网络中选举DR和BDR,网络内所有路由器只与DR和BDR建立邻接关系
- 广播型网络中会选DR和B DR,PPP网络中不会选举DR和BDR
为什么要选DR和BDR?
如下左图,5台设备两两交换链路信息,需要交换10次。这种效率太低。
如下右图中我们可以选举一个组长,只需要将所有的链路信息教给组长DR,组长进行汇总然后下发汇总后的路由表即可。一个组长单点故障,我们再选一个副组长BDR,组长挂了副组长来顶替,这样就更可靠。目的是啥?**“只与DR和BDR建立邻接关系”**尽可能的减少邻接关系的数量,说白了就是交换的次数,从而提高了交换链路状态信息的效率。
第四点:广播型网络中会选DR和B DR,PPP网络中不会选举DR和BDR
我们普通的网络一般都是广播型的网络,如下图:R1和R2之间使用的串口相连,我确定了R1和R2之间的广播域只有两个接口,不会有第三个接口出现,所以这种点对点的网络是不需要DR和BDR 的。
3.传递链路状态信息
-
每台设备都有一个LSDB(Link State Database,链路状态数据库)
-
LSDB中每一条就是LSA(Link State Advertisement,链路状态公告):描述链路状态信息,例如网络中某台路由器的编号是什么,其直连的网段是什么,开销是多少等
如何交换链路状态信息?
- 触发更新或每隔30分钟更新一次。触发更新:如果网络发生变化,不需要等到30分钟周期,立刻向邻居发送信息。
- 增量更新机制,只发邻居需要的LSA
- 收敛以后,区域内所有路由器具有相同的LSDB。这个LSDB能体现全网的链路状态(该网络中有哪些路由器,各自编号是什么,每台路由器直连的网段是什么,开销是多少)
4.计算路由
如下图:刚开始所有路由器都只知道自己直连的信息,当他们通过交换信息收敛之后,所有路由器上的LSDB都是相同的,所有的路由器都知道全网的信息,相当于上帝视角。
4.OSPF分区域管理
为什么要分区域管理?
因为OSPF在收敛的时候,每个路由器的LSDB都是相同的,并且这个LSDB可以体现出全网的状态 。当全网中路由器的数量增多,链路增多,每台设备需要维护的LSDB数量就非常多,会占用设备大量的内存,并且在收敛时占用大量的带宽资源,所以在这种情况下采用了分区域管理。
-
区域内的路由器只需要学到区域内的路由信息,即同一个区域内路由器才会建立邻居关系,交换LSA。收敛后同一个区域内所有设备具有相同的LSDB,这个LSDB反映了本区域内的链路状态,再计算区域内的路由;
-
区域边界路由器同时具备所在多个区域的路由信息,不同区域之间,由区域边界路由器ABR直接转发路由;
-
每个区域有一个ID,ID是32位二进制,可以表示为一个十进制数,也可以表示为点分十进制形式。例如:区域0等价于区域0.0.0.0;区域1等价于区域0.0.0.1。
-
骨干区域——区域0。
-
所有非骨干区域间通信都要通过骨干区域0转发。
-
如果网络中有不同的ospf区域,肯定有个区域是区域0.