说明

    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算法计算最优路由,放入路由表。

本文首发于公众号:网络之路博客

©著作权归作者所有:来自51CTO博客作者网络之路blo的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. TCPIP卷一(9):EIGRP的数据包格式、TLV、 三张表
  2. webrtc 服务器 janus android使用教程1:Echo Test
  3. Android学习笔记(五) Acticity跳转并传值
  4. Netty UDP Server&Client
  5. android TCP 两个手机局域网通信(wifi)
  6. Android锁屏状态下点亮屏幕并弹窗提醒
  7. 收到短信了,我该做点什么?
  8. Android(安卓)Socket 发送与接收数据问题: 发送后的数据接收到总
  9. 《Android/OPhone开发完全讲义》连载(8):收到短信了,我该做点什么?

随机推荐

  1. 对象的属性也要加引号吗
  2. 带有Bootstrap 4的导航栏中的悬停问题
  3. Moment.js:Date.now()javaScript analogue
  4. 没有'Access-Control-Allow-Origin'反应
  5. 特拉维斯CI Jest Preset反应原生未找到
  6. three.js学习笔记 obj模型加载问题
  7. JavaScript中链式调用之研习
  8. ThoughtWorks西邮暑期特训营 -- JavaScri
  9. 在javascript中从json获取值
  10. 如何动态获取值?