即完全安全信道上的可靠数据传输
首先有了完全可靠的信道,接收方就不需要提供任何反馈信息给发送方。其次假定接收方接收速率与发送方发送速率相同,因此接收方没有必要请求发送方放慢发送速度。
1.前提:假定底层信道模型的比特可能受损。但是接收方会按照正确顺序接收各个分组。
2.协议内容:
自动重传请求协议(ARQ),包括,差错检验。接收方反馈。重传。三条协议。
2.1 差错检验:与上文提到的差错检验方式类似。该技术需要额外的比特。
2.2 接收方反馈。为了让发送方了解接收方的接收情况,唯一途径是让接收方提供明确的反馈信息。分为肯定确认(ACK)和否定确认(NAK).可以假定0否定,1为肯定。
2.3 重传。方接收方收到有差错的分组时,发送方重新传送该分组。
3. 图解:发送方
接受方:当发现比特出错时返NAK,属于上面的情况。比特正确时,属于下面的情况。但只有一个状态。
4.停等协议(stop-and-wait)
发送方在接收到反馈之前,一直不可获取新数据。同时当接收方给予肯定反馈之前,也不会发送新的数据块儿。
5.缺陷。
该协议存在一个缺陷。因为并没有考虑传输过程当中ACK 和NAK受损的问题。
处理的办法是。只要发送方收到的反馈不清楚。就会选择重新发送。但是仍然会产生新的问题。就是在信道中引入了冗余分组。同时接收方并不知道。接收的数据是上一次数据的再次发送还是新的数据。
关于冗余分组的处理办法。
在数据分组中添加一个新字段。让发送方对数据分组编号。即将发送的数据分组的序号放在字段。因此接收方只需要检查序号,即可确定收到的分组是否是一次重传。
--------------------------------------------------------------------------------------------------------------------
1.背景为了处理上面的冗余分组情况,因此产生了该协议。
2. 图解:
--------------------------------------------------------------------------------------------------------------------
实现一个无NAK的协议。用ACK是0,1 来区分肯定与否定。其他功能与rdt 2.1相同
--------------------------------------------------------------------------------------------------------------------
1.背景:在2.0中。比特可能会出错,但是不会丢失。但是在3.0协议中,我们研究的是比特丢包的现象。
2.问题:怎么检测丢包以及发生丢包后该做什么?
该协议使用了新的机制。在仍然使用重传的情况下,建立一个倒计数定时器。发送方在每次发送一个分组后会启动一个定时器。如果在给定时间内未接收到反馈则会重新发送数据。
图解:
--------------------------------------------------------------------------------------------------------------------
停等协议总结
-------------------------------------------------------------------------------------------------------------------
采用停等协议时,发送方利用率较低。因此采用一次多发几个分组。记流水线协议。
-------------------------------------------------------------------------------------------------------------------
1.必须增加序号范围。因为每个分组都有唯一的序号。而在传输过程当中有许多未确定的分组。
2.协议的发送方跟接收方必须缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有确认的分组。
3.所需序号范围和对缓冲的要求取决于传输协议处理数据丢失损坏等情况的方法。
回退N步 、 选择重传。
-------------------------------------------------------------------------------------------------------------------
该协议中允许发送方发送多个分组。而不需等待确认。但它也受限于在流水线中未确认的分组数,不能超过某个最大允许数n。
基序号:base:定义为最早的未确定分组的序号
下一个序号。nextsqnum:定义为最小的为使用学号。记下一个待发送分组的序号。
【0,base-1】:已经发送并确认过的分组。
【base,nextsqnum】:已经发送但未被确认的分组。
【nextsqnum,base+N-1】:可用于那些要被立即发送的分组。
因此N被称为窗口长度。该协议也被称之为滑动窗口协议。
当使用回退N步的协议时,接收方不需要记录丢的是谁?只需要记录。下一个要传谁?
1.上层的调用。
当上层调用rdt_send()时候,发送光首先检测窗口是否已满。如果未满则创立一个分组并将数据发送。如果窗口已满,则通知上层窗口。或进行缓存。
2.收到反馈信息ACK时
在该协议中,采用的是累积确认方法。表明接收方已正确接收到序号N以前的所有分组。
3.超时事件。
定时器。将再次用于恢复丢失的数据和确认分组。如果出现超时,发送方将重传所有已发送但未被确认的分组。如果在规定时间内收到了一个反馈信息,如果仍有已发送但未被确认的分组,则定时器重新启动,否则则停止。
如果一个序号为n的分组被正确接收到。并且按序,咋接收方为分组N发送一个ACK,并交付给上层。在其他的任何情况接收方都会丢弃该分组,定位最近按序接收的分组重传ACK。
看似接收方丢弃一个失去分组是愚蠢和浪费的行为。但是却有重要的意义。
比如接收方接到了n+1这分组,也就意味着第n各分组出现丢失或乱序,就算接收方对n+1这个分组进行缓存。对于发送方来说他没有收到,第n组的反馈信息。因此会把第n组和第n+1组信息全部进行重传。因此缓存n+1这个分组是毫无意义的。
优点;
同时如果直接丢掉乱序的分组。也简化了接收方的状态。这样接收方只需要维护的唯一信息就是下一个按序接收的分组的序号。即,对于接收方来说,当我已经接收到第二个分组的信息时,我只需要等待第三个分组的消息即可。如果给我的是第四个分组,我就进行丢弃。因为我需要把分组信息按照234进行上传。
缺点:
可能造成多个数据的重传
--------------------------------------------------------------------------------------------------------------------
在流水线协议当中会有许多分组被重传。但其实有很多事不必要的行为。同时如果多个数据被反复重传,还会占用信道导致传输速率变慢。
选择从传通过让发送方景重穿那些,他怀疑在接收方出错的分组而避免了不必要的重传。
接收方:
对于接收方来说,即使收到一个乱序的分组,会把它缓存。直到所有丢失分组都被收到。才会将这一批分组按序交付给上层。
发送方:
图解:
注意 1.第七次的时候,只是重传了第二个丢失的分组,不像GBN一样,把2.3.4.5都全重传了
2. 对于接受方来说,也没有收到第二组数据,就丢失了正确接受的3.4.5.同时还把3.4.5进行了缓存,并且返回了相应的ACK,然后等待2的带来。
窗口长度必须小于或等于序号空间大小的一半儿。
-------------------------------------------------------------------------------------------------------------------
1.首先他需要一个反馈的机制。就是告诉我发送发我收到还是没收到。这里用ACK来表示。
2.如果发送方收到了这个反馈信息,正确的反馈他可以继续发送信息。但是因为发送方发送数据的时候,是发送一组数据。就等待一个反馈信息。对于发送方来说,他浪费了等待反馈信息这部分的时间,那怎么处理这个问题呢?
我们使用了流水线协议。因此发送方可以一次多发送一些数据。因为发送数据的时间也相当于是用来等待反馈信息的时间。这样信道的利用率就增加了。
3.如果发送方接收的反馈信息是否定,怎么办呢?
他需要重新传送数据。
4.对于发送方来说,他只需要重传没有接收到ACK分组的数据即可。但是接收方怎么确定我收到的这个数据是重传还是新的数据呢?
这时需要使用一个变量叫序号。序号就是给发送的每一组数据进行编号。它不仅可以用于检测数据是重传还是新的数据。同时还可以帮助接收方确定接收的数据是否为顺序。而不是乱选。
5..现在对于发送方来说,他如果需要重新传送数据,发送方就需要知道接收方没有接到什么信息。也就相当于需要判定需要重传什么信息。
GBN在该协议中,实现了重传的机制,但是造成了多组数据的重新传送。
该协议的具体过程是,对于接收方来说,如果他想接收第二组数据,但是在信道中第二组数据丢失了。他接到了第三组数据。那么他就会丢弃第三组数据。并且给发送方反馈。说第二组数据没有收到。当发送方接收到这条反馈时,发送方就会把第二组数据和第三组数据全部进行重传。这也是为什么重传数量过多的原因。
同时在该协议中我们需要引入了一个新的变量叫N,他表示窗口的长度。也就是发送方已发送数据,但未被确认,货未收到反馈信息的分组的多少。因为如果不引入这个变量,我们一次性传输了零到100,这100组数据。即使传输的速度很快,当发送方接到第二组反馈信息时,全部数据已经传输完毕。这是我们发现第二组数据传回来的。反馈信息是否定。那么我们就需要把第二组倒第100组数据全部进行重传。难处理并且没有意义。
6.为了避免,多组数据重传造成的浪费。怎么办呢?
我们使用新的协议叫选择重传SR。该协议只需要让发送方传送接收方没有收到的数据即可。也就是第五条例子当中的第二组数据。
该协议的具体过程与第五条不同。因为对于接收方来说,她不会丢弃乱序的分组。如果第二组数据丢失,他会把正确接收到的第三组数据进行缓存。并且给发送方发送ACK 3.0.这时接收方发现没有ACK2.0.就会把第二组数据进行重传。而不会重传第三组数据。
7.如果在第六条协议的基础上,发送方一直没有接收到接收方的反馈。可能是由于发送的数据在信道中丢失,造成接收更没有接收数据。也可能是接收方发送的反馈信息发生丢失。我们怎么处理这种情况呢?
用一种新的机制都定时器。它不仅可以处理上面提到的问题。还可以处理因为时延过长造成的等待问题。当发送方发送数据时,定时器开启。当收到反馈信息时,定时器结束。如果在定时器设定的时间内没有接收到反馈信息,不管是因为何种原因,发送方都会重传该组数据。
-------------------------------------------------------------------------------------------------------------------