文/苏艳梅
router id 用来唯一表示ospf 网络中的一个节点,其选择规则RFC2328上有明确规定,但是各厂商在实现的过程中又有所不同,下面将介绍H3C Comware V5平台ospf router id 的选举规则。
OSPF任意一个进程都必须有一个非零的ROUTER ID,OSPF进程使用的Router ID可以通过手工配置或者使用系统公用的ROUTER ID,如果出现既没有手工配置又没有系统公用的ROUTER ID可供使用的情况,则OSPF进程将处于休眠状态,不运行任何协议功能。
OSPF进程手工配置的ROUTER ID具有最高优先级,通过以下命令给OSPF进程配置的ROUTER ID优于其它所有方式产生的ROUTER ID,具体配置如下:
[Router] ospf 1 router-id ?
X.X.X.X OSPF Private router ID value
在全局模式下配置的公用ROUTER ID的优先级仅次于直接给OSPF进程手工配置ROUTER ID,即它具有第二优先级,具体配置如下:
[Router] router id ?
X.X.X.X Router ID for routing protocols
如果既没有给OSPF进程手工配置ROUTER ID,也没有在全局模式下配置公用ROUTER ID,则OSPF会使用系统从可用的IP地址中自动选举出来的公用ROUTER ID,即接口IP地址自动选举产生的公用ROUTER ID具有最低优先级。具体规则如下:
1)、在初始状态下,如果没有loopback 接口IP地址,将选择接口IP地址大的为ROUTER ID,如果有loopback接口IP地址,将选择loopback接口IP地址为ROUTER ID 。
但是有如下情况可能使你困惑:
<Router>display ip interface brief
Interface Physical Protocol IP Address
Aux0 down down unassigned
Ethernet0/0 down down 20.1.1.1
Ethernet0/0.100 down down 10.1.1.1
Ethernet0/1 *down down unassigned
[Router] ospf 100 //没有配置进程的router id 也没有配置全局的router id 所以要选择接口IP地址为ROUTER ID
[Router]display ospf 100 peer
OSPF Process 100 with Router ID 20.1.1.1 //选择接口IP地址大的为ROUTER ID
现在配置loopback接口,并配置ip 地址,具体如下:
[Router]interface LoopBack 0
[Router-LoopBack0]ip address 1.1.1.1 32
[Router-LoopBack0]
[Router-LoopBack0]display this
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
[Router-LoopBack0]
再察看ospf 100的ROUTER ID还是20.1.1.1,并没有变为loopback接口的IP地址1.1.1.1
[Router]display ospf 100 peer
OSPF Process 100 with Router ID 20.1.1.1
现在把ospf 100删掉,在重新配置以及reset ospf 100都不能使ospf 100的ROUTER ID 改变,具体如下:
[Router]undo ospf 100
Warning : Undo OSPF process? [Y/N]:y
[Router]ospf 100
[Router]dis ospf 100 peer
OSPF Process 100 with Router ID 20.1.1.1
[Router]
<Router>reset ospf 100 process
Warning : Reset OSPF process? [Y/N]:y
<Router>display ospf 100 peer OSPF Process 100 with Router ID 20.1.1.1
遇到上述现象,大家可能会困惑,为什么reset ospf 进程以及删除ospf 进程再重新配置都不能使ospf router id 重新选择呢?
具体原因是:公用的router id不是由OSPF选择的,而是路由管理来选择(因为公用router id BGP也要使用),它的存在与OSPF存不存在没有关系。所以即使OSPF进程undo掉了,但公用的router id仍然没有变化.重新配上OSPF仍会选择先前选择的公用的router id。
2)、为了保证ROUTER ID的稳定性,一旦通过选举产生公用的ROUTER ID之后,不管是否有更高优先级的接口IP地址产生,例如新配置了Loopback接口IP地址或者比现有被选为ROUTER ID更大的IP地址等都不会再重新选举公用的ROUTER ID,除非被选作公用ROUTER ID的接口IP地址本身发生变化,例如IP地址被删除或者接口被删除等才会进行重新选举。举例:
[Router]interface ethernet 0/0
[Router-Ethernet0/0]undo ip address
%Apr 6 10:45:30:13 2007 292 RM/3/RMLOG:OSPF 100 226: New Router ID elected, ple
ase restart OSPF if you want to make the new Router ID take effect. //router id 重新选择
[Router-Ethernet0/0]
3)、OSPF进程只能使用自己所属的VPN实例选举出来的公用ROUTER ID,例如OSPF 1属于VPN 1,则OSPF 1只能使用VPN 1选举出来的公用ROUTER ID,而不能使用其它VPN的ROUTER ID;
每个VPN实例只能从本实例中选取一个接口IP地址作ROUTER ID,例如VPN 1的公用ROUTER ID只能从VPN 1所有的接口IP地址中进行选举,而不能使用其它VPN的接口IP地址;在相同VPN的接口IP地址中首先优选Loopback接口IP地址;在没有Loopback接口IP地址的情况下优选相同VPN中最大的IP地址。
为了保证OSPF协议在运行过程中的稳定性,当OSPF进程正在使用的ROUTER ID需要发生变化时系统并不会自动使用新的ROUTER ID,例如有更高优先级的ROUTER ID产生或者正在使用的ROUTER ID本身被修改或者删除,此时系统还是会仍然使用旧的ROUTER ID,如果用户希望新的ROUTER ID生效,必须通过重起进程来实现ROUTER ID的更新。
如果没有给OSPF进程手工配置ROUTER ID,则OSPF进程会选用在全局模式下配置的公用ROUTER ID或者自己所属的VPN实例选举出来的公用ROUTER ID,因此当多个OSPF进程属于同一个VPN实例的情况下,每个进程会使用相同的ROUTER ID。为了避免由于组网不当造成相同自治系统中ROUTER ID冲突的情况,建议在这种情况下用以下命令给每一个OSPF进程手工指定ROUTER ID。
[Router] ospf 1 router-id ?
X.X.X.X OSPF Private router ID value