背景

1、  EIGRP是思科私有的(增强型IGRPenhance IGRP)

2、  收敛之王,速度非常快;

3、  增强型内部网络路由协议,是一种混合路由协议(集成了距离矢量和链路状态的特征,高级距离矢量)

4、  可靠更新、触发更新、增量更新、组播更新

5、  支持大型网络拓扑

基本特征

OSI层次(传输层)、运行特征、运行范围、有类无类、最佳路径,协议号88

1、  OSI层次:传输层协议,基于IP协议号88

2、  算法特征:距离矢量(DUAL算法)

3、  运行范围:内部网络协议

4、  有类无类:IGRP是有类、EIGRP是无类

5、  最佳路径:管理距离90/170,度量值采用混合度量

(带宽k1、延迟k2、负载k3、可信度k4MTUk5

部署

EIGRP个人理解_局域网

对了,在部署协议之前,需要在这个地方进行抓包分析,方便后续分析

EIGRP个人理解_IP协议_02

需要认识到AS号就是用来区分不同的区间的,之后学习BGP会详细介绍,这先明白AS可以用来区分不同的局域网

EIGRP个人理解_eigrp_03

EIGRP个人理解_eigrp_04

EIGRP个人理解_思科_05

EIGRP个人理解_eigrp_06

有没有发现,这里的掩码都是反掩码!!这里就要理解反掩码的概念。反掩码完全就是个数学工具来着

  反掩码和子网掩码的换算

反掩码=255.255.255.255-子网掩码

  反掩码是什么?(路由条目/网段的抓取工具,将XXX字段开头的路由都通告出去)

子网掩码:1表示网络位、0表示主机位

反掩码:1表示随意匹配,0表示严格匹配(这个真的很像正则表达式呀)

邻居建立

很类似TCP的三次握手的过程

EIGRP个人理解_IP协议_07

所谓的三个代表:邻居表、拓扑表、路由表

邻居表

用于存储邻居信息

用于建立和维持邻居关系,每5s周期发送,15s 保持时间(hold time

show ip eigrp neighbor

拓扑表

用于存储所有路由条目(无论优劣)

用于承载和传递路由条目;触发/增量/组播/可靠

show ip eigrp topology all-links

路由表

用于存储最佳路由条目(通过DUAL算法计算)

用于实现可靠确认(UPDATE/REPLY/QUERY

show ip route eigrp

EIGRP个人理解_eigrp_08

EIGRP个人理解_思科_09

EIGRP个人理解_IP协议_10

这里P才是个好的现象,A表示网络动荡,不稳定

解析数据包

EIGRP个人理解_思科_11

EIGRP个人理解_局域网_12

首先发现hello包大约5s发送一次,不是严格的5s是为了避免使链路拥塞。不过由于这个包本来就不大,所以系统设置的随机数种子是尽量的接近5s

EIGRP个人理解_局域网_13

接着观察update包,注意观察序列号和确认号之间的关系

EIGRP个人理解_eigrp_14

这个地方就是这个协议实现可靠传输的原理。计算原理就是这样

EIGRP个人理解_IP协议_15

另外要关注的就是更新包中路由条目信息

EIGRP个人理解_思科_16

最后是确认包

EIGRP个人理解_eigrp_17

确认包的内容比较简单,确认号等于上一个update包的确认号

路由汇总

和之前一样创建几个地址用来做实验

EIGRP个人理解_eigrp_18

接着通告出去

EIGRP个人理解_eigrp_19


之后查看路由信息

EIGRP个人理解_局域网_20

目的是将172.16.x.x/24网段汇总到172.16.0.0/22网段间

EIGRP个人理解_eigrp_21


EIGRP个人理解_eigrp_22

多扯一些,null0路由

EIGRP个人理解_IP协议_23

这个空路由,说白了就是用来防环的

如果我此时把172.16.2.1这条路由条目去掉

EIGRP个人理解_局域网_24

此时在R2的路由表中

EIGRP个人理解_IP协议_25

这个被清除的子网对R2来说,其实是空的,就是说,R2压根就不知道此时R1发送了什么事,这个时候我们ping 172.16.2.1则会


EIGRP个人理解_IP协议_26

显示端口不可达信息,注意是端口不可达!!(说个题外话,很多情况下端口不可达比路径不同更可怕,因为此时路径是通的,但是信息不对,所以就有可能是路由策略上的失误啦,这个就需要细心排查)

对于R2R1发送的ICMP,它不知道R1是否有172.16.2.1这条路径,但知道有172.16.2.1172.16.0.0/22的子网下,所以一定可以发送成功的。然而此时的R1查找自己的路由表根本就没有这条信息呀,根据最长匹配原则,它就会去寻找默认路由0.0.0.0。而null0的优先级比默认路由高,会优先执行,可以有效防止数据发送出去,将数据一直在本地。这条路径可以理解为指向一个位置的地方,根本达到不了,所以ICMP返回端口不可达。