rdt1.0,rdt2.0,rdt2.1,rdt2.2,rdt3.0

可靠资料传输(Reliable Data Transfer 简称rdt)

资料可靠度是网络传输中非常大的问题之一。在TCP抽象服务的模型中(也算是理想状态),每个应用程序的讯息都透过网络上可靠的通道来传输,然而现实中的困难是 可靠传输协定的下层是不可靠。也就是说,现实中存在着许多状况,例如资料位元错误、封包遗失等等 造成资料的不可靠,必须建立有效的传输协定。

1、rdt1.0 
rdt的模型主要是用FSM(Finite State Machine-有限状态机)来定义状态与操作方式。 
这里写图片描述
rdt1.0是假设使用最可靠的通道情况。主要有传输端与接收端两个部分,资料传输方式很单纯,传输端等待上层传资料进来,收到上面的资料以后装成封包送出去。 
接收端收到封包以后,将封包解开,把讯息往上送。 
2、rdt2.0 
2.0考虑到了资料错误的情形,当接收端收到资料,会有ACK(相当于OK)与NAK(相当于Send Again)两种讯息,当资料接收到以后确认无误,会送ACK给来源已确定资料无误。当侦测到错误时 会传回NAK通知来源端再送一次。 
这里写图片描述
应对位错误,相对1.0增加的内容 
这里写图片描述 
pkt加校验和 
这里写图片描述
无错误场景 
这里写图片描述
上次调用,wait ,接收方wait,计算校验和,产生分组,发给接收方,wait for ack,发送方提取数据(交付数据)发回发送方,发送方状态变迁返回初始状态。 
这里写图片描述
有错误的场景 
这里写图片描述
udt_send重传 
这里写图片描述
3、rdt2.1 
2.1新增了sequence number,同样使用ACK与NAK来确认讯息,封包的号码可以用来确认是否重新传输封包。 
例如接收端在等待编号0的封包,结果收到封包1,此时会回传ACK1给来源端,而正在等候ACK0的来源端收到ACK1 表示封包0可能遗失,所以会再重送封包0。 
sender 
这里写图片描述
receiver 
这里写图片描述
这里写图片描述
停等协议,两个序列号就够用 
4、rdt2.2 
一次使用两种确认讯息 处理起来比较费力,因此2.2中移除NAK的讯息,在ACK中加入编号 就可以达到确认与否认的效果。 
这里写图片描述 
这里写图片描述
5、rdt3.0 
3.0同时考虑到封包遗失与资料错误的情形,除了使用ACK机制,另外在传送端多了倒数计时器,封包送出去如果超过时间仍未收到ACK或是收到不正确编号的ACK,则再送出封包一次。 
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
软件加硬件相匹配,等于性能 
这里写图片描述
停等操作时间好长 
6. 
Stop-and-Wait 与 Pipelined Protocol

rdt3.0虽然确保了资料的可靠性,可是它采用Stop-and-Wait机制,效能方面无法让人接受,因为送出封包后必须等待对方回应才能继续传送,假如连线Delay太长,整体效率会严重低落。

为解决这问题,后来发展出 Pipelined Protocol,可以让传送端同时传送多个封包不需等待确认相对的,传输端与接收端都必须增加封包的暂存空间与序列号码。当其中的封包出现错误时有不同的回覆方法,主要有Go-Back-N(GBN)与Selective Repeat(SR)两种方法。

Go-Back-N(GBN) 
传输多个封包 必须有个暂存的区域,暂存的区域中存在着窗格大小(Window Size) N,存放着各种封包(已确认、已送出但未收到ACK、未送出的封包等等)。 
接收端也会开启窗格来接收封包,会记着目前收到封包的编号,假设收到顺序不对的封包N+1(等待接收第N个,下一个传来的却是第N+1号),会将N以后的封包全部丢弃,此时传送端一直没收到ACK(N),会把N号以后的封包全部重新传送出去。

Selective Repeat(SR) 
GBN的传送方法往往会造成不必要的重复,因此SR的传送方法就是只针对未收到的封包做重新传输的动作。首先规划出大小为N的窗格来限制大小,窗格的基底会停留在最近一个尚未收到ACK的封包区域,当封包时间逾时会重新送出封包,直到收到该封包的ACK 窗格基底才会往前移动。

7. 
Flow Control(流量控制)

虽然TCP接收端有缓冲区,但有时候应用程序读取讯息的速度小于传输端传送讯息的速度,假如缓冲区满了还继续传资料过来,会造成缓冲区溢位的情况,为避免此状况,设了一个”receive window(接收窗格简写成rcvWindow)”变量,用来记录缓冲区剩余的空间有多少。

当接收端收到讯息后,会回传给传送端rcvWindow的数值,如果rcvWindow=0,传送端会停止传输资料但这个方法会造成问题,假设停止后 接收端一直没讯息通知传送端,此时传送端不会运作,而接收缓冲区也是空的,资料传输停止。 
因此当接收端rcvWindow=0时,传送端会持续传送一个1byte的区段给接收端 以确认缓冲区可否继续接收资料。 
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
TCP演示地址http://www.exa.unicen.edu.ar/catedras/comdat1/material/Filminas3_Practico3.swf

  • 11
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值