可靠传输

基本概念

使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测传输过程中是否产生了误码(比特错误)。

数据链路层向上层提供的服务类型

一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。

无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。

比特差错只是传输差错中的一种。

从整个计算机网络体系结构来看,传输差错还包括分组丢失(发送的分组因某种原因被丢弃)、分组失序(发送的多个分组到达接收方的顺序与发送时不同)以及分组重复(分组因网络延时卡在路由器,引发发送方的超时发送,出现重复)。

分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。

可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需。

可靠传输的实现机制——停止-等待协议SW(Stop-and-Wait)

1.确认与否认

DATA为数据分组,ACK为确认分组,NAK为否认分组。从上往下。

如该图,接收方发送第一个DATA,接收方对其进行差错,确认无误码,返回ACK,发送方收到ACK后,才可以删除第一个DATA的缓存,发送第二个DATA,若第二个DATA在传输过程中出现误码,接收方对其进行差错,返回NAK,发送方收到NAK,重新发送第二个DATA。(这就是为什么只有收到ACk时才能删除那个数据分组的缓存。)

2.超时重传

接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。

为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传

一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”

3.确认分组丢失

ACK丢失,会引起发送方的超时重传。

为避免分组重复这种传输错误,必须给每个分组带上序号。(如图,DATA0,DATA1)

对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。

4.确认分组迟到

对确认分组(ACK)进行编号。

ACK0迟到了,导致发送方超时重传,接收方接收到超时重传的DATA0,将其丢弃,并再发送ACK0,发送方接收到重复的ACK0,忽略该确认分组。

对于数据链路层的点对点信道,往返时间比较固定,不会出现确认分组迟到的情况,因此只在数据链路层实现停止等待协议,不需要给ACK编码。

注意事项:

1.接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组

2.为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1。

3.为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号

4.超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”

信道利用率

当往返时延RTT远大于数据帧发送时延To时(例如使用卫星链路),信道利用率非常低。

若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低。

为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR。

例题:主机甲采用停-等协议向主机乙发送数据,数据传输速率使3kbps,单向传播延时是200ms,忽略确认帧的传输延时。当信道利用率等于40%时,数据帧的长度为

A.240比特 B.400比特 C.480比特 D.800比特

解析:

可靠传输的实现机制——回退N帧协议GBN(Go-Back-N)

采用流水线传输可提高信道利用率。

1.采用3个比特给分组编序号,即序号07; n个比特, 02^n -1

2.发送窗口的尺寸Wt的取值:1<Wt≤2^3 - 1,本例取Wt=5. 1<Wr<2^n -1

3.接收窗口的尺寸Wr的取值:Wr=1;

发送窗口一次发送5个

到达接收方,接收窗口依次一个分组一个分组识别,并依次发回确认分组。

发送方每接受一个确认分组,发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口。

发送方可以把收到确认的分组从缓存中删除了,而接收方可以择机将已接收的数据交付上层处理。

累积确认

接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定)对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收。

如上图,接收方接收到0-1,发送一个ACK1,处理完2-4,发送一个ACK4,若ACK1丢了,ACK4到达发送方,则表明分组0-4都确认,已正确接收。

缺点

5号出现误码,丢弃,而后的序号6701,无法被5号接收窗口接收,也只能丢弃,每丢弃一个数据分组(5号误码不算),返回之前按序接受的最后一个确认分组,在本例中是ACK4,发4个ACK4。

发送方收到重复的确认。就知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻重传!

至于收到几个重复确认就立刻重传,由具体实现决定。若不能触发立刻重传,则等待超时计时器。超时后将发送窗口中的分组重传。

在本例中。尽管序号为6,7,0.1的数据分组正确到达接收方。但由于5号数据分组误码不被接受,它们也“受到牵连”而不被接受,发送方还要重传这些数据分组,这就是所谓的Go-back-N(回退N帧)。

发送窗口的尺寸不能超过其上限,如在上例,发送窗口为8,则发送01234567,接收方接收完这些后窗口序号为0,这样无法辨认新旧数据分组。

小结

发送方

接收方

例题:数据链路层使用后退N帧(GBN)协议,发送方已经发送了编号为0~7的帧。送方只收到0、2、3号帧的确认,则发送方需要重发的帧数是

A.2 B.3 C.4 D.5

解析:

(1)“发送方只收到0、2、3号帧的确认”表明接收方正确接收了0~3号帧,并针对它们中的每一个发送了确认帧,只不过针对1号帧的确认帧丢失了(这是题目中的陷阱,但又没有相应的选项,所以迷惑性并不是很大);

(2)截止到计时器超时,发送方只收到了针对03号帧的确认,而发送方之前已经发送了07号帧,因此应该从4号帧开始重传,即重传之前已经发送过的4、5、6、7号帧,共计重传4个帧。

一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费。

可靠传输的实现机制——选择重传协议SR(Selective Request)

为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸不应再等于1(而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议

注意:

选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认!

1.采用3个比特给分组编序号,即序号07; n个比特 02^n - 1

2.发送窗口的尺寸Wt的取值:1<wt<=(2^3-1),本例取Wt=4 1<Wt<2^(n-1)

3.接收窗口的尺寸Wr的取值:Wr=Wt=4;

发送方发送了0、1、2、3这4个序号的分组,在传输过程中,序号2的分组丢失

接收方接受了0、1、3这3个分组,先接受0、1这2个(这2个数据分组按序到达),并返回相应的1、2确认分组此时接收窗口向前移动2位,4和5落在接收窗口的位置。然后接受3这个分组,并返回3确认分组。但是此时接收窗口不能向前移动,因为3号数据分组是未按序到达的数据分组。

发送窗口先接收0、1确认分组,此时发送窗口向前移动2位,4、5落在发送窗口的位置,然后发送4、5数据分组,此时发送方可将0、1数据分组从发送缓存删除。接收方可择机将已接收的数据交付上层处理。

然后发送窗口再接收3号确认分组,知道3号数据分组已成功接收,之后3号数据并不会重复发送。但发送窗口不能向前移动,因为3号确认分组是未按序到达的数据分组。

而后,若4、5数据分组到达接收方后,接收窗口也不能向前移动,其他操作同理。

等发送方针对2号数据分组的重传计时器超时了,发送方就会重传2号数据分组。

发送窗口超过范围会造成无法辨识新旧数据分组

发送方发送0、1、2、3、4数据分组,接收方接收后返回0、1、2、3、4确认分组。然后0号确认分组丢了,1、2、3、4确认分组正常接收,此时发送窗口不能向前移动。然后等发送方针对0号数据分组的重传计时器超时了,发送方就会重传0号数据分组,此时0号数据分组会匹配到第二组循环序号的0号当中,无法辨识新旧数据分组,出现分组重复。

小结

发送方

接收方

例题:数据链路层采用选择重传协议(SR))传输数据,发送方已发送了0~3号数据帧,现已收到1号帧的确认,而0、2号帧依次超时,则此时需要重传的帧数是

A.1 B.2 C.3 D.4

解析:

(1)与回退N帧协议不同,选择重传协议不支持累积确认。接收方每接收一个数据帧,就会发回相应的确认帧。

(2)题目所给“收到1号帧的确认,而0、2号帧依次超时”,因此需要重传O、2号帧。至于发送方已发送的3号数据帧,题目并未给出它的任何其他线索,因此无须考虑3号帧。

故选B