可靠传输协议(RTP,Reliable Transport Protocol)负责管理ElGRP数据包的发送和接收。可靠传输意味着传输是有保障的,并且数据包会被按顺序发送。这种传输效果是依靠Cisco发明的名为可靠组播的算法实现的。使用可靠传输的数据包类型包括更新包、 查询包、响应包、SIA查询包和SIA响应包,这与发送这些数据包的形式(单播或组播)无关(当然了,SIA查询包、响应包和SIA响应包只会以单播形式发送)。这些数据包的头部都会携带一个非零的序列号。这个序列号是一个全局值,由路由器上的每个EIGRP进程进行维护;每当这个ElGRP进程发出一个这种数据包,无论这个数据包将会从哪个启用了 EIGRP的接口发送出去,序列号都会增加。接收到更新包、查询包、响应包、SIA查询包或 SIA响应包的邻居都需要发回一个ACK包,并将ACK包中的确认号设置为之前收到的数据包的序列号。邻居还可以用另一种方式确认可靠数据包,就是在自己的可靠数据包(如果有要发往相同路由器的可靠数据包)中确认对方发来的可靠数据包,只需在数据包头部正确设置确认号就可以了,详见前文“确认包”小节。如果在特定时间段内没有收到确认信息, EIGRP就会以单播的形式向未响应邻居重传未确认的数据包。
 
对于那些不使用可靠传输的数据包类型(Hello包和ACK包).它们的序列号字段设置 为0.并且这个全局序列号并不会增长。
 
在使用这个单纯的可靠组播时,组播消息的每一个接收方都必须对发送方做出确认, 才能促使发送方继续传输下一个消息。如果有一些接收方没有进行消息确认,发送方就会 延缓下一步组播发送行为,而是以单播形式向未确认的接收方重传丢失的消息,直到接收方成功确认它收到了该消息为止。很显然,只要有一个行为不当、超载或连接性很差的接收方,就会对整个可靠组播的传输造成不良影响。一个直观的解决方案是在继续发送组播数据包的同时,以单播形式按顺序向那个“滞后”的接收方发送未确认的消息以及后续延缓发送的数据包,让它最终能够跟上大家的进度。不过这样做会带来一个问题:滞后的那个邻居也仍然是组播组中的成员,如果它在收到前一个数据包之前.恰好先收到了后一个 数据包.那它对于信息流的处理顺序就错乱了。
 
为了解决这个问题.RTP使用了一个与众不同的特性.称为条件接收(Conditional Receive)。通过使用这个特性.EIGRP可以把一个多访问接口上的所有邻居分为两个组:一个行为得当组.这个组中的邻居能够按时确认所有组播消息;另一个“滞后”组.这个组中的邻居至少有一次没有按时确认EIGRP的可靠数据包.EIGRP必须对这些邻居进行单独处理。如果EIGRP希望一边发送组播数据包.一边以单播形式向滞后路由器重传未确认的数据包.它就必须在按顺序传输的组播数据包中打上一个特殊的标记.表示“这个数据包只发给那些到目前为止.收到了所有组播数据包的路由器”。
 
上述解决方案是这样实现的:发送方首先发送一个Hello包.其中包含两个特殊的 TLV:序列TLV和下一个组播序列TLV.这个数据包通常被称为序列Hello包。下一个组播序列TLV中包含接下来要发送的下一个可靠组播消息的序列号。序列TLV中列出了所有滞后邻居的IP地址.向所有接收方表明:“如果谁在这个列表中找到了自己的IP地址.就忽略拥有这个序列号的下一个组播消息”。邻居在收到这个序列Hello包后.如果没有在序列TLV 的列表中找到自己的IP地址.那它就知道自己可以接收接下来的组播数据包.并且它会把自己置为CR模式(条件接收模式)。邻居在收到这个序列Hello包后.如果在序列TLV的列表中找到了自己的IP地址.或者邻居干脆就没有收到这个序列Hello包.它就不会把自己置为CR模式。在此之后.发送方路由器会在下一个组播数据包的标记字段中.设置CR标记。置为CR模式的路由器会如常处理这个数据包.然后退出CR模式;未被置为CR模式的路由器则会忽略这个数据包。这样一来.发送方路由器既能够一直以组播形式向那些没有接收障碍且能够按时确认的路由器发送消息.同时也能够确保那些滞后邻居不会处理这些组播消息.直到它们能够赶上大家的进度。没能够确认一个或多个组播数据包的邻居就会成为滞后邻居.每个滞后邻居都会按顺序.以单播形式收到它们没能确认的信息。
路由器会按照组播流计时器中定义的时间来等待ACK包.在计时器超时后.它才会将相应的邻居认定为滞后邻居.并转换为使用单播形式向其发送信息。后续单播数据包的发送间隔是由RT0 (重传超时)定义的。这两个计时器(组播流计时器和RT0)是根据每个邻 居的SRTT (平滑往返时间)计算出来的。SRTT是一个以毫杪为单位的平均用时.测量的是向邻居发送可靠数据包与从邻居收到确认包之间所经过的时间。具体用来汁算SRTT、RT0 和组播流计时器的公式超出了本书范围。
 

EIGRP-7-可靠传输协议的更多相关文章

  1. ude—基于udp的全双工可靠传输协议

    ude是一款基于udp的可靠传输协议,专门用于在数据传输方面对实时性要求较高的应用领域.    tcp协议虽然能保证数据的可靠传输,但它有以下几个缺点:1.tcp的数据确认机制会导致发送方重复发送一些 ...

  2. RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议

    RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...

  3. UDP可靠传输那些事

    有空来论坛走走,发现讨论udp可靠传输又热了起来,有人认为udp高效率,有人认为udp丢包重传机制容易控制,还有朋友搞极限测试,当然也有人推销自己的东西,这里写一点我个人的看法. udp可靠传输其实非 ...

  4. TCP可靠传输详解

    TCP提供了可靠的传输服务,这是通过下列方式提供的: 分块发送:应用数据被分割成TCP认为最适合发送的数据块.由TCP传递给IP的信息单位称为报文段或段(segment) 定时确认重传:当TCP发出一 ...

  5. TCP可靠传输的工作原理

    TCP可靠传输的工作原理 一.停止等待协议 1.1.简介 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更 ...

  6. 如何用 UDP 实现可靠传输?

    作者:小林coding 计算机八股文刷题网站:https://xiaolincoding.com 大家好,我是小林. 我记得之前在群里看到,有位读者字节一面的时候被问到:「如何基于 UDP 协议实现可 ...

  7. TCP协议中是如何保证报文可靠传输的

    1.什么是TCP的可靠传输 它向应用层提供的数据是无差错的.有序的.无丢失的,换言之就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. 2.TCP保证可靠传输的办法有哪些? TCP采用 ...

  8. TCP协议如何保证可靠传输?

    一.TCP的可靠传输如何保证? 在TCP连接中,数据流必须以正确的顺序传送给对方.TCP的可靠性是通过顺序编号和确认(ACK)实现的.TCP在开始传送一个段时,为准备重传而首先将该段插入到发送队列中, ...

  9. TCP协议如何保证可靠传输

    TCP协议如何保证可靠传输 概述: TCP协议保证数据传输可靠性的方式主要有: (校 序 重 流 拥) 校验和: 发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化.如果收到段的检 ...

随机推荐

  1. 机器学习 Logistic Regression

    Logistic Regression 之前我们讨论过回归问题,并且讨论了线性回归模型.现在我们来看看分类问题,分类问题与回归问题类似,只不过输出变量一个是离散的,一个是连续的.我们先关注二分类问题, ...

  2. C语言小程序(一)、判断三角型类型

    最近回炉重造C语言,陆续写一些比较短的代码,选择其中的一些贴到这里,都是在Linux下的代码,Windows未测试. 第一个判断三角形的类型,两个浮点型数据不能直接判断相等,为了输入方便一些,自己设置 ...

  3. 优秀开源项目之一:视频监控系统iSpy

    iSpy是一个开源的视频监控软件,目前已经支持中文.自己用了一下,感觉还是很好用的.翻译了一下它的介绍. iSpy将PC变成一个完整的安全和监控系统 iSpy使用您的摄像头和麦克风来检测和记录声音或运 ...

  4. UML Design Via Visual Studio-Class Diagram

    用过几个建模设计工具,小的有staruml,大的有rational rose,EA.最后发现还是Visual Studio建模比较舒服(个人观点,不要争论). 打算对自己经常用的几个建模图做一个介绍, ...

  5. 关于cin

    今天同学调试一个简单的程序的时候发现了问题,我们两个讨论的时候弄出了好多乐子 #include <iostream> using namespace std; int main() { ; ...

  6. 如何在niosII中添加i2c外设_winday_新浪博客

    如何在niosII中添加i2c外设_winday_新浪博客 如何在niosII中添加i2c外设 winday 摘要:本文说明了如何在niosII添加第三方i2c外设,以供参考. 由于本人使用的Alte ...

  7. maven spring3.2.5

    出现的情形: 开发环境: spring3.2.5 + springmvc +spirngDATA +maven 一. 偶然的spring Junit4测试 加载applicationContext.x ...

  8. 【总结整理】JQuery基础学习---DOM篇

    前言: 先介绍下需要用到的浏览器提供的一些原生的方法(这里不处理低版本的IE兼容问题) 创建流程比较简单,大体如下: 创建节点(常见的:元素.属性和文本) 添加节点的一些属性 加入到文档中 流程中涉及 ...

  9. Command line option syntax error. Type Command /? for Help.

    --------------------------- Microsoft Visual C++ 2005 Redistributable --------------------------- Co ...

  10. C++使用RabbitMQ类库做客户端与RabbitMQ Server通讯,生成C++可调用的rabbimq.*.dll的过程

    Step: download the latest rabbitmq-c via: https://github.com/alanxz/rabbitmq-c follow the document, ...