简介
EIGRP(增强型的内部网关路由协议),高级距离矢量路由协议集合了距离矢量路由协议和链路状态路由协议的多种优点。它是思科的私有协议,从IGRP(内部网关路由协议,现已淘汰)改进而来,思科设计之初野心比较大-想把BGP干的活也包揽进来。但是后来发现这样做有点力不从心,所以现在EIGRP只在内部自治系统中使用。
EIGRP属于先进的DV(Distance Vector:距离矢量)协议,传输更新的时候,离目的地有多远(Distance);从哪个接口发送出去(Vector)。具有典型的DV特征,传输路由更新仍然是在传输网络前缀,带距离和方向。既然叫增强型(Enhance)那么增强在哪里呢?因为它具有如下部分链路状态路由协议的特征:
- 算法-DUAL(弥散更新算法),在没有算法的路由协议中如RIP,在失去了一条路由条目后只能等到更新周期到了之后才能更新路由表。而EIGRP在发生这种情况的时候会向周边的邻居发起查询,一直查询到边界以确认这条路由条目是否消失。
- 邻居表-EIGRP通过Hello报文发现、维持邻居关系,邻居一旦失效EIGRP能够快速检测快速收敛。
- 增量更新-有确认机制的触发更新而不是像RIP一样的周期更新。
特征
- Fast Convergence(快速收敛):EIGRP除了会在拓扑表里找到最优下一跳,还会有备份下一跳,所以对于拓扑变化反应速度非常快。它是IGP里收敛最快的动态路由协议。
- Partial Updates(部分更新):两个路由器互发Hello报问,把路由条目都发给对方完成第一次完整更新,以后不再周期性地更新,只有当拓扑发生变化的时候再发送变化的部分路由条目。这里蕴涵一个条件,不做周期性更新,就需要可靠性保障,而EIGRP使用的是IP-和UDP一样不可靠,为确保可靠性需要Ack,Seq。
- 复杂的度量值(Metric)计算机制:EIGRP不像RIP用跳数来做开销,而是选用一个计算规则来衡量链路的开销。用如下接口链路的几个参数来衡量链路开销:
- MTU 1500 bytes(MTU-最大传输单元), BW 1544 Kbit/sec(带宽-链路上的参考带宽), DLY 20000 usec(延迟-数据包发出接口处理的时间), reliability 255/255(可靠性-链路的丢包率,百分比表示), txload 1/255, rxload 1/255(负载-链路带宽使用率,参考值)
- 支持可变长子网掩码(VLSM):EIGRP是一种无类路由协议,在更新时可以附带每个子网的子网掩码,因此它支持不连续的子网和VLSM。
- 支持不同的二层协议(数据链路层)和网络拓扑类型(专线、点对点、多路访问和非广播多路访问):使用EIGRP时不像OSPF那样针对不同二层协议(如以太网、帧中继和ATM等)需要做特殊的额配置。在LAN和WAN环境下EIGRP都能够高效的运行;EIGRP支持所有WAN拓扑并能够适应不同类型和速度的介质。
- 支持多种三层(网络层)协议:源于IGRP,现在基本上只有IP了。对于不同的网络层EIGRP会构建不同的数据库以提供支持。
- 其他:如无环设计、灵活的网络层次设计、配置简单、支持任一节点手工汇总和唯一一个支持非等价负载均衡配置的动态路由协议。
RTP(可靠传输协议)
EIGRP直接封装在IP包中发送,协议号为88。RTP负责确保EIGRP分组按照顺序地传递给所有邻居,它支持组播(组播地址:224.0.0.10)和单播分组的混合传输。为提高效率只有某些分组(更新、查询、回复)以可靠的方式传输。
我们用抓包工具看看:
EIGRP报文类型
EIGRP有如下5种报文类型:
- Hello-用于发现、建立和维持邻居关系
- Update-用于发送路由更新信息
- Querry-向邻居查询某条更新信息
- Reply-针对查询的响应
- Ack-确认消息
注意:以上5种报文只有高亮部分的2、3、4报文需要Ack确认。
EIGRP表类型
EIGRP有如下3张表:
- 邻居表-邻居表列出了所有运行EIGRP并且形成邻接(Adjacency)关系的直连路由器。邻居表的内容如下:下一跳运行EIGRP的路由器(邻居的接口IP)和本路由器连接邻居的接口
R1#sh ip eigrp neighbors
IP-EIGRP neighbors for process 1
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 12.12.12.2 Se0/2 11 00:14:26 60 360 0 3
- 拓扑表-不同于OSPF真正意义上的完整拓扑表,因为它并没有保存整个网络拓扑的副本。邻居间会通过互相update形成该拓扑表。这个表类似于show ip rip database看到的内容,共同点在于都是DV协议,发送和保存的都是路由条目。区别在于,EIGRP拓扑表保存多个邻居发送过来的条目及开销信息用于预留备份下一跳(Back Next-Hop)。拓扑表结构和内容如下图所示:
- 路由表-EIGRP从上面提到的拓扑表中寻找到最小的FD(可行距离,后面会讲到)并提交到路由表中,但是不一定能提交成功,还得看管理距离(关于路由表的填充规则可以查看我之前发表的文章路由表填充规则)。
三张表的结构和内容如下:
EIGRP邻居的建立过程
邻居建立过程如下图所示分步进行:
- R1在运行EIGRP的接口发送Hello包给R2(R1不需要对方R2确认,对方收到了就知道“我”就是它邻居)。R2会把R1写入到邻居表中。
- R2同样会向邻居R1发送Hello包,同时会向R1发送它的所有的Update路由信息(拓扑表中的最优路由)
- R1在收到R2的Update路由更新信息后,向R2发送ACK确认已经收到Update。
- R2同样把邻居R1写入自己的邻居表中。
- R2同样会向R1发送R1的所有的Update路由信息。
- R2收到R1的Update路由更新信息后,向R1发送ACK确认已经收到Updte。到此R1和R2就收敛完成。