一、可靠的数据传输(rdt) 1、什么是可靠数据传输:不出错、不冲突、不失序、不丢失 2、如何实现可靠数据传输? 需要借助于下层提供的协议,但是如果下层提供服务不可靠呢?本层的协议机制,协议实体要靠什么机制的安排实现可靠的服务? 采用渐增式的开发可靠数据传输协议(rdt)的发送方和接收方 。 3、rdt 1、只考虑单向数据传输 2、双向的数据传输问题实际是两个单向数据传输问题的综合 3、使用有限状态机(FSM)来描述发送方和接收方 4、rdt在应用层、传输层和数据链路层都很重要,是网络TOP10问题之一 5、信道的不可靠性特点决定了可靠数据传输(rdt)的复杂性
二、Rdt1.0 1、使用场景 :下层的信道是完全可靠的:没有比特差错,没有分组丢失 2、发送方和接收方的FSM:发送方将数据发送到下层信道,接收方从下层信道接收数据 所以rdt1.0做的工作就是封装和解封装
三、Rdt2.0:具有比特差错的信道 1、使用场景 :下层信道可能出现差错:将分组中的比特翻转,0变为1,1变为0(用校验和来检测差错) 2、确认ACK :接收方显式的告诉发送方分组已经被接收 否定确认NAK :接收方显式地告诉发送方分组出现了差错(发送方接收到NAK后,会重传分组) 3、过程 :发送方发送packet到下层信道,接收方接收,通过校验和发现数据有差错,返回NAK ,发送方再次发送原packet;无差错返回ACK ,发送方发送新的pactet 4、所以Rdt2.0新机制就是采用了差错控制编码 进行差错检测 5、发送方和接受方的FSM : (1)发送方状态:等待来自上层的调用、等待ACK / NAK (2)接收方:等待来自下层的调用
最后细想一个问题,发送的packet可能会出现错误,但是返回的ACK / NAK是不是就一定是正确的呢?答案肯定是否定的,但是发送方应该怎么做呢?重传?可能会重复,不重传?可能会造成死锁或出错 所以引出了 Rdt2.1
四、Rdt2.1 1、为了处理上面所描述的问题,也就是在不知道发送的 ACK / NAK是否出现差错的情况下,Rdt2.1采用再次传输的方法,并且在传输的每个packet中都会加上序号 ,若没有错误,则根据序号将这个packet跑调,这样子就解决可能存在ACK / NAK出现错误,又能避免没有错误时的重复 2、因为每次只会发送一个分组然后等待确认,所以只需要两个序列号就够了(0和1),检测ACK / NAK是否出错同样使用EDC;原本只需要等待数据的发送,现在有了序号,状态也就变成了两倍,成了等待0与等待1 2、这种发送方只发送一个分组,然后等待接收方的应答的方式称为停止等待协议
五、Rdt2.2(无NAK协议) 1、功能与Rdt2.1相同,但是只用ACK(ACK需要编号) 2、接收方对最后正确接收的分组ACK,以代替NAK(接收方必须显式地包含被正确接收的分组的序号) 3、当收到重复的ACK时,发送方则重传当前分组
总结 :其实就是在发送方发送一个packet,接收方若没有错,则返回ACK+序号 ,再次发送若出错了,则再次发送上次这个ACK+序号,没出错序号便是新的序号了。 问题 :当第一个传输的分组就出错了,应该如何返回? 答案 :事实上如果第一个就出现错误,前面没有ACK可返回,那发送方在一定时间内没有收到返回信息,便会重传(超时重传),这个就是Rdt3.0 。
六、Rdt3.0 1、当下层信道可能会丢失分组(数据或ACK):会死锁,也就是上面提到的发送方一直没有收到接收方的返回信息,这时候就引入超时重传 (需要一个倒计时定时器)
问题 :每次都是只能发送一个,当信道非常大的时候,传输的packet在信道中损耗的时间是非常多的,如何解决? 答案 :采用流水线 方式,提高链路的利用率
七、流水线协议 1、流水线:允许发送方在未得到对方确认 的情况下一次发送多个分组 2、必须增加序号的范围:用多个bit表示分组的序号 3、在发送方/接收方要有缓冲区 (1)发送方缓冲 :未得到确认,可能需要重传,需要将发送的分组放在缓冲区 (2)接收方缓存 :上层用户取用数据的速率 != 接收到的数据从速率,接收到的速率可能会乱序,需要排序交付 4、流水线协议:回退N步 (GBN)和选择重传 (SR)
八、通用窗口协议(缓冲区协议): 1、发送缓冲区 : (1)发送缓冲区 : a.形式:内存中的一个区域,落入缓冲区的分组可以发送 b.功能:用于存放已发送,但是没有得到确认的分组 c.必要性:需要重发的时候可以用 (2)缓冲区大小:一次最多可以发送多少个未经确认的分组 a.停止等待协议=1 b.流水线协议>1,合理的值,不能很大,链路利用率不能超过100% (3)发送缓冲区中的分组 a.未发送的:落入发送缓冲区的分组,可以连续发送出去 b.已经发送出去的,等待对方确认的分组;缓冲区中只有得到确认的分组才能删除 2、接收缓冲区 : (1)接收窗口=接收缓冲区 ;传输的分组序号只有落在窗口范围内才允许内接收;若落在接收窗口范围外,则被丢弃 (2)接收窗口尺寸Wr=1,则只能顺序接收,成称为累计确认(GBK协议 );Wr>1,则可以乱序接收,三号窗口确认了,但是前面2号窗口不一定就确认了,称为非累计确认(SR协议 )。 3、窗口的滑动 (1)正常情况下窗口的滑动 a.发送窗口:有新的分组落入发送缓冲区范围,发送->前沿滑动;来了老的底序号分组的确认->后沿向前滑动->新的分组可以落入缓冲区的范围 b.接收窗口:收到分组,落入到接收窗口的范围内,接收;是底序号,发送确认给对方 (2)异常情况下GBK窗口的滑动 a.原因 :传输过程中的分组可能丢失、出错;接收方给的确认没有达到发送方。 b.过程 :接收方缓冲区大小为3情况下,在发送方发送分组的过程,2号分组丢失,1号分组确认收到后,接收方窗口不会向前滑动,因为2号分组的窗口是空的,而再接下来发送方在等待2号分组的确认信息是等不到的,所以最后触发超时重传 。 c.后果 :超时重传时发送方会将已发送但是未确认的全部重传一遍。 (3)异常情况下SR窗口的滑动 a.因为SR协议下的接收方是可以乱序接收的,也就是发送方可以发送多个,接收方可以乱序接收,也就意味着在缓冲区的范围内,若某个分组丢失,缓冲区的其他分组是可以照常确认的,只不过缓冲区窗口前沿不会向前移动 ,在等待丢失的分组超时触发器触发时,会将分组重传。SR协议下发送方每发一个协议,就会设定一个超时触发器。 4、GBK协议和SR协议的异同 (1)相同之处:发送窗口>1,一次可以发送多个未经确认的分组 (2)不同之处:GBK接收窗口=1,所以只能顺序接收;SR接收窗口>1,可以乱序接收 5、总结
|