以2000台OSPF路由器的大型网络为例。分成10个区域,每个区域200台路由器。每台路由器连接度为4。

1、LSDB占用内存:

假设每台路由器都通告一个loopback接口。那么一个区域中有200个router LSA ,每个router-LSA包含5个网络,另外,还有400个network LSA。假设每个区域汇总为一条3类LSA。没有4类和5类LSA。则区域内路由器上有610条LSA。假设1个ABR直连接两个区域,那么ABR上有1220条LSA。每个route-LSA占20+4+4*3*5=84字节。每个network-LSA占20+4+4*2(假设每条链路只连接两台路由器)=32个字节。一条3类LSA占20+12=32个字节。区域内路由器LSDB占用内存84*200+32*400+32*10=29920字节,大约30K字节。

即使是2000台路由器的OSPF区域LSDB占用内存也才300K。属于3个区域的ABR也不过占用内存900K。所以LSDB占内存大小显然不是OSPF可扩展性的瓶颈。

2、协议报文占用带宽。

这里暂时忽略Hello报文对带宽的占用。

很多LSA头部可以放在同一个DD报文、REQUEST、ACK中。很多LSA可以放在同一个UPDATE报文中。所以对带宽的占用只是比LSDB略多。假如一个DD、REQUEST、ACK中放70个LSA头,那么610条LSA,放在9个DD、REQUEST、ACK中进行交互,30K字节的LSA,1个UPDATE中放1.4KB的LSDB,UPDATE大约22个。总共是49个OSPF协议报文,按协议开销25%来算,报文总共也就大约40KB*8=320Kb左右。所以协议报文带宽占用在2000台路由器的OSPF域中也不是瓶颈。

3、CPU的消耗。

报文接收:

因为连接度为4,可能在短时间内收到49*4=196个OSPF报文。对于普通的路由器来一秒内可以处理200个以上的OSPF报文。所以CPU处理报文的消耗,不会成为瓶颈。

收敛过程包括

包括发现拓扑变化、产生LSA、Flood LSA、SPF计算。

拓扑变化:路由器up、路由器down、接口up、接口down。

LSA的产生、传输算法:

实际上前面分析的大量LSA只有在OSPF初始化和定时刷新时才会发生,平时只有少量的LSA传输,所以更重要的是LSA的产生、安装、传输、回收速度。这些算法的效率会影响收敛速度。网络太大,收敛速度可能会太慢。

路由计算的优化:

对于完全的SPF算法,是最消耗CPU的行为。SPF算法的时间复杂度是O(n*log(n)),其中,log是2为底的。N是路由器数目。随着网络规模的增加,SPF计算的耗时会迅速上升。所以路由计算最有可能成为影响OSPF可扩展性的因素。增量SPF和部分路由计算, 可以缓解这一问题。网络越稳定,需要路由计算的时候就越少,区域中的路由器就可以越多。反之,区域中的路由器就需要减少。

比如根据一则数据:200台路由器组成的网络,SPF计算的用时是15毫秒。实际上这是较为理想的情况下的测试值。实际中可能会出现一次网络变化,导致设备进行多次路由计算。要避免这种情况,我们需要将定时器设置得不那么激进,但是收敛速度就慢了下来。