手册说明与学习方法
欢迎来到 EIGRP 的世界。这份手册不是一份"命令清单",而是一套"能让你真正理解并能在真机/仿真里复现"的实验教程。读完它,你不仅能照着敲命令,还能回答面试官和甲方最爱的那句:"为什么是这样?"
这份手册能给你什么
- 全知识点覆盖:从"EIGRP 是啥"到 DUAL 状态机、从 IPv4 到 IPv6、从基础配置到排错,闭环。
- 真实验证导向:每个知识点都配"实验目的 → 配置命令 → 验证输出 → 原理讲解"四段式,照着做就能看到现象。
- 通俗但有深度:用生活化的比喻降低理解门槛,但不回避 RFC 级细节(度量公式、可行条件、SIA 等)。
- 可直接抄的拓扑:所有实验用 EVE-NG + Cisco 设备,地址规划统一,避免你"照着做却对不上号"。
你需要准备的"软环境"
- 一台能跑 EVE-NG 的电脑或服务器(虚拟机即可,建议 8G 内存起步)。
- Cisco IOS 镜像(推荐
vIOS-adventerprisek9或IOSv,轻量且功能全)。 - 基础的 IP 编址与子网知识(知道 192.168.1.0/24 是什么)。
- 一点点耐心——路由协议的"优雅"来自于它背后的数学与状态机,值得你慢下来。
第1章 EIGRP 协议全景认知
1.1 什么是 EIGRP
EIGRP(Enhanced Interior Gateway Routing Protocol,增强型内部网关路由协议)是 Cisco 在 1990 年代初期开发的内部网关路由协议(IGP)。它的前身是 IGRP(Interior Gateway Routing Protocol)。
关键历史节点,记住两个年份就够吹牛了:
- 1990 年代:EIGRP 作为 Cisco 私有协议诞生,只有 Cisco 设备能跑。这是它当年被吐槽"厂商锁定"的原因。
- 2013 年:Cisco 把 EIGRP 提交给 IETF 标准化,发布 RFC 7868,从此 EIGRP 成为开放标准,理论上任何厂商都能实现(虽然实际市场仍以 Cisco 为主)。
88。它不依赖 TCP 也不依赖 UDP——这是它和 OSPF(IP 协议号 89,也不依赖 TCP/UDP)的区别之一,也是它用自己专属的 RTP 来保障可靠传输的原因。
1.2 为什么需要 EIGRP(它解决了什么痛点)
要理解 EIGRP 的价值,得先看它的"对手"们有什么问题:
- 距离矢量协议(如 RIP):收敛慢(靠"传闻"逐跳传递)、容易出环(靠水平分割等补丁)、度量粗糙(只数跳数,100M 和 1G 链路对它一样)。
- 链路状态协议(如 OSPF):无环、收敛快,但"太重"——要全网泛洪链路状态、要算 SPF 树、配置概念多(区域、DR/BDR 等),对小型网络来说"杀鸡用牛刀"。
EIGRP 想做的事很聪明:把距离矢量的简单(只和邻居说话)和链路状态的快速无环(DUAL 算法)结合起来,既收敛快、又无环路、还省资源。它只在拓扑变化时发送增量更新(partial update / triggered update),不像 RIP 那样周期性"广播全场"。
1.3 三大 IGP 协议对比
| 维度 | RIP v2 | OSPF | EIGRP |
|---|---|---|---|
| 类型 | 距离矢量 | 链路状态 | 高级距离矢量(混合) |
| 封装 | UDP 520 | IP 协议号 89 | IP 协议号 88 |
| 管理距离 AD | 120 | 110(内部) | 90(内部)/ 170(外部) |
| 度量值 | 跳数(最大 15) | 成本(带宽反比) | 复合度量(带宽+延迟为主) |
| 更新方式 | 周期性全量(30s) | 触发式 LSA 泛洪 | 触发式增量更新 |
| 收敛速度 | 慢(分钟级) | 快 | 极快(秒级) |
| 无环保证 | 靠补丁(分裂、毒化) | SPF 算法天然无环 | DUAL 算法保证无环 |
| VLSM/CIDR | 支持(v2) | 支持 | 支持 |
| 厂商 | 开放标准 | 开放标准(RFC 2328 等) | 原 Cisco 私有,现 IETF 标准 |
| 配置复杂度 | 最简单 | 最复杂(区域/类型) | 中等 |
1.4 关键术语速记(先混个脸熟)
这些词后面会反复出现,先在这里建立印象,不理解没关系:
- AS(Autonomous System,自治系统号):EIGRP 用它来隔离进程。只有 AS 号相同的 EIGRP 路由器才会建立邻居。它和 BGP 里那个"互联网级 AS 号"不是一回事,这里只是个 1–65535 的本地标识符(命名模式里甚至可以省掉它,用 AF 区分)。
- 邻居(Neighbor):直连、且成功建立 EIGRP 会话的对端路由器。
- FD(Feasible Distance,可行距离):本机到达某个目标网络的"最小度量值"。
- AD / RD(Advertised/Reported Distance,通告距离):邻居告诉我"它到目标的距离"。
- Successor(后继):当前最优路由的下一跳,它给的 FD 最小。
- Feasible Successor / FS(可行后继):备份下一跳,满足"它的 AD 比我当前的 FD 小"这个条件,可秒级接管。
- FC(Feasible Condition,可行条件):AD < FD。满足它就能当 FS。
- Active / Passive 状态:路由是"被动(稳定)"还是"主动(正在重新计算路径)"。
第2章 EVE-NG 实验平台搭建
2.1 EVE-NG 简介
EVE-NG(Emulated Virtual Environment - Next Generation)是目前最流行的网络仿真平台之一,常被称作"网络工程师的虚拟机"。它在一台 Linux 主机里用 KVM/QEMU 跑真实的网络设备镜像(Cisco、Juniper、华为等都行),你在浏览器里就能拖拽连线、开机配置,体验无限接近真机。
版本选择:
- EVE-NG Community(社区版):免费,功能足够本手册所有实验。
- EVE-NG Pro / Learning Center:付费,多了多用户、VLAN 魔术等功能,对个人学习非必需。
2.2 镜像准备与导入
EIGRP 在几乎所有 Cisco 路由镜像上都支持。本手册推荐:
| 镜像 | 说明 | 适用 |
|---|---|---|
vIOS-adventerprisek9-m.x | Cisco 官方轻量虚拟 IOS,功能全 | 首选,内存占用小 |
IOSv (15.x) | 官方 IOSv 系列 | 稳定,适合命名模式实验 |
c3725 / c7200 + 真实 IOS | 老牌 Dynamips 镜像 | 老设备情怀,但较重 |
导入步骤(社区版 Web 界面):
# 1. 通过 SCP / WinSCP 把镜像传到 EVE-NG 的镜像目录 # 路由镜像放在 /opt/unetlab/addons/qemu/ 下对应子目录 # 例如:/opt/unetlab/addons/qemu/vios-adventerprisek9-m.vmdk # 2. 修正镜像权限(EVE-NG 必做,否则设备起不来) root@eve-ng:~# /opt/unetlab/wrappers/unl_wrapper -a fixpermissions # 3. 在 Web 界面新建 Lab,添加 Node 时选择对应的 Cisco vIOS 模板即可
2.3 拓扑搭建步骤
- 登录 EVE-NG Web(
http://你的IP),Add New Lab,命名如EIGRP_Lab。 - Add Node → 选 Cisco vIOS 路由器,数量按各章节拓扑(基础实验 3 台起)。
- Add Network(云/网段),用
Management(Cloud)或纯桥接网段连接设备接口。 - 用鼠标拖线连接设备接口(如 R1 e0/0 ↔ R2 e0/0)。
- 全选设备 → Start 启动。等设备跑完 POST 进入
Router>提示符。 - 右键设备 → Console(默认 Telnet/HTML5)进入配置界面。
2.4 设备初始化约定(贯穿全手册)
为避免每个实验重复写初始化,本手册统一约定:
- 关闭域名解析(避免输错命令卡 30 秒):
no ip domain-lookup - 开启日志同步:
line con 0下logging synchronous - 超时设长:
exec-timeout 0 0 - 关闭自动汇总(现代 IOS 默认已关,但显式写上更稳):
no auto-summary(经典模式进程下)
Router> enable Router# configure terminal Router(config)# hostname R1 R1(config)# no ip domain-lookup R1(config)# line con 0 R1(config-line)# logging synchronous R1(config-line)# exec-timeout 0 0 R1(config-line)# exit R1(config)# ! 后面各章在此基础上叠加 EIGRP 配置
第3章 EIGRP 核心机制深度剖析
这一章是整本手册的"发动机舱"。前面可以囫囵吞枣,这一章请慢读。理解了三张表、RTP、DUAL 和度量值,后面所有实验命令你都能"知其所以然"。
3.1 三张表:邻居表 / 拓扑表 / 路由表
EIGRP 在每台路由器内部维护三张逻辑表,数据从下往上"流动",最终变成路由表里的条目:
① 邻居表(Neighbor Table)
记录"我和哪些直连路由器成功建立了 EIGRP 邻居关系"。只和邻居表里的设备交换路由。每行包含:邻居地址、接口、Hold 时间(还剩多久没收到 Hello 就判定邻居死)、Up 时间、SRTT、RTO、队列长度等。
② 拓扑表(Topology Table)
这是 EIGRP 最特别的地方。它不只存"最佳路由",而是存到达每个目标网络的所有路径,并标注每条路径的 FD(我到目标的总距离)和 AD(下一跳邻居到目标的距离)。DUAL 算法就在这里挑 Successor 和 Feasible Successor。
③ 路由表(Routing Table)
路由器把 EIGRP 算出的 Successor 路由(AD=90)和直连、静态、OSPF 等协议的路由放在一起,按管理距离择优放入。我们平时 ping 通不通,看的就是这一张。
3.2 五种包与 RTP 可靠传输
EIGRP 用五种报文类型通信,它们都封装在 IP 协议号 88 里,目标地址是组播 224.0.0.10(所有 EIGRP 路由器都监听这个地址)。
| 包类型 | 中文 | 作用 | 可靠性 | 目标 |
|---|---|---|---|---|
| Hello | 问候包 | 发现邻居、维持邻居存活 | 不可靠(无需确认) | 组播 |
| Update | 更新包 | 发送路由信息(建邻居时全量,变化时增量) | 可靠(要 ACK) | 单播/组播 |
| Query | 查询包 | 失去路由且无备胎时,向邻居追问"你还能到吗?" | 可靠 | 单播/组播 |
| Reply | 应答包 | 回应 Query,告知自己能否到达 | 可靠 | 单播 |
| ACK | 确认包 | 确认收到了可靠的包(Update/Query/Reply) | 不可靠 | 单播 |
还有两个"幕后英雄"包,用于防卡死:SIA-Query / SIA-Reply(Stuck-in-Active 查询/应答),当一台路由陷在 Active 状态太久,邻居会主动问"你还活着在算吗?",避免被误杀。
RTP:可靠传输协议(Reliable Transport Protocol)
前面说了 EIGRP 不用 TCP。那 Update/Query/Reply 怎么保证"不丢、不乱序"?答案是它自己造了个轻量级可靠传输机制——RTP:
- 每个可靠包带序列号(Sequence Number)。
- 接收方必须回ACK(带确认号 = 收到的序列号)。
- 发送方若在 RTO(重传超时)内没收到 ACK,就单播重传;重传多次仍失败,就重置邻居关系(相当于"友尽重加")。
- 用 SRTT(平滑往返时间)动态估算 RTO,类似 TCP 的 RTT。
3.3 DUAL 弥散更新算法(核心中的核心)
DUAL(Diffusing Update Algorithm,弥散/扩散更新算法)是 EIGRP 无环路、快速收敛的"大脑"。别被名字吓到,它的逻辑非常直观。我们先把几个名词换成"人话":
FD可行距离:我从家出发到目的地的总路程(自己算的最小值)。
AD通告距离:邻居告诉我"从它家到目的地多远"。
Successor后继:当前给我最短路程(最小 FD)的那个邻居,它就是"主路"。
FS可行后继:邻居的 AD 比我的 FD 还小 → 它肯定不在环上 → 可当"备胎",秒切。
FC可行条件:邻居的 AD < 我的 FD。满足就能当 FS。
Active主动态:主路没了、又没备胎,正在全网问路。
DUAL 状态机(路由的两种人生)
一个完整的 DUAL 故事(建议背诵)
- 路由器 R1 通过邻居 R2 到网络 N 的 FD=100(Successor=R2)。邻居 R3 说它到 N 的 AD=80 < 100 → R3 成为 FS。
- 某天 R1 和 R2 的链路断了,R1 失去 Successor。
- R1 检查发现:有 FS(R3,AD=80)。因为 FS 已满足 FC 保证无环,R1 直接把 R3 提升为新的 Successor,毫秒级切换,根本不用问别人。这就是 EIGRP 快的原因。
- 如果没有 FS(比如 R3 的 AD=120 > 100,不满足 FC),R1 就进入 Active 状态,向所有邻居发 Query:"你们谁还能到 N?"
- 邻居们回 Reply。R1 收齐所有 Reply 后,用其中的最优路径算出新 Successor,回到 Passive 状态。整个过程可能耗时数秒。
- 若 Active 状态超过 active timer(默认 3 分钟)还没收齐 Reply,R1 判定邻居"卡死(SIA)",直接重置该邻居关系。此时 SIA-Query/Reply 机制会在超时一半(约 90 秒)时介入询问,尽量避免误杀。
3.4 度量值计算实战(EIGRP 的"距离"怎么算)
EIGRP 的度量值是一个复合度量(composite metric),由 5 个参数(K 值加权)组合而成。默认情况下只使用带宽和延迟。
| K 值 | 对应参数 | 含义 | 默认权重 |
|---|---|---|---|
| K1 | 带宽 Bandwidth | 路径上最小带宽 | 1 |
| K2 | 负载 Load | 链路负载(百分比) | 0 |
| K3 | 延迟 Delay | 路径上累计延迟 | 1 |
| K4 | 可靠性 Reliability | 链路可靠性 | 0 |
| K5 | MTU | 最大传输单元 | 0 |
默认度量公式(K2=K4=K5=0 时):
Metric = 256 × ( 10⁷ / 最小带宽(kbps) + 累计延迟(µs) / 10 )
- 最小带宽:路径上所有出接口带宽里最小的那个,单位 kbps。
- 累计延迟:路径上所有出接口延迟之和,单位微秒(µs)。
- 注意延迟要
/10,因为 IOS 里delay命令的单位是"10 微秒"(tens of microseconds)。 - 前面的
256是历史遗留(早期 EIGRP 用 256 放大以避免小数),现代 IOS 仍保留。
show interface 显示的 delay 是 10000 microseconds(即 10ms),但 delay 配置命令的单位是 tens of µs。所以"10ms"在配置里要写 delay 1000。公式里已经帮你 /10 了,直接用 µs 算即可。
手算示例(务必会)
假设路径:R1 →(FE 100Mbps, delay 100µs)→ R2 →(FE 100Mbps, delay 100µs)→ 目标。
最小带宽 = 100000 kbps (100Mbps)
累计延迟 = 100 + 100 = 200 µs
Metric = 256 × ( 10⁷ / 100000 + 200 / 10 )
= 256 × ( 100 + 20 )
= 256 × 120
= 30720
所以这条路径的 EIGRP 度量值 = 30720。你会在 show ip eigrp topology 里看到它(显示为 "30720")。
3.5 计时器与 K 值(邻居建立的隐藏门槛)
两个容易忽视、但决定邻居能否起来的参数:
| 参数 | 默认(≥1.544Mbps 链路) | 默认(<1.544Mbps,如帧中继) | 说明 |
|---|---|---|---|
| Hello 间隔 | 5 秒 | 60 秒 | 多久发一次 Hello |
| Hold 时间 | 15 秒(=3×Hello) | 180 秒 | 多久没收到 Hello 就判邻居死 |
K 值匹配规则:两台路由器的 K1–K5 必须完全一致才能建立邻居。EIGRP 在 Hello 包里携带 K 值,对方一对不上就直接忽略你。这也是为什么你改了度量权重(比如开了负载 K2)后,邻居全掉——因为对端没改。
第4章 基础实验:第一个 EIGRP 网络
理论听够了,动手!本章我们用 3 台路由器搭一个三角拓扑,把 EIGRP 跑起来,并验证三张表。这是所有后续实验的地基。
4.1 拓扑与编址规划
| 设备 | 接口 | IP 地址 | 说明 |
|---|---|---|---|
| R1 | e0/0 | 10.1.12.1/24 | 连 R2 |
| R1 | e0/1 | 10.1.13.1/24 | 连 R3 |
| R1 | Lo0 | 1.1.1.1/24 | 模拟内网 |
| R2 | e0/0 | 10.1.12.2/24 | 连 R1 |
| R2 | e0/1 | 10.1.23.2/24 | 连 R3 |
| R2 | Lo0 | 2.2.2.2/24 | 模拟内网 |
| R3 | e0/0 | 10.1.13.3/24 | 连 R1 |
| R3 | e0/1 | 10.1.23.3/24 | 连 R2 |
| R3 | Lo0 | 3.3.3.3/24 | 模拟内网 |
4.2 启用 EIGRP(经典模式)
先给三台设备配好 IP(略,按上表),然后进入 EIGRP 进程。这里用 AS 号 100。注意 network 命令后面跟的是"主类网络号"(如 10.0.0.0),EIGRP 会自动把属于该主类的所有接口宣告进去。也可以用通配符精确匹配。
R1 配置:
R1(config)# router eigrp 100 R1(config-router)# no auto-summary R1(config-router)# network 10.0.0.0 R1(config-router)# network 1.0.0.0 ! network 1.0.0.0 会把 Lo0(1.1.1.1) 宣告进 EIGRP
R2 / R3 同理:
R2(config)# router eigrp 100 R2(config-router)# no auto-summary R2(config-router)# network 10.0.0.0 R2(config-router)# network 2.0.0.0 R3(config)# router eigrp 100 R3(config-router)# no auto-summary R3(config-router)# network 10.0.0.0 R3(config-router)# network 3.0.0.0
network 10.0.0.0 是"主类写法",把 10.x.x.x 所有接口都宣告。若只想精确宣告某个接口,用反掩码(通配符):network 10.1.12.1 0.0.0.0 只宣告该 IP 所在接口。主类写法是 0.0.0.0 反掩码的简写。更精确的做法推荐用接口下 ip eigrp 100 area ... 或命名模式,见第 14 章。
4.3 验证邻居与路由
配置完,先验证邻居起没起来。这是排错第一招。
R1# show ip eigrp neighbors EIGRP-IPv4 Neighbors for AS(100) H Address Interface Hold Uptime SRTT RTO Q Seq (sec) (ms) Cnt Num 0 10.1.12.2 Et0/0 13 00:01:22 10 100 0 7 1 10.1.13.3 Et0/1 12 00:01:20 11 100 0 7
解读:R1 有 2 个邻居(R2、R3),分别通过 e0/0、e0/1。Hold=13/12 秒说明心跳正常;Q Cnt=0 表示没有等待确认的包。
再看拓扑表(DUAL 的"原料库"):
R1# show ip eigrp topology EIGRP-IPv4 Topology Table for AS(100)/ID(1.1.1.1) Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply r - reply Status, s - sia Status P 1.1.1.0/24, 1 successors, FD is 128256 via Connected, Loopback0 P 2.2.2.0/24, 1 successors, FD is 409600 via 10.1.12.2 (409600/128256), Ethernet0/0 P 3.3.3.0/24, 1 successors, FD is 409600 via 10.1.13.3 (409600/128256), Ethernet0/1 P 10.1.23.0/24, 1 successors, FD is 307200 via 10.1.12.2 (307200/281600), Ethernet0/0 via 10.1.13.3 (307200/281600), Ethernet0/1
注意 (409600/128256) 的格式:前面是本机 FD(到目标的总距离),后面是邻居的 AD(下一跳到目标的距离)。例如到 2.2.2.0,R1 的 FD=409600,R2 的 AD=128256。看到 "P" 前缀说明路由处于被动(稳定)状态。
R1# show ip eigrp topology all-links ! 加上 all-links 能看到"所有路径",包括没入选的,方便判断 FS
最后看路由表(真正生效的):
R1# show ip route eigrp 2.0.0.0/24 is subnetted, 1 subnets D 2.2.2.0 [90/409600] via 10.1.12.2, 00:02:10, Ethernet0/0 3.0.0.0/24 is subnetted, 1 subnets D 3.3.3.0 [90/409600] via 10.1.13.3, 00:02:08, Ethernet0/1 10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks D 10.1.23.0/24 [90/307200] via 10.1.12.2, 00:02:10, Ethernet0/0 [90/307200] via 10.1.13.3, 00:02:10, Ethernet0/1
路由条目前的 D 表示 EIGRP(D = DUAL / EIGRP)。[90/409600]:90 是 AD,409600 是度量值。最后一行 10.1.23.0 有两条下一跳 → 这是等价负载均衡(见第 7 章)。
验证连通性:
R1# ping 2.2.2.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5)
4.4 邻居建立过程抓包解读
在 EVE-NG 里对 R1 e0/0 抓包,能看到 EIGRP 邻居建立的"握手"过程:
- R1 发 Hello(组播 224.0.0.10),带自己 AS=100、K 值、Hold 时间。
- R2 回 Hello,双方发现彼此。
- R2 发 Update(单播,初始全量路由),带序列号。
- R1 回 ACK 确认。
- R1 发 Update 给 R2,R2 回 ACK。
- 邻居关系建立,进入稳态,之后只发 Hello(每 5 秒)保活。
show ip eigrp neighbors 看空不空,再逐条排查。
第5章 度量值与路径选择
5.1 复合度量公式回顾与调参
第 3 章讲过默认公式。这里强调:EIGRP 选路只看度量值最小的那条。我们能用两条命令人为影响度量:
bandwidth <kbps>:改接口的"逻辑带宽"(不影响实际转发速率,只影响路由计算)。delay < tens-of-µs >:改接口的"逻辑延迟"。
delay 调 EIGRP 度量,而不是 bandwidth。因为 bandwidth 还会被其他协议(如 QoS、OSPF 成本)引用,乱改会"误伤友军";而 delay 几乎只被 EIGRP 用作度量,副作用最小。
5.2 手算度量值实验(验证公式)
继续用第 4 章拓扑。我们先看 R1 到 10.1.23.0/24 的两条路径度量为什么都是 307200。
路径 R1→R2→10.1.23.0:R1 e0/0 出、R2 e0/1 出。默认 FE 接口:带宽 100000kbps,delay 100µs(=1000 tens-of-µs)。
最小带宽 = 100000 kbps
累计延迟 = 100(R1 e0/0) + 100(R2 e0/1) = 200 µs
Metric = 256 × (10⁷/100000 + 200/10) = 256 × (100 + 20) = 30720
等等,为什么 show 里是 307200 不是 30720?因为 IOS 的拓扑表里延迟是以"10 微秒为单位"显示的另一套,实际内部计算用的就是 30720 再被某些版本放大 10 倍展示……这里别纠结展示细节,记住计算逻辑即可:最小带宽 + 累计延迟 → 256×(...) 是核心算法。
5.3 用 delay 改变选路(实战)
假设我们想让 R1 到 10.1.23.0 只走 R3(人为调差 R2 那条路):
! 在 R2 连接 R1 的接口上加大延迟,使经 R2 的路径度量变大 R2(config)# interface e0/0 R2(config-if)# delay 2000 ! 默认 delay 是 1000(tens-of-µs=10ms),改成 2000(=20ms)
再看 R1 拓扑表:
R1# show ip eigrp topology 10.1.23.0/24 P 10.1.23.0/24, 1 successors, FD is 332800 via 10.1.13.3 (332800/307200), Ethernet0/1 ! 注意:经 R2 的路径现在度量变大,不再是最优,只剩 R3 一条 Successor
delay 是最干净的做法。记得改完用 clear ip eigrp neighbors 或等收敛,让拓扑表刷新。
第6章 自动汇总与手动汇总
6.1 自动汇总(Auto-Summary)的坑
自动汇总会在主类网络边界把路由汇总成自然掩码(如 10.0.0.0/8、172.16.0.0/16、192.168.x.0/24)再发出去。问题在于不连续子网(discontiguous subnets):
所以现代 IOS(15.x)默认已经 no auto-summary。如果你用的是老镜像,务必显式关闭:
R1(config)# router eigrp 100 R1(config-router)# no auto-summary
6.2 手动汇总(Manual Summarization)
手动汇总才是"正确姿势":在发送接口的边界上把多条明细路由聚合成一条,减少路由表条目、抑制翻动(route flapping)、隐藏内部拓扑。
! 假设 R2 下有 10.2.0.0 - 10.2.3.0 四个 /24,想汇总成 10.2.0.0/22 发给 R1 R2(config)# interface e0/0 R2(config-if)# ip summary-address eigrp 100 10.2.0.0 255.255.252.0 ! 含义:在 e0/0 出方向,把匹配 10.2.0.0/22 的明细汇总成这一条发给邻居
验证:
R1# show ip route eigrp | include 10.2 D 10.2.0.0/22 [90/...] via 10.1.12.2, ... ! R1 只看到一条 /22 汇总,看不到四条 /24 明细 → 路由表瘦身成功
10.2.0.0/22 is directly connected, Null0)。作用是:当去往 10.2.0.0/22 内某个不存在的子网(如 10.2.5.0)的流量到达时,直接丢进 Null0,避免环路回灌。这是 EIGRP 汇总的优雅设计。
R2# show ip route | include Null0 D 10.2.0.0/22 is directly connected, Null0
第7章 负载均衡(等价 / 非等价)
7.1 等价负载均衡(默认就支持)
EIGRP 默认支持最多 4 条等价路径的负载均衡(不同 IOS 上限可达 16/32)。只要多条路径度量值完全相同,就会一起进路由表,流量按目的/包轮流分担。
! 查看/修改等价路径数量上限 R1(config)# router eigrp 100 R1(config-router)# maximum-paths 6 ! 允许最多 6 条等价路由同时进路由表
7.2 非等价负载均衡(variance)
真实网络里两条路径度量几乎不可能完全相等。EIGRP 用 variance 实现非等价负载均衡:允许"次优但满足条件的路径"也进路由表,按比例分担流量。
入选条件(两个条件必须同时成立):
- 条件 A(可行条件 FC):该路径的 AD < 当前 FD(保证无环,能当 FS)。
- 条件 B(variance):该路径的 FD ≤ variance × 最优FD。
! 假设 R1 到目标:最优路径 FD=100,另一条 FD=180 R1(config)# router eigrp 100 R1(config-router)# variance 2 ! 条件 B:180 ≤ 2×100=200 → 成立 ! 再配合条件 A(另一条的 AD 必须 < 100)才能入选 ! 入选后两条都进路由表,流量按 100:180 反比 ≈ 按度量反比分担
show ip eigrp topology all-links 确认它的 AD 是否 < FD。
第8章 默认路由注入
企业网里,内部路由器通常只需要一条默认路由指向出口(边界/核心),而不是学全网明细。EIGRP 注入默认路由有几种做法:
方法一:重分布静态默认路由(最常用)
! 在边界路由器 R2 上 R2(config)# ip route 0.0.0.0 0.0.0.0 202.96.1.1 R2(config)# router eigrp 100 R2(config-router)# redistribute static ! 把静态默认路由重分布进 EIGRP,内部路由器就能学到 D*EX 0.0.0.0/0
方法二:ip default-network(经典技巧)
R2(config)# ip default-network 10.0.0.0 R2(config)# router eigrp 100 R2(config-router)# network 10.0.0.0 ! 标记 10.0.0.0 为默认网络,EIGRP 会把它作为候选默认传播
方法三:汇总到 0.0.0.0(优雅写法)
R2(config)# interface e0/0 R2(config-if)# ip summary-address eigrp 100 0.0.0.0 0.0.0.0 ! 在出接口汇总成 0.0.0.0/0,邻居收到一条默认路由
验证内部路由器收到默认路由:
R1# show ip route eigrp D*EX 0.0.0.0/0 [170/...] via 10.1.12.2, ... ! D*EX 中 * = 候选默认,EX = 外部(重分布)路由,AD=170
第9章 被动接口(Passive-Interface)
问题:交换机下联的用户网段(如 R1 的 Lo0 或接 PC 的接口)根本不需要、也不应该和对端建 EIGRP 邻居(对面是 PC,又不是路由器)。但 network 命令会把接口"激活"去发 Hello。
解决:把这类接口设为被动接口——仍宣告该网段路由(让别人能学到),但不再发 Hello、不尝试建邻居。这既省资源又更安全(防止非法设备建邻居)。
R1(config)# router eigrp 100 R1(config-router)# passive-interface Loopback0 ! Lo0 的 1.1.1.0/24 仍会被通告,但 R1 不会在 Lo0 上发 Hello ! 更狠的写法:先全部被动,再单独放开需要建邻居的接口 R1(config-router)# passive-interface default R1(config-router)# no passive-interface e0/0 R1(config-router)# no passive-interface e0/1 ! 安全最佳实践:默认全被动,按需开启,最大限度缩小攻击面
第10章 邻居认证(MD5)
EIGRP 只支持 MD5 认证(不支持明文)。认证保证"只有持有相同密钥的合法路由器才能建立邻居",防止非法设备接入或路由毒化。
配置三步曲:
! 第一步:定义密钥链(key chain) R1(config)# key chain EIGRP-KEY R1(config-keychain)# key 1 R1(config-keychain-key)# key-string Cisco123 ! 第二步:接口启用 MD5 认证,并绑定密钥链 R1(config)# interface e0/0 R1(config-if)# ip authentication mode eigrp 100 md5 R1(config-if)# ip authentication key-chain eigrp 100 EIGRP-KEY ! 第三步:对端 R2 必须配置完全相同的 key-string,否则邻居起不来
show ip eigrp neighbors 会看不到对方,且 debug eigrp packets 会报 "authentication mismatch"。这是排错关键线索。
af-interface 下,语法更清晰:authentication mode md5 + authentication key-chain NAME。
第11章 路由过滤
有时我们不想把某些路由通告出去(比如内部私密网段),或不想接收某些路由(控制路由表规模)。EIGRP 用 distribute-list(分发列表)配合 ACL / prefix-list 实现过滤。
出方向过滤(阻止某路由被通告给邻居)
R2(config)# access-list 10 deny 192.168.100.0 0.0.0.255 R2(config)# access-list 10 permit any R2(config)# router eigrp 100 R2(config-router)# distribute-list 10 out e0/0 ! 从 e0/0 发出时,过滤掉 192.168.100.0/24,其它照常
入方向过滤(不接收某路由)
R1(config)# ip prefix-list BLOCK seq 5 deny 172.16.0.0/16 le 32 R1(config)# ip prefix-list BLOCK seq 10 permit 0.0.0.0/0 le 32 R1(config)# router eigrp 100 R1(config-router)# distribute-list prefix BLOCK in e0/1 ! 从 e0/1 进来的路由中,拒绝 172.16.x.x 任何掩码,其余允许
第12章 路由重分布(Redistribution)
重分布是把"一种路由协议的路由"引入到"另一种协议"里。常见场景:EIGRP 企业网边界对接 OSPF 运营商网络,或把静态/直连路由注入 EIGRP。
把 OSPF 重分布进 EIGRP
R1(config)# router eigrp 100 R1(config-router)# redistribute ospf 1 metric 100000 100 255 1 1500 ! 必须手动指定度量!否则重分布路由度量=无穷大,不会被接受 ! 参数顺序:带宽(kbps) 延迟(tens-µs) 可靠性 负载 MTU ! 即:100000kbps带宽, 100×10µs延迟, 可靠性255, 负载1, MTU1500
把静态/直连重分布进 EIGRP
R1(config)# router eigrp 100 R1(config-router)# redistribute static R1(config-router)# redistribute connected ! 静态/直连有真实接口度量,通常无需手动指定 metric
default-metric 统一设置,省得每条都写。
R1(config-router)# default-metric 100000 100 255 1 1500 ! 之后所有 redistribute 语句自动用这个默认度量
route-map 打 tag、用 distance 调 AD、或用 distribute-list 限制。这是 CCNP/CCIE 的重点实验内容。
第13章 Stub 末梢特性
问题场景:分支站点 R(只连一条上行链路到总部)被配成普通 EIGRP 路由器。当总部某条路由消失,总部会向分支发 Query 问"你还能到吗?"。分支明明是死胡同(只有一条路),却要被迫参与全网 Query/Reply,拖慢收敛,甚至引发 SIA。
解决:把分支配成 EIGRP Stub(末梢)。Stub 路由器会明确告诉邻居:"我是死胡同,别问我 Query,我也只发特定类型的路由给你"。这样总部根本不会向 Stub 发 Query,彻底消除 SIA 风险、加速收敛。
R-branch(config)# router eigrp 100 R-branch(config-router)# eigrp stub ! 默认 = eigrp stub connected summary(通告直连 + 汇总)
Stub 的几种"通告类型"选项:
| 选项 | 含义 |
|---|---|
connected | 通告直连接口网络(默认包含) |
static | 通告重分布的静态路由 |
summary | 通告自动/手动汇总的路由(默认包含) |
redistributed | 通告重分布进来的路由 |
receive-only | 只接收、不发送任何 EIGRP 路由(最严格) |
! 例:分支只通告直连和静态,不发汇总 R-branch(config-router)# eigrp stub connected static
eigrp stub。这是 EIGRP 大型网络稳定运行的黄金实践,也是排错 SIA 的治本之法。
show eigrp topology 或 show ip eigrp neighbors detail 里会看到对端标注为 "Stub Peer"。总部也因此知道不向它发 Query。
第14章 命名模式 EIGRP(Named EIGRP)
从 IOS 15.0 起,Cisco 推出命名模式(Named EIGRP)。它不再用 "router eigrp <AS>" + 全局 network 的扁平结构,而是引入地址族(Address-Family)层级,把配置组织成:
router eigrp <NAME>
└─ address-family ipv4 unicast autonomous-system <AS>
├─ topology base
│ ├─ ...
└─ af-interface <接口/默认>
├─ ...
└─ network <网段>
命名模式的优势:
- IPv4 和 IPv6 可以共用同一个 EIGRP 进程名(不同地址族),管理更清晰。
- 接口级配置(认证、汇总、带宽、Hello 计时器等)都集中在
af-interface下,不用再满世界找接口。 - 是配置 EIGRP for IPv6 的唯一方式(见第 17 章)。
命名模式配置实战
R1(config)# router eigrp MY-EIGRP R1(config-router)# address-family ipv4 unicast autonomous-system 100 R1(config-router-af)# network 10.0.0.0 R1(config-router-af)# network 1.0.0.0 R1(config-router-af)# topology base R1(config-router-af-topology)# exit-af-topology ! R1(config-router-af)# af-interface e0/0 R1(config-router-af-interface)# authentication mode md5 R1(config-router-af-interface)# authentication key-chain EIGRP-KEY R1(config-router-af-interface)# hello-interval 5 R1(config-router-af-interface)# hold-time 15 R1(config-router-af-interface)# exit-af-interface R1(config-router-af)# exit-address-family
eigrp upgrade-cli <AS> 能把经典模式配置自动转换为命名模式,升级时省去手动重写。
第15章 带宽控制与计时器调优
15.1 限制 EIGRP 占用的链路带宽
EIGRP 默认最多占用接口带宽的 50% 来发路由更新(避免把语音/业务流量挤垮)。在低速链路(如帧中继、卫星链路)上可以调低:
R1(config)# interface s0/0 R1(config-if)# bandwidth 512 ! 先告诉 EIGRP 这条链路逻辑带宽 512kbps(影响度量计算) R1(config-if)# ip bandwidth-percent eigrp 100 30 ! EIGRP 最多用该接口带宽的 30% 发更新(经典模式语法) ! 命名模式:在 af-interface 下用 bandwidth-percent eigrp 30
15.2 Hello / Hold 计时器调优
在高速、稳定的数据中心链路,可以缩短 Hello 间隔让故障检测更快(收敛更猛);在低效链路则要拉长,减少开销。
R1(config)# interface e0/0 R1(config-if)# ip hello-interval eigrp 100 2 R1(config-if)# ip hold-time eigrp 100 6 ! Hello=2秒, Hold=6秒(建议 Hold ≈ 3×Hello) ! 命名模式:af-interface 下 hello-interval 2 / hold-time 6
第16章 偏移列表与下一跳自我
16.1 Offset-List(偏移列表)
作用:在路由进入或离开路由器时,给度量值加一个偏移量,从而人为影响选路。比直接改接口 delay 更"精准到路由"。
! 让 R1 从 e0/1 学到的 3.3.3.0/24 度量 +10000,使其不如经 e0/0 优 R1(config)# access-list 20 permit 3.3.3.0 0.0.0.255 R1(config)# router eigrp 100 R1(config-router)# offset-list 20 in 10000 e0/1
16.2 Next-Hop-Self(下一跳自我)
问题:在路由反射/联邦或特定重分布场景,EIGRP 可能把"下一跳"保持为原始地址(而非自己的接口地址)。如果下游路由器没有到那个原始下一跳的路由,流量就黑洞了。
解决:用 next-hop-self 强制把下一跳改写成自己,保证下游可达。
R1(config)# router eigrp 100 R1(config-router)# neighbor 10.1.12.2 next-hop-self ! 向邻居 10.1.12.2 通告路由时,下一跳写为自己 ! 命名模式:af-interface 下 next-hop-self 命令
next-hop-self 要和 neighbor 命令配合(把接口从组播变单播邻居)。命名模式直接在 af-interface 下启用即可,更方便。
第17章 EIGRP for IPv6
EIGRP 也支持 IPv6。关键技术点:
- 必须用命名模式(经典模式不支持 IPv6 EIGRP)。
- IPv6 EIGRP 进程默认是 shutdown 的,需要
no shutdown激活。 - IPv6 没有"network"概念(靠链路本地地址和接口启用),用
ipv6 eigrp <AS>在接口下启用。 - 组播地址变为
FF02::A(对应 IPv4 的 224.0.0.10)。
配置实战
R1(config)# ipv6 unicast-routing R1(config)# router eigrp MY-EIGRP R1(config-router)# address-family ipv6 unicast autonomous-system 100 R1(config-router-af)# no shutdown R1(config-router-af)# topology base R1(config-router-af-topology)# exit-af-topology R1(config-router-af)# exit-address-family ! R1(config)# interface e0/0 R1(config-if)# ipv6 eigrp 100 R1(config-if)# ipv6 address 2001:db8:12::1/64 ! 在接口下 ipv6 eigrp 100 启用,无需 network 命令
验证:
R1# show ipv6 eigrp neighbors R1# show ipv6 route eigrp R1# show ipv6 eigrp topology
router eigrp MY-EIGRP 下可以同时有 address-family ipv4 和 address-family ipv6,一份配置管理双栈,运维幸福感拉满。
第18章 故障排查方法论
EIGRP 排错有一套"标准问诊流程",按下面顺序查,90% 的问题都能定位:
排错四步法
第①步:邻居起来了没?
R1# show ip eigrp neighbors ! 空的 → 进第②步;有但频繁翻滚(flapping) → 链路/计时器问题
第②步:直连通不通?(L1/L2/L3 基础)
R1# ping 10.1.12.2 R1# show ip interface brief ! 接口 up up?IP 同网段?没被 passive?没被 ACL 挡?
第③步:参数匹配吗?
- AS 号一致?(
show run | section eigrp) - K 值一致?(
show ip protocols看 K 值) - 认证一致?(配了认证的接口密钥必须相同)
- 被 passive-interface 误杀?(确认建邻居的接口没 passive)
第④步:路由进了拓扑表/路由表吗?
R1# show ip eigrp topology R1# show ip route eigrp ! 有拓扑条目但没进路由表 → 被 distribute-list 过滤 / 被更好的 AD 压制
调试神器
R1# debug eigrp neighbors ! 看邻居建立/断开 R1# debug eigrp packets ! 看各种包收发(含认证错误) R1# debug ip eigrp ! 看路由计算 ! 调试完务必 undebug all 关掉,避免拖慢设备
常见故障速查表
| 现象 | 最可能原因 | 排查命令 |
|---|---|---|
| 邻居表为空 | AS/K值不符、直连不通、被动接口、认证不符 | show run | s eigrp; ping; debug eigrp packets |
| 邻居频繁翻滚 | 链路不稳定、Hold 太短、MTU 不匹配 | show interface; show log |
| 有邻居但学不到路由 | distribute-list 过滤、network 没覆盖、auto-summary 边界 | show ip eigrp topology all-links |
| 路由不进路由表 | 被更优 AD 协议压制、过滤列表 | show ip route; show ip protocols |
| SIA 卡死/邻居重置 | 大面积故障、Query 收不齐、未配 Stub | show ip eigrp topology active; 配 eigrp stub |
debug 会大量占用 CPU,只在排错时短暂开启,完事立刻 undebug all。繁忙设备开 debug 可能雪崩。
第19章 综合实战实验
把前面所有技术点串起来,设计一个"企业网"级拓扑,要求你独立完成配置并验证。
19.1 综合拓扑与目标
19.2 实战任务清单
- 任务1 在 HQ-CORE、R1、R2 上用命名模式启用 EIGRP AS 100,连通所有内网。
- 任务2 把 R1、R2 配置为 eigrp stub connected(防 SIA)。
- 任务3 在两分支上行接口启用 MD5 认证。
- 任务4 在 HQ-CORE 上把分支的网段做手动汇总发给 ISP 侧。
- 任务5 在 HQ-CORE 上把 OSPF(模拟 ISP) 重分布进 EIGRP(记得给 metric),让分支能学到外部路由。
- 任务6 用 offset-list / delay 让其中一条上行成为主用、另一条备用(非等价负载均衡可加分)。
- 任务7 配置 默认路由注入,使分支能通过 HQ 访问 ISP。
- 任务8 全程用
show ip eigrp neighbors/topology和ping验证,并排查至少 2 个"故意埋的坑"(如一方 AS 错、一方认证漏配)。
参考骨架(HQ-CORE 命名模式 + 重分布)
HQ-CORE(config)# router eigrp CAMPUS HQ-CORE(config-router)# address-family ipv4 unicast autonomous-system 100 HQ-CORE(config-router-af)# network 10.0.0.0 HQ-CORE(config-router-af)# topology base HQ-CORE(config-router-af-topology)# exit-af-topology HQ-CORE(config-router-af)# af-interface e0/0 HQ-CORE(config-router-af-interface)# authentication mode md5 HQ-CORE(config-router-af-interface)# authentication key-chain EIGRP-KEY HQ-CORE(config-router-af-interface)# exit-af-interface ! 重分布 OSPF 进 EIGRP(必须给度量) HQ-CORE(config-router-af)# topology base HQ-CORE(config-router-af-topology)# redistribute ospf 1 metric 100000 100 255 1 1500 HQ-CORE(config-router-af-topology)# exit-af-topology HQ-CORE(config-router-af)# exit-address-family
验收标准(Checklist)
- ✅ R1、R2 的
show ip eigrp neighbors各自只看到 HQ-CORE,且对端标注为 Stub Peer。 - ✅ R1 能 ping 通 R2 的内网地址,也能 ping 通 ISP 侧的模拟地址。
- ✅ HQ-CORE 的路由表里能看到 OSPF 外部路由(标记为 D EX / D*EX)。
- ✅ 分支路由器的
show ip route里出现 0.0.0.0/0 默认路由。 - ✅ 手动 shutdown 主用上行接口,流量秒切备用(丢包 ≤ 1–2 个或零丢包)。
- ✅ 用
show ip eigrp topology active确认无路由卡在 Active 状态(验证 Stub 生效)。
附录:命令速查 / 术语表 / RFC
A.1 高频 show 命令速查
| 命令 | 用途 |
|---|---|
show ip eigrp neighbors | 查看邻居表(建邻居第一招) |
show ip eigrp topology [all-links] | 查看拓扑表(含/不含所有路径) |
show ip eigrp topology active | 查看陷在 Active 状态的路由(排 SIA) |
show ip route eigrp | 查看 EIGRP 路由表中的条目 |
show ip protocols | 查看 EIGRP 进程参数(AS、K 值、网络、被动接口) |
show ip eigrp interfaces | 查看参与 EIGRP 的接口及统计 |
show ip eigrp traffic | 查看 EIGRP 包收发统计 |
show running-config | section eigrp | 查看 EIGRP 相关配置 |
show ipv6 eigrp neighbors/topology/route | IPv6 EIGRP 对应命令 |
A.2 配置命令速查(经典模式)
| 需求 | 命令 |
|---|---|
| 启用进程 | router eigrp <AS> |
| 关闭自动汇总 | no auto-summary |
| 宣告网络 | network <主类 / 反掩码> |
| 被动接口 | passive-interface <接口> |
| 手动汇总 | ip summary-address eigrp <AS> <网络> <掩码> |
| 等价路径数 | maximum-paths <n> |
| 非等价负载 | variance <n> |
| MD5 认证 | 接口下 ip authentication mode eigrp <AS> md5 + ip authentication key-chain |
| 路由过滤 | distribute-list <acl/prefix> in/out <接口> |
| 重分布 | redistribute <协议> metric <bw> <dly> <rel> <load> <mtu> |
| Stub | eigrp stub [connected|static|summary|receive-only] |
| 计时器 | ip hello-interval eigrp <AS> <s> / ip hold-time eigrp <AS> <s> |
| 带宽占用 | ip bandwidth-percent eigrp <AS> <%> |
| 偏移列表 | offset-list <acl> in/out <值> <接口> |
A.3 核心术语表
| 术语 | 全称 / 含义 |
|---|---|
| DUAL | Diffusing Update Algorithm,弥散更新算法,EIGRP 无环收敛核心 |
| FD | Feasible Distance,本机到目标的最小度量(最优路径度量) |
| AD / RD | Advertised / Reported Distance,邻居到目标的通告距离 |
| Successor | 后继,当前最优路由的下一跳 |
| FS | Feasible Successor,可行后继,满足 FC 的备份下一跳 |
| FC | Feasible Condition,AD < FD,保证无环的入选条件 |
| RTP | Reliable Transport Protocol,EIGRP 自带的可靠传输机制 |
| SIA | Stuck in Active,路由卡在 Active 超时被重置邻居 |
| AD(管理距离) | Administrative Distance,路由来源可信度,EIGRP 内部=90 / 外部=170 |
| K 值 | EIGRP 度量权重参数 K1–K5,默认只 K1/K3 有效 |
| Stub | 末梢路由器,不中转流量、不被 Query,防 SIA |
A.4 度量计算对照(快速估算)
| 接口类型 | 带宽(kbps) | 10⁷/带宽 | 默认延迟(µs) | 延迟/10 | 单跳度量(×256) |
|---|---|---|---|---|---|
| 10Mbps (E) | 10000 | 1000 | 1000 | 100 | 256×1100 = 281600 |
| 100Mbps (FE) | 100000 | 100 | 100 | 10 | 256×110 = 28160 |
| 1Gbps (GE) | 1000000 | 10 | 10 | 1 | 256×11 = 2816 |
| 10Gbps | 10000000 | 1 | 10 | 1 | 256×2 = 512 |
注:以上为"单跳、仅带宽+延迟、默认 K 值"的近似度量,便于快速判断路径优劣。延迟项含 IOS 默认接口延迟,实际以 show interface 为准。
A.5 标准与参考
- RFC 7868:EIGRP 正式标准化文档(2013 年),想深挖协议细节必读。
- Cisco EIGRP Configuration Guide:各 IOS 版本的官方配置手册,命名模式语法以官方为准。
- Cisco Press - EIGRP Network Design Solutions:经典权威书籍(已绝版但值得找)。
A.6 学习路径建议
- 先在本手册第 4 章把基础实验做通,建立"邻居 → 拓扑 → 路由"的直觉。
- 啃下第 3 章 DUAL 与度量,这是分水岭。
- 逐个攻破第 6–17 章特性,每个都动手验证一遍。
- 挑战第 19 章综合实验,做到"闭眼能配、出事能排"。
- 延伸到更广:EIGRP 与 OSPF 互重分布、命名模式自动化、SD-WAN 时代的 EIGRP 角色。