与很多协议一样, EIGRP也使用了路由器ID (RID)的概念,用一个4字节的编号来标识某个路由器实例。每个地址家族实例拥有自已独立的RID。工程师可以在一台路由器上,为多个EIGRP进程和地址家族实例使用相同的RID。最初, EIGRP的RID是用来在应用了重分布的EIGRP环境中预防路由环路的。在将外部路由注人到EIGRP域中时, RID用来标识路由的来源(路由器)。每条外部路由都关联着一个RID,这正是将它重分布到EIGRP中的那台路由器的RID。如果路由器接收到的外部路由携带着与本地相同的RID,路由器就会丢弃这条路由。在多台路由器都执行了路由重分布的网络中,这个特性能够减少网络中出现路由环路的可能性。最初, EIGRP的内部路由中并不通告RID。不过在最近的IOS中,内部路由也同样通告EIGRP的RID了。因此,在EIGRP中通告的每一条路由(内部或外部)都携带着RID,标明是哪台路由器将它汪人到EIGRP中。 RID的应用逻辑并没有发生改变一二路由器会丢弃所有携带着自已RID的路由。下例展示了通告路由中携带的EIGRP RID。
10.0.2.0/24被作为内部路由通告,这条路由已经携带了通告路由器的RID 10.255.255.2
下边的输出展示了一条重分发路由也携带了起源路由器的ID 10.255.255.2,和之前的起源路由器一样。
EIGRP RID的选取规则与OSPF一样。路由器会优先选择eigrp router-id命令配置的RID;如果工程师没有手动配置的话,路由器会从所有启用了的环回接口中选择最大的IP地址作为ⅢD;如果工程师没有配置环回接口,或者没有启用了的环回接口,路由器会从所有启用了的接口中选择最大的IP地址作为RID.一旦路由器选定了RID,它就不能再重新生成RID,除非工程师移除了EIGRP进程、手动配置了RID,或者删除了手动配置的RTD。在通过命令eigrp router-id手动配置RID时,不能使用0.0.0.0和255.255.255.255;除此之外的其他值都是有效且可用的。如果路由器的RID发生了改变,它就会断开并重新建立邻接关系,从而导致短暂的连通性问题。如果在一台正在运行的路由器上更改了它接口的IP地址,并且并没有重新启动路由器,在这种情况下, EIGRP的RID并不会发生变化。不过这种做法在特定环境中有可能带来问题,比如在网络中添加一台新路由器,让它使用其他路由器的地址,并且更改了地址的路由器并没有重启。这样一来,网络中就可能有两台路由器使用相同的EIGRP RID ,它们将无法学到对方注人到EIGRP中的路由。路由器并不会在日志消息中指出这一情况,不过在EIGRP事件目志中倒是可以看到一条比较隐蔽的目志消息,如下
在接收到的更新中忽略172.16.1.0/24路由
以前,要想查看当前的RID有点费劲。在以前的IOS版本中,能够显示路由器RTD的地方只有命令show ip eigrp topoIogy和命令show ipv6 eigrp topoIogy的第一行,详见例8-180从IOS 15.0(1)M版本开始,在新命令show eigrp protocoIs中也包含了EIGRP的RTD信息。在较新的IOS版本中,命令show ip protocoIs的输出内容中也包含了EIGRP的RID信息。下例展示了查看RID的几种方式。它的RID使用的是环回接口地址10.255.255.1/32。
以下两个命令都显示相同的输出,对于两个ipv4和IPv6,这个路由器使用相同的RID,代替这些命令,可以使用新的命令 show eigrp address-family ipv4 topology和 show eigrp address-family ipv6 topology
show eigrp protocols 命令在单个输出中涵盖所有配置的进程和地址家族实例信息,RID展示在Router-ID行。