可靠传输
在链路层传输中,可能出现的错误包括数据位出错、分组丢失、分组失序、分组重复等。可靠传输服务希望实现发送端发送什么,接收端就接收到什么。虽然下面将在链路层这一章节中介绍SW、GBN、SR三种协议,但要明确的是,可靠传输服务并不仅仅局限于链路层,其他各层均可选择实现可靠传输。
停等协议 - SW
停等协议 (Stop and Wait, SW)
的发送方每发送一帧数据就停止,并等待接收方发送确认帧,收到确认后再发送下一帧。
确认与否认、超时重传
发送方发送数据后等待接收方ACK
或NAK
的响应,并启动超时计时器,如果一定时间收不到响应则启动超时重传。
确认丢失
如果确认分组丢失,接收方需要能感知到数据分组是否重复,因此数据分组需要编号,在停等协议中,由于每发送一个数据就进行等待,因此使用一位编号就够了。
确认迟到
如果确认分组迟到,在图示情况中,发送方需要感知到第二个ACK
是对第二个DATA 0
的重复确认,而不是对DATA 1
的确认。因此确认分组也需要使用一位编号。
回退N帧协议 - GBN
回退N帧协议 (Go Back N, GBN)
允许发送方连续发送多个帧(即发送窗口可以大于1
),以解决停等协议信道利用率低的问题。
发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;但接收方的接收窗口大小仅为1
,也就是只有接收到了此窗口所代表的序号的分组,接收方才会回复ACK
并且移动接收窗口。同理,发送方收到了发送窗口中最早的那个序号对应分组的ACK
,才会移动发送窗口。
累计确认
接收方不一定要对收到的数据逐个确认,也可以对最后一个分组进行确认。ACK n
表示序号为n
及其之前的分组都已经被正确接收。称这种方法为累计确认。例如图中,接收方只对1
号、4
号数据分组进行确认,并且ACK 1
在传输过程中丢失,发送方仍然可以根据收到的ACK 4
判断0
~4
号分组都已经被正确接收。
有差错情况
例如发送方发送了5
/6
/7
/0
/1
五个分组,但5
号数据分组丢失,此时由于到达的四个分组都与接收窗口序号不匹配,接收方会将其丢弃,并重复响应ACK 4
。
选择重传协议 - SR
选择重传协议 (Selective Repeat, SR)
加大接收窗口的长度(即接收窗口也可以大于1
),缓存乱序到达的帧,这样不至于在一些情况下需要重传所有未被确认的帧从而导致效率降低。
与GBN一样,发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;接收方可接收未按序到达但没有误码并且序号落在接收窗口内的数据分组;发送方收到未按序到达的确认分组时,对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。为了使发送方仅重传出现差错的分组,接收方不再采用累积确认,而是对每个正确接收的数据分组进行逐一确认。
例如发送方发送了0
/1
/2
/3
四个分组,但2
号数据分组丢失,此时0
号、1
号按序到达,接收窗口可以向前移动;而3
号分组可以被接收,但接收窗口不能移动。
返回的ACK
到达发送方之后,发送方可以把发送窗口的起点移动到2
号,同时记录3
号分组已接收。移动发送窗口后,可以把新纳入窗口的4
号、5
号发送出去。
如果4
号、5
号可以被正常接收,并且返回的ACK 4
、ACK 5
可以正确到达发送方,那么最后会使得发送窗口和接收窗口都卡在2
的位置,并最终触发2
号分组超时重传。
回退N帧协议 - GBN
1:若采用后退N帧的ARQ协议进行流量控制,帧编号字段为7位,则发送窗口的最大长度为
A .7 B.8 C.127 D.128
解题:
发送窗口+接收窗口<=帧序号
m+1<=帧序号
帧编号7位,表示占7个二进制位,7个2进制位可以表示的数据范围就是,2的7次方128
m+1<=128 ,m<=127
SR协议:选择重传协议,重传出现差错的数据帧或重传计时器超时的数据帧,选择重传协议中,接收方逐个地确认正确接收的分组,不管接收到的分组是否有序,只要正确接收就发送选择ACK分组进行确认。
SR需要对单个帧进行确认,GBN可以累计确认
2:一个使用选择重传协议的数据链路层协议,如果采用了5位的帧序列号,那么可以选用的最大接收窗口是 16.
解题:发送端窗口+接收端窗口<=序列号
发送窗口=接收窗口
x+y = 36 , 2的5次方
x=y
y = 16
2X <=序列号
注:窗口上边界-下边界+1 = 窗口的大小, 对于首尾连续的情况,可以用取模
(上边界-下边界+1)mod 序列号 <=窗口大小
3:对于窗口大小为n的滑动窗口,最多可以有()帧已发送但没有确认
A.0 B.n-1 C.n D.n/2
发送窗口的大小<=窗口总数-1
4:对于无序接收的滑动窗口协议,若序号位数为n,则发送窗口最大尺寸为
A. 2n次方-1,B. 2n C.2n-1 D.2的n-1次方
发送端窗口+接收端窗口<=帧序号
发送端窗口=接收端窗口