可靠传输协议(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. RTP 打包H264与AAC

    static int h264_parse(Track *tr, uint8_t *data, size_t len) { h264_priv *priv = tr->private_data; ...

  2. 在YUV图像上根据背景色实现OSD反色

    所谓的OSD其实就是在视频图像上叠加一些字符信息,比如时间,地点,通道号等, 在图像上叠加OSD通常有两种方式: 一种是在前端嵌入式设备上,在图像数据上叠加OSD, 这样客户端这边只需解码显示数据即可 ...

  3. LOJ2305 「NOI2017」游戏

    「NOI2017」游戏 题目背景 狂野飙车是小 L 最喜欢的游戏.与其他业余玩家不同的是,小 L 在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略. 题目描述 小 L 计划进行$n$场 ...

  4. http头部解释

    If-Modified-Since,If-Node-Match,ETag,Last-Modified 1 属于 Request Headers的是:If-Modified-Since,If-Node- ...

  5. 从生成文件对比两种创建虚拟机的方式:boot from image和boot from bootable-volume

    1. 创建bootable-volume(参考:http://docs.openstack.org/grizzly/openstack-compute/admin/content/instance-c ...

  6. 一 ThreadLocal

    (1)  Threadlocal定义: 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它 ...

  7. ParentViewController中添加SubViewController(IOS学习)

    我是用的是Container.addSubView的方法. 1. ParentViewController.m的@interface()中添加2个子vc的实例变量,代码如下 @property (no ...

  8. URL中#符号的作用

    转自http://blog.sina.com.cn/s/blog_6f9eb2dd0100sk97.html 一.#的涵义 #代表网页中的一个位置.其右面的字符,就是该位置的标识符.比如,       ...

  9. AngularJs(Part 8)--Filters

    Filters AngularJS provides fileters to transfrom data from one kind to another . For example:     {{ ...

  10. github的简单操作

    之前初学过一点git版本控制工具,利用github做仓库,照着github上的文档练习的了一下.不过那只篇只是照虎画猫(我的水平只能照着老虎画个猫模样,嘻嘻!). 最近在学hibernate,公司与家 ...