说明
EIGRP的出现,原本Cisco只是打算为了让EIGRP代替IGRP支持无类别路由选择而出现的,随着在开发的时期,许多学术上的建议使得EIGRP以一个更加强大的协议出现,有时候,我们称为具有链路状态特性的距离矢量协议。关于距离矢量和链路状态的特点,可以参考之前的介绍。
EIGRP的特性介绍
这是卷一里面提到的,非周期、部分、有边界,带宽
1、非周期:意思是说不像RIP一样,每30s就把路由表所知道的路由通告给邻居,而EIGRP则是在一个路由条目更新、消失、或者新的条目出现才会把这个更新、消失或者新的条目,所变化的告诉给邻居,而不是全部路由,这样节省了许多带宽和资源
2、部分:也就是变化的条目条目
3、边界:发送给受到影响的路由器。
4、带宽:这里会提到一个hello包的概念,它在不同的链路介质上,周期性是不同的,自动调整,所以,在低链路上带宽的需求不是很大,并且不会占用链路带宽的50%。
5、无类别:在更新路由条目的时候,会携带子网掩码
6、MD5验证:EIGRP只支持MD5的认证,所以,安全性也很有保障。
7、DUAL算法:这是EIGRP的核心概念,它使得EIGRP在网络中能够快速的收敛,和其他的功能。
8、汇总:对于EIGRP或者是说距离矢量协议来说,有个非常好的特点,就是可以随时随地的在任意路由器上进行路由汇总,相反,链路状态反而没有这个优势。
9、邻居/邻接:对于EIGRP来说,是有邻居的概念的,当收到来自其他路由器的hello包后,只要条件符合的话,那么就会加入邻居表中,邻接概念是一个虚拟连接,指的意思是两台邻居之间已经交互了EIGRP的路由信息。
EIGRP的4个组建
1、依赖协议的模块:对于EIGRP这个协议来说,它支持的不仅仅是IP协议,它还能支持更多的协议族,比如IPX,APPLETALK,这都是由这个模块来进行实现的,不过对于现在的网络来说,IP网络已经成为主宰了。
2、可靠传输协议: EIGRP使用协议号88,封装在IP中进行传递,IP我们知道跟UDP一样,是一个不可靠的传输,所以,EIGRP不使用一个可靠的机制,它利用了可靠传输协议RTP来管理EIGRP数据包的接收和发送,这个有保障的机制是Cisco私有算法实现的,卷一里面称它为“可靠组播”,使用组播地址224.0.0.10,实现的方法为,在接收到一个可靠的组播数据包后,必须回应一个单播的确认包。
3、邻居发现/恢复:在EIGRP的特性中知道它不是周期性更新,并且是有邻居的概念,那么,它就需要一种机制去发现和维持这个邻居关系,那么这个机制就是hello数据包,Hello数据包在不同的链路介质上有着不同的hello间隔,比如在高速链路为5s,在低速链路则为60s,并且,在每个Hello数据包中包含一个holdtime时间,这个时间的作用是告诉邻居,在多少时间间隔后,没有收到来自自己的Hello包,那么就认为出现了故障,邻居关系清除,在默认情况下,holdtime是hello时间的3倍。
4、扩散更新算法(DUAL):对EIGRP来说,核心的组建就是DUAL了,将在后续详细介绍DUAL的处理过程。
EIGRP邻居的建立过程
地址信息如图,在A和B上运行EIGRP,在A上抓包观看邻居的建立关系
1、这是过滤后,EIGRP数据包的抓取,所以看1和5序列号的,都是来自12.1.1.2发送的,因为这时候A的接口还没有开启,所以,收到了只能看到12.1.1.2的发送,也就是B。
2、查看8序列号的数据包,A路由器已经收到了来自B的Hello包,并且A发送的Hello数据包中,已包含B,12.1.1.2的地址,也就是说A把B路由器作为自己的邻居了,sequenc中已经包含12.1.1.2的地址了。
3、 紧接着,R1发送了一个组播更新,这个更新是不需要ACK回复的,所以,没有标志希望收到来自邻居的ACK回复,也就是acknowledge为0
4、在序列号13中,收到来自12.1.1.2的Hello包,里面已经包含了A的信息
5、在序列号19后,它收到来自A的更新了,这次更新已经包含序列号,acknowledge 7所以,当B收到这个更新后,必须回复ACK进行确认,回复的ACK也是7
6、看序列号21,B回复了一个ACK,对于来自A的更新包进行确认
可以看到,B收到来租A的更新包后,立即回复了一个ACK,acknowledge为7
7、后续的数据包,就是说A数到来自B的更细后,再次回应ACK,然后,稳定后,A与B之间相继的发送hello包维持邻居关系。
总结邻居建立的过程
1、路由器A启动EIGRP后,在相对应的接口上向外发送hello包。
2、B收到A的hello包后,将A列入自己的邻居表,然后向A单播发送update也就是向A发送自己的路由表,EIGRP路由器在收到一个hello包,就直接向对方发送路由表了,B后面hello就会标明路由器A是自己的邻居。
3、在A收到B的update之后,向B发送Ack通知对方已经收到update,在A收到B的hello包后,会发现里面标明了自己的地址,然后再向B单播发送update的同时hello包中也会标志邻居的地址,等双方看到对方的hello包都有自己后,双向邻居关系便建立成功。
4、B在收到update之后,向A发送ACK确认update已收到
5、A和B都将收到的Update放入拓扑数据库中,然后DUAL算法计算最优路由,放入路由表。
本文首发于公众号:网络之路博客