一、OSPF ProcessID本地有效
首先明确一下,OSPF ProcessID,范围为1-65535,用于在路由器本地标识OSPF进程。
看上图,R1使用进程号10创建了一个OSPF进程,同时宣告了自己的直连接口;而R2使用进程号20创建了一个OSPF进程,同时也宣告了自己的直连接口。虽然这两个进程号不一样,但是我们说,OSPF进程号只是本地有效,这句话的意思是,对于R1而言,它并不关心它的直连OSPF邻居-R2使用的是什么OSPF进程号,10也号,20也罢,这就有点像“自己的事自己知道” - 本地有效。
当然,在实际的部署中,我们还是特别建议全网使用一样的进程号(虽然你可以试着在每台路由器上使用不同的进程号,这当然不影响网络的运行,但是……你特么不会真这么干吧?)
二、一台路由器可创建多个OSPF进程,使用OSPF ProcessID进行区分,不同的进程相互独立
我们再看下图,
这个图很有意思,在R2上,常规的做法是,用一个进程号创建一个OSPF进程,同时将自己的两个直连接口宣告进这个OSPF进程,但是为了讲解OSPF进程ID的本地意义,我这里在R2上使用两个OSPF ProcessID创建了两个OSPF进程,并且分别宣告了R2的直连接口,换句话说,R2使用OSPF进程20与R1建立邻居关系,使用OSPF进程30与R3建立OSPF邻居关系。
如此一来,R2在本地就有了两个OSPF进程,使用ProcessID 20及30进行区分,这就是进程号的本地意义。
那么这两个进程,都会各自从其邻居R1和R2学习到OSPF路由,但是值得强调的是:
- 这两个OSPF进程相互独立,换而言之,R2通过OSPF进程20从R1学习到的OSPF路由(严格的说,应该是LSA),例如1.1.1.0/24,默认不会直接更新给R3(这是因为在R2,这两个OSPF进程互相独立互相隔离),当然,从R3更新过来的OSPF路由,R2虽然自己能学习到,但是,照样不会传递给R1,这就好像,这两个进程,虽然都在R2上,但是有那么点隔阂,世界上最遥远的距离,莫过于此啊。
- 再者,R2这两个OSPF进程虽然说彼此隔离,但是都可以为R2自身贡献路由,例如如果R1更新过来一条路由1.1.1.0,R3更新过来一条3.3.3.0,那么在R2的全局路由表里都是能看到这两条路由的。而且我们上面说了,这两条路由,不会互相灌进对方的OSPF进程(造成的直接结果是R1没有R3的路由,R3没有R1的路由),除非 -- 对了,路由重发布 你懂的
- 上面说了,这两个进程都可以为R2的全局路由表贡献路由条目,但是有一点要注意,如果R1及R3都向R2来更新,同一条OSPF的路由呢?R2将会优选谁? 回忆一下我们在单一进程的情况,R2会根据COST来选,如果等价,R2会对这两条路由进行负载均衡对吧?但是这里不一样了,在这个环境中,R2会以“先到先得”的原则,谁的路由先过来,我就优选谁,所以跑的快还是能抢到妹纸的。
三,总结
- OSPF ProcessID只是本地有效,用来在本地区分不同的OSPF进程
- 虽然OSPF ProcessID本地有效,但是我们仍然建议,除非有特殊需求,否则全网使用一致的OSPF进程ID,这将方便网络管理和维护
- 什么情况下需要用到多OSPF进程呢?这个问题可就大了,一般而言,一台路由器创建一个OSPF进程,可以实现网络的需求,但是在一些特殊的、复杂的环境当中,单一的OSPF进程可能无法满足要求,因此在一台路由器上创建多个OSPF进程,这样一来的直接好处是,这台路由器从原先的屌丝角色--OSPF interArea Router,华丽丽的变成了一台ASBR,它可以在进程之间重发布、可以过滤路由或LSA、可以操控路由、可以做基于route-map的策略、可以做路由汇总等等。