可靠传输协议(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. FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题--转

    FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题 算法暂不介绍. 思路:FEC ENCODE 增加冗余包,当无线等网络丢包之后,接 ...

  2. 通过rtmpdump推送海康视频流到red5服务器

    现在主流的网络摄像机都支持标准H264视频格式,例如 海康网络摄像机, 通过海康提供的网络SDK可以获取到视频码流.我测试的这款相机,视频编码采用的是H264,音频编码采用的是G711a. 这里,我仅 ...

  3. CodeForces - 1017F. The Neutral Zone (数学+Bitset存素数+素数筛优化)

    Notice: unusual memory limit! After the war, destroyed cities in the neutral zone were restored. And ...

  4. [转]PNG8和PNG24的区别

    首先我们要知道: 1.png8和png24的根本区别,不是颜色位的区别,而是存储方式不同. 2.png8有1位的布尔透明通道(要么完全透明,要么完全不透明),png24则有8位(256阶)的布尔透明通 ...

  5. Microsoft Data Access Components 2.8

    今天在安装金蝶系统的时候,发现这个组件无法安装上 此组件如果跳过,不安装,将会导致金蝶安装完毕后,提醒无法创建账套,也就是金蝶软件无法连接到数据库上,所以此步为必须. 于是乎,网上找这个组件,下载地址 ...

  6. DES加密/解密

    /// <summary> /// DES加密/解密类. /// </summary> public class DESEncrypt { #region ========加密 ...

  7. 字符编码ANSI、ASCII、GB2312、GBK、GB18030、UNICODE、UTF-8小结

    编码和解码可以理解成二进制和字符(广义的字符,包括汉字等)的映射表,编码即从字符映射至二进制,解码则为逆过程. 1.英语字符编码ASCII 开始计算机只在美国用.8字节一共可以组合出256(2的8次方 ...

  8. PopupWindow 防微信弹出右 侧窗体(继承PopupWindow )

    1, pop自定义 public class SelectPicPopupWindow extends PopupWindow { private Button btn_take_photo, btn ...

  9. Luogu 3825 [NOI2017]游戏

    Luogu的spj现在挂了,要去其他OJ提交. 2-SAT 发现如果不考虑$x$的情况,这就成为一个2-SAT的裸题了,我们有$O(n + m)$的方法可以解决它. 那加上$x$的情况怎么弄……岂不是 ...

  10. JAVA 框架 / SSM / SSM SPRING+SPING MVC + MYBATIS 三大框架整合详细步骤

    http://how2j.cn/k/ssm/ssm-tutorial/1137.html