OSPF进程号的意义及多进程OSPF—吴锦霖分享
1. OSPF进程号的概念
在配置OSPF时,我们采用的是router ospf命令,在该命令后面需要加上这个OSPF进程的进程号(Process-Id),进程号用于在一台路由器上区分不同的OSPF进程。这就有点像人格分裂的感觉 —— 一个自然人有多种不同人格,每种人格之间相互独立,互不影响。进程号的取值范围是1-65535。
上图所示的拓扑中,R1使用进程号10创建了一个OSPF进程,同时激活了自己的直连接口FE0/0,而R2使用进程号20创建了一个OSPF进程,同时也在自己的直连接口上激活了OSPF。虽然这两个进程号不一样,但是R1-R2之间的邻居关系建立是完全没有问题的。因为OSPF进程号只具有本地意义,路由器之间交互的所有OSPF报文中,都不会体现任何关于进程号的信息。进程号只在一台路由器上用于区分多个OSPF进程,因此对于R1而言,它并不关心它的直连OSPF邻居R2使用的是什么OSPF进程号,10也号,20也罢,这就有点像“自己的事自己知道就行“ -- 本地意义。
当然,在实际的网络部署中,除非有特定的需求,我们还是建议全网使用统一的进程号,虽然每台设备使用不同的进程号对OSPF的运行没什么影响,但是却给网络的管理和维护带来了多余的成本,你不会这么干的,对吧?
2. 多个OSPF进程
上面的拓扑很有意思,在R2上,常规的做法是用一个进程号创建一个OSPF进程,同时将自己的两个直连接口都宣告进这个OSPF进程,但是为了讲解OSPF进程ID的本地意义,我这里在R2上使用两个进程号分别创建了两个OSPF进程,并且分别宣告了R2的两个直连接口,换句话说,R2使用OSPF进程12与R1建立邻居关系,使用OSPF进程23与R3建立OSPF邻居关系。如此一来,R2在本地就有了两个OSPF进程,使用进程号12及23进行区分。整个网络中也就出现了两个OSPF域(OSPF Domain)。这两个OSPF进程,都会各自从其邻居R1和R3学习到OSPF路由,但是值得强调的是:
· 这两个OSPF进程相互独立和隔离(两个OSPF Domain),两个进程独立维护各自的LSDB。换而言之R2通过OSPF进程12从R1学习到的OSPF路由(严格的说,应该是LSA),例如描述1.1.1.0/24的LSA,缺省时不会传递到进程23的(这是因为在R2,这两个OSPF进程互相独立互相隔离),当然,从R3学习过来的OSPF路由,R2虽然自己能学习到,但是照样不会传递给R1,这就好像,这两个进程虽然都在R2上,但是彼此之间有着一道鸿沟,世界上最遥远的距离,莫过于此啊。
· 再者,R2这两个OSPF进程虽然说彼此隔离,但是都可以为R2自身贡献路由,例如如果R1更新过来一条路由1.1.1.0/24,R3更新过来一条3.3.3.0/24,那么在R2的全局路由表里都是能看到这两条路由的。但这两条路由不会互相灌进对方的OSPF进程(造成的直接结果是R1没有R3的路由,R3没有R1的路由),除非 -- 对了,路由重发布,你懂的。
3. OSPF进程之间的路由重发布
同一台路由器上的不同OSPF进程相互独立,各自维护自己的LSDB。如果要把一个OSPF进程内的路由注入到另一个进程中,就需要部署路由重发布,例如上图所示,R2作为一台ASBR,要把进程12中的路由注入到进程23中,配置如上。当然,如果要实现全网路由互通,则还需要在OSPF进程12中,将进程23的路由重发布进来。
4. 什么时候会使用不同的OSPF进程
我们知道一台路由器可以创建多个OSPF进程,而且进程之间相互隔离。一般情况下,当我们在做网络建设时,整个网络就是一个统一的路由选择域,如果选用OSPF作为路由协议,则所有的OSPF路由器使用一个OSPF进程即可。
上图展示了一个大型企业的网络拓扑,R1、R2、R3及R4是省公司的设备,SW1、SW2及往下是市公司的设备,R5是区县站点设备(实际上有多个区县站点,此处只显示了一个)。为了实现市公司与各区县站点的网络互通,我们在市公司所有设备,以及区县站点的所有路由器上都配置了OSPF并且进行了多区域的规划。由于整个企业数据网络的规模较大,要想打通整个网络的路由,使用一个OSPF域直接从区县站点往上拉到省公司,显然是不靠谱的,一来整个域太大,路由前缀数量太多,二来OSPF的多区域设计在面对这么大规模网络的时候显得还是有点力不从心,三来总公司并不希望看到分公司以及下面的子站点的路由明细,路由汇总势必是要考虑的,加之对流量的走向还有严格的要求,策略部署上如何考虑?因此为省公司网络规划了另外一个OSPF域,在省公司的边界设备R3、R4上创建两个OSPF进程,进程1面向总公司,进程2面向下面的市公司及区县站点。两个进程相互独立不互相干扰,而R3及R4又能够学习到省公司、分公司及各个区县站点的路由,两个OSPF域可以独立规划,域内Area的设计又变得更加宽松和灵活。
当然,省公司、总干以及地市公司是需要相互通信的,这时候由于省公司的网络属于OSPF进程1,而市分公司及区县站点的网络属于OSPF进程2,相互独立,为了把路由打通,就需要在R3和R4上执行OSPF进程之间的路由相互重发布。一旦把R3、R4设计为路由重发布的执行点,他俩瞬间就变得非常重要和牛逼了,因为在重发布的过程中,可以执行路由策略、可以做路由过滤,更可以做路由汇总,网络的设计和规划就变得非常有弹性了。
下面再来看多进程OSPF的另一个例子:
在上图所示的网络中,存在两个不同的业务。生产及办公,两个业务各有自己的服务器网络,两台Router分别连接着这两个业务的服务器网络。而终端用户则连接在SW上,现在终端用户需要访问各自业务的服务器,那么SW当然是需要有相应的路由的。我们希望将生产及办公的业务进行隔离,但是这两个业务的终端用户又都是连接在SW上,如何隔离?很简单,在SW上创建两个OSPF进程,其中进程1用于生产业务,进程2用于办公业务。在OSPF进程1中,激活VLAN10及VLAN20对应的SVI,并激活与SC-Router对接的三层接口;在OSPF进程2中,激活VLAN30、40对应的SCI,并激活与BG-Router对接的三层接口,如此一来办公及生产服务器网段的路由通过这两个OSPF进程在SW上进行了隔离。
这的确是一种好方法,但是虽然OSPF进程是隔离的,SW的全局路由表中却拥有者生产及办公两个业务的路由,也就是说两个业务的路由实际上在SW这个点上是打通的,显然不够安全,如果有人从办公网络登到办公终端,然后再从办公终端跳转,去访问生产服务器就麻烦了。所以,我们又引入了另一个概念——VRF(Virtual Routing Forwarding,虚拟路由转发),所谓的VRF你可以理解为虚拟设备,通过在SW上创建VRF实例,并且将生产的OSPF进程关联到一个VRF实例中,从而彻底将生产路由与办公路由进行隔离(办公路由及业务跑在根设备上,生产路由及业务跑在VRF实例上,两者完全隔离,可以想象为两台SW)。关于VRF的进一步内容,请查阅相关文档,这里篇幅所限,不做详细探讨。