孙 光 懿
(天津音乐学院图书与信息中心,天津 300171)
EIGRP 协议是思科公司通过整合链路状态路由协议与距离矢量路由协议各自优点后,推出的一种私有路由协议[1-4].EIGRP 路由器之间的通信不依靠广播来进行,而是通过组播或单播的方式来进行(在 IPV4 和 IPV6 网络中,运行 EIGRP 协议的路由器分别使用组播地址224.0.0.10 和 FF00::A 进行HELLO 数据包的传输),具有收敛速度快、占用网络带宽小、部署简单便捷、稳定性高、可有效避免网络中路由环路的存在、支持多种网络协议、支持VLSM、支持MD5 认证、支持在度量值不同的路径中实施流量负载均衡等特点.因此,当前EIGRP 协议在大中型网络中得到了广泛的应用.与传统的链路状态路由协议OSPF 和距离矢量路由协议RIP 相比既有相似又有不同之处.相似之处在于:第一,EIGRP 协议与OSPF和RIP协议均支持MD5认证;第二,在EIGRP路由器与OSPF路由器中都会存在一张拓扑表,这主要是用来存放邻居路由器中的路由表.不同之处在于:第一,运行 RIP协议的路由器会周期性的向相邻路由器发送整张的路由表,而运行EIGRP协议的路由器不会周期性的向相邻路由器发送整张的路由表,只有在路由路径或度量值发生改变后,才发送相应的路由更新信息;第二,EIGRP 协议的跳数可达255 跳,而 RIP 协议的最高跳数只有15 跳;第三,运行 OSPF 的路由器会向区域内的所有路由器发送路由更新信息,而运行EIGRP 协议的路由器只是将路由更新信息发送给有需求的路由器;第四,EIGRP 协议具有路由自动汇总功能,而OSPF 协议要想实现路由汇总,必须手动进行;第五,EIGRP 协议与OSPF 协议度量值的计算方法不同.从严格意义上来讲,EIGRP 协议是一种有着链路状态路由协议特征的高级距离矢量路由协议.
在这里我们以运行 EIGRP 协议的路由器 R1、R2 为例,给出EIGRP 协议路由建立与维护的过程.第一步,建立路由器R1 与路由器R2 的邻居关系:路由器R1 会每隔5 秒向路由器R2 发送一次HELLO 数据包.路由器R2 收到 HELLO 数据包后,会自动发送更新数据包与HELLO 数据包进行应答(此更新数据包不仅包含路由器R2 中的所有路由信息,而且还包含邻居路由器去往各目的地址的度量值).路由器R1 在收到来自路由器R2 的HELLO 数据包后,双方的邻居关系就此正式建立.第二步,双方邻居关系成功建立后,路由器R1 为表明已收到路由器R2 发送的更新数据包,会向其发送一个确认数据包既ACK.第三步,路由器R1 将收到的更新数据包中的信息加入到自身拓扑表中.第四步,路由器R1 向路由器R2 发送更新数据包.(此更新数据包不仅包含路由器R1 中的所有路由信息,而且还包含邻居路由器去往各目的地址的度量值).第五步,路由器R2 在收到来自路由器R1 的更新数据包后,同样会向其发送一个确认数据包.第六步,路由器R1 与R2 的更新数据包互相交换完成后,进而计算出后继路由与备用路由(如果后继路由发生故障,而拓扑表中存在的备用路由就会成为新的后继路由),并基于后继路由更新自己的路由表.
启用EIGRP 协议的两台路由器如想成功建立邻居关系[7-8],应将二者自治系统编号(用来唯一标识EIGRP 协议进程)和计算度量值的 K 值设置为一致.需要明确的一点是:相同自治系统编号内的EIGRP 路由器,可实现自动交换路由信息.而不同自治系统编号的路由器如想交换路由信息,需配置路由重分发才可以.与 OSPF 路由协议类似,EIGRP 域内路由器的身份标识工作,也是交由路由ID 来负责进行.如果网络管理人员没有手动为EIGRP 路由器设置路由ID,那么路由器会将最高的LOOPBACK 接口IP 地址作为自己的路由 ID.如果EIGRP 路由器不存在LOOPBACK 接口,那么这台路由器会将所属活跃接口的最高IP 地址设置为路由ID.路由ID 一旦成功建立就不会自动改变,除非路由器不再运行EIGRP 协议或对其进行人为更改.
通过思科网络仿真软件 GNS3,本研究搭建了一个由3台 Cisco3640 路由器构成的 EIRGP 网络.为节省文章篇幅,这里只给出路由器R1 的详细配置过程,网络拓扑如图1所示.
图1 EIGRP协议基本配置
路由器R1 的配置:
R1(config)#router eigrp 25
R1(config-router)# eigrp router-id 11.11.11.11//设置路由器ID
R1(config-router)#network 172.18.1.0
R1(config-router)#network 192.168.6.0
以路由器R2 为例,并使用 show ip eigrp nei 命令查看与路由器R1、R3 的邻居关系是否成功建立.如图2所示.其中,H 表示EIGRP 会话建立的顺序,Address 表示 EIGRP 对端邻居的 IP,Uptime 表示路由器R2 与R1、R3 的邻居关系已成功建立了多长时间,Q 表示将要发送EIGRP 数据包的数量.当网络发生故障时,此值将大于0.从中我们不难发现:路由器R2 已成功启动了编号为25 的 EIGRP 进程,并与路由器R1、R3 成功建立了邻居关系.其 EIGRP 对端邻居IP 地址分别为175.18.1.1 和 175.17.1.2.
图2 路由器R2的EIGRP邻居关系
另外,为了清楚直观的了解EIGRP 协议的工作过程,以路由器 R2 接口 s2/0 为源,对其进行抓包分析.如图3所示.
从中不难发现:第一,路由器 R1 与路由器 R2为了建立与维持EIGRP 邻居关系,互相之间每隔5秒发送一次HELLO 数据包(HELLO 数据包无需被确认,其发送周期是由网络带宽大小来决定的.如果网络带宽大于1.544 兆,那么发送周期为5 秒;如果网络带宽小于1.544 兆,那么发送周期为60 秒),保持时间为15 秒(默认为 HELLO 数据包发送周期的三倍),目标地址均为组播地址224.0.0.10(这也决定了EIGRP 协议只能在内网中使用).第二,路由器R1 与路由器 R2 所发送的HELLO 数据包中包含有相同的自治系统编号与度量值.第三,EIGRP 协议的 HELLO 数据包与OSPF 协议的 HELLO 数据包一样,也是被封装在IP 数据包内进行传输的.第四,计算 EIGRP 度量值所使用的变量,K1、K2、K3、K4、K5 的值分别为 1、0、1、0、0.
图3 路由器R2接口s2/0的数据包
为了保证EIGRP 网络的安全性,防止未经授权的路由器进入EIGRP 网络,并向相邻路由器发送虚假的路由更新信息,有必要对组成EIGRP 网络的各路由器进行身份验证.需要说明的是:EIGRP 协议仅支持MD5 身份验证,并且在默认情况下,不启用身份验证功能.MD5 身份验证具有更高的安全性与可靠性,相比明文身份验证方式,它只对散列值(以路由协议、密钥、密钥 ID 为依据,通过运行某种算法而生成)进行发送,而对密钥本身则不进行发送,以此来确保黑客无法从传输线路上获取用于进行路由器身份验证的密钥.EIGRP 网络在启用身份验证后,网络管理人员均需为每台EIGRP 路由器设置相应的密钥(允许设置多个密钥,每个密钥还可以设置有效时间)与密钥ID,与此同时还可以对密钥的使用寿命进行设置.
通过思科网络仿真软件GNS3,本研究搭建了一个由2 台 Cisco3640 路由器 R1、R2 构成的 EIRGP网络,并启用其MD5 身份验证功能.每台路由器均存在2个密钥分别为 sgy79 与 lzz81.其中,密钥sgy79 只在 2018年5月1日至 2018年5月15日23点期间负责对路由器发送与收到的EIGRP 分组进行身份验证,而密钥lzz81 只在2018年5月16日至2018年5月31日23 点期间负责对路由器发送与收到的EIGRP 分组进行身份验证.为了让广大读者能够轻松的掌握EIGRP 协议MD5 身份验证的配置方法,在这里给出路由器R1 的详细配置过程,路由器R2 的配置过程与其类似,故省略.网络拓扑如图4所示.
图4 EIGRP协议MD5身份验证
路由器R1 的配置:
R1(config)#servi password-encryption/ /设置密钥字符串将以加密的方式存储在路由器R1 中
R1(config)#key chain sl
R1(config-keychain)#key1
R1(config-keychain-key)#key-string sgy79
R1(config-keychain-key)#accept-lifetime 00:00:01 1 MAY 2018 23:00:00 15 MAY 2018/ /指定密钥可用于对收到的EIGRP 分组进行身份验证的时间段.
R1(config-keychain-key)#send-lifetime 00:00:01 1 MAY 2018 23:00:00 15 MAY 2018
R1(config-keychain)#key2
R1(config-keychain-key)#key-string lzz81
R1(config-keychain-key)#accept-lifetime 00:00:01 16 MAY 2018 23:00:00 31 MAY 2018
R1(config-keychain-key)#send-lifetime 00:00:01 16 MAY 2018 23:00:00 31MAY 2018
R1(config)#int s2/0
R1(config-if)#ip authenti mode eigrp 25 md5
R1(config-if)#ip authenti key-chain eigrp 25 sl/ /在 s2/0 接口上配置 EIGRP 密钥链
众所周知EIGRP 路由器获取路由信息的唯一途径就是依靠邻居路由器.当其丢失到达目的网络的路由时,EIGRP 路由器就会向除备用路由接口外的其它所有可用接口,发送查询数据包.邻居路由器在收到查询数据包后,会检查自身路由表中是否存在有到达目的网络的路由.如存在,它会对查询数据包进行回复,并停止向自己的邻居路由器发送查询数据包.如不存在,则会向自己的每个邻居路由器继续发送查询数据包.这样以来不仅会造成网络流量的大幅增加,而且也会造成网络带宽资源的紧张.为了避免这一情况的发生,可以采用路由汇总的方式对EIGRP 协议查询消息进行优化处理.在EIGRP 网络中应用路由汇总后,不仅可有效降低网络中查询消息的数量,而且还助于控制路由表的规模.需要注意的是:虽然EIGRP 协议支持自动路由汇总(只对本地路由器产生的路由进行汇总),但是对于无类网络而言(相对与有类网络,无类网络IP 地址的子网掩码是变长的.)容易造成不可连通问题,因此在实际应用中多采用手动路由汇总.
通过思科网络仿真软件GNS3,搭建1个由4台Cisco3700路由器 R1、R2、R3、R4 构成的网络,网络拓扑如图5所示.其中,路由器 R1 为校园网出口路由器,路由器 R4 为教育网边界路由器,路由器R2、R3 均为校园网内部路由器,且存在多个连续的有类网络(相当于无类网络,有类网络的IP地址可以归结为A类、B类、C类IP).为了降低网络中查询信息的数量以及控制路由器中路由表的规模,有必要在路由器R2与R3上部署手动路由汇总.在这里给出路由器 R2、R3 的详细配置过程.
图5 EIGRP协议路由汇总网络拓扑
路由器R2 的配置:
R2(config)#router eigrp25
R2(config-router)#no auto summary
R2(config)#int s2/0/ /选择用于进行路由汇总传播的接口
R2(config-if)# ip summary-address eigrp 25 192.168.0.0/21
路由器R3 的配置:
R3(config)#router eigrp 25
R3(config-router)#no auto summary
R3(config)#int s2/0/ /选择用于进行路由汇总传播的接口
R3(config-if)# ip summary-address eigrp 25 192.168.8.0/21
2 条汇总后的路由 192.168.0.0/21 与192.168.8.0/21,除了包括路由器 R2、R3 上 4个连续的子网外,还包括了一些未在网络中部署的子网.如果这些还未在网络中部署的子网被部署在了其它地方,就会造成无法连通的问题.为了验证在路由器R2 与R3 中进行的手动路由汇总是否配置成功,使用show ip route 命令查看路由器R1、R2、R3的路由表,详情如下:
从上述各路由器的路由表中不难发现,在路由器R1 的路由表中存在两条管理距离为90,开销值为2297856 的 EIGRP 汇总路由即 192.168.0.0/21与192.168.8.0/21,这充分说明路由器 R1 已成功学习到了在路由器R2、R3 中进行的手动路由汇总.另外,路由器R2、R3 在执行完路由汇总后,会各自生成一条黑洞路由,这主要是为了确保网络中无路由环路.以路由器R2 为例,假设其收到了一条其目的地址在192.168.0.0/21 范围内的数据包,而恰巧路由器R2 的路由表中并不存在到达这个目的地址的路由.此时,如果路由器R2 的路由表中存在默认路由,那么这条数据包就会按照默认路由的路径进行转发.默认路由的下一跳设备则有可能将收到的数据包再转发回路由器 R2.这样的话,就不可避免的会产生路由环路.
图6 路由器R1的路由表
图7 路由器R2的路由表
图8 路由器R3的路由表
EIGRP 协议即可支持等开销负载均衡又可支持非等开销负载均衡.需要注意的是:这里所提到的负载均衡,只是面向流经路由器的数据流,并不涉及路由器自身所产生的数据流.对于等开销负载均衡而言,只要等开销路由的数量没有超过 maximum-paths 所设置的数量(如maximum-paths 被设置为1,则表明禁止等开销负载均衡),这些等开销路由都将会被加入到路由器的路由表中.对于非等开销负载均衡而言,通过设置 variance multiplier 命令可将后继路由和备用路由都加入到路由器的路由表中.如将备用路由加入到本地路由表中还需要满足以下两个必要条件:首先,RD(通告距离)必须小于FD(可行距离).其次,备用路由的 FD 值必须小于后继路由FD 和multiplier 相乘后的值.
通过思科网络仿真软件GNS3,搭建了一个由4台 Cisco3640 路由器 R1、R2、R3、R4 构成的网络,当路由器R1 访问路由器 R4 的 loopback 1 时,有两条路由可供选择.通常情况下一条为后继路由,一条为备用路由,只有后继路由会被加入到路由器R1的路由表中.为了让广大读者能够轻松的掌握EIGRP 协议等开销负载均衡与非等开销负载均衡的配置方法,在这里给出路由器R1 的详细配置过程.网络拓扑如图9所示.
图9 EIGRP负载均衡网络拓扑
路由器R1 的配置:
R1(config)#router eigrp25
R1(config-router)#network 192.168.3.0 0.0.0.255
R1(config-router)# network 192.168.4.0 0.0.0.255
R1(config-router)#no auto-summary
R1(config-router)#variance 5/ /对度量值的范围进行指定
R1(config)#int s2/0
R1(config-if)#ip add 192.168.3.1 255.255.255.0
R1(config-if)#bandwidth 100000/ /将 s2/0 接口的速率设置为100M
R1(config-if)#delay 2000
R1(config)#ints2/1
R1(config-if)# ip add 192.168.4.1 255.255.255.0
R1(config-if)#bandwidth 100000/ /将 s2/1 接口的速率设置为100M
R1(config-if)#delay 3000
为了验证EIGRP 协议非等开销负载均衡是否在网络中配置成功,本研究使用sh ip eigrp topology命令与sh ip route 命令分别查看路由器R1 的拓扑表和路由表.如图10、图11所示.
图10 路由器R1的拓扑表
从中不难发现,在路由器 R1 的拓扑表中存在2 条到达 192.168.7.0/24 子网的 EIGRP 路由,其中后继路由的下一跳 IP 地址为192.168.3.2,RD(通告距离为 2297856)<FD(可行距离为2809856);备用路由的下一跳 IP地址 为 192.168.4.2,RD值(通告距离为2297856)< FD值(可行距离为 3065856),且备用路由的 FD值又恰好小于后继路由 FD值的5倍,这说明备用路由也是可行的(将被加入到路由表中),因此在路由器R1 的路由表中存在两条可到达192.168.7.0/24 子网且开销值不同的路由.与此同时,两条 EIGRP 路由所承担的数据流量与其 FD 值成正比.
图11 路由器R1的路由表
路由器R1 的配置:
R1(config)#router eigrp25
R1(config-router)#maximum-paths 2 / /定义路由器R1 支持二条等开销路径负载均衡
R1(config-router)#network 192.168.3.0 0.0.0.255
R1(config-router)#network 192.168.4.0 0.0.0.255
R1(config-router)#no auto-summary
R1(config)#int s2/0
R1(config-if)#delay 3000
R1(config)#int s2/1
R1(config-if)#delay 3000
为了验证EIGRP 协议等开销负载均衡是否在网络中配置成功,使用show ip route 命令查看路由器R1 的路由表.如图12所示.
图12 路由器R1的路由表
从中不难发现,在路由器R1 的路由表中存在两条可到达192.168.7.0/24 子网且开销值相同的EIGRP 路由.其中一条EIGRP 路由经过路由器 R2,下一跳IP 地址为192.168.3.2;另一条 EIGRP 路由经过路由器 R3,下一跳 IP 地址为192.168.4.2.与此同时,2 条 EIGRP 路由所承担的数据流量比为1 ∶1.
EIGRP 协议凭借其自身特有的收敛速度快、无路由环路、支持负载均衡等特性,目前已在大中型网络中得到了广泛应用.广大工程技术人员在网络中实际部署 EIGRP 时,往往需要进一步对 EIGRP行为进行优化,从而限制EIGRP 的查询范围,控制路由表的规模,并保持EIGRP 的高扩展性.