RTO:Retransmission TimeOut
超时重传是指发送方在发送某个数据帧后就开启一个计时器
自动重传请求 (wikipedia.org)
传统自动重传请求分为三种
这三种协议是基于滑动窗口技术和请求重发技术
在数据链路层中流量控制机制和可靠传输机制是交织在一起的
SW-ARQ:单帧-滑动窗口-停止-等待协议
在停止等待协议中,源站发送单个帧后必须等待确认,在目的站的回答到达源站之前,源站不能发送其他的数据帧
从滑动窗口机制的角度看,停止-等待协议相当于发送窗口和接收窗口大小均为1的滑动窗口协议
基本步骤
停止等待
编号
自动重传请求
在停止等待协议中,除数据帧丢失外,还可能出现以下两种差错
到达目的站的帧可能已遭破坏,接收站利用前面讨论过的差错检测技术检出后,简单地将该帧丢弃
另一种可能的差错是数据帧正确而确认帧被破坏,此时接收方已收到正确的数据帧,但发送方收不到确认帧,因此发送方会重传已被接收的数据帧,接收方收到同样的数据帧时会丢弃该帧,并重传一个该帧对应的确认帧
发送的帧交替地用0和1来标识,确认帧分别用ACK0和ACK1来表示,收到的确认帧有误时,重传已发送的帧
对于停止-等待协议,由于每发送一个数据帧就停止并等待,因此用1bt来编号就已足够
在停止-等待协议中,若连续出现相同发送序号的数据帧,表明发送端进行了超时重传
连续出现相同序号的确认帧时,表明接收端收到了重复帧
此外,为了超时重发和判定重复帧的需要,发送方和接收方都须设置一个帧缓冲区
主机甲采用ST-ARQ协议项主机乙发送数据,数据传输速率为C=3kb/s
单向传播时延D=200ms
忽略确认帧的传输时延
当信道利用率等于0.4的时候,数据帧的长度L=?
分析:
计算发送周期T=Ts+2DT=T_s+2DT=Ts+2D
Ts=L/CT_s=L/CTs=L/C
信道利用率
GBN:GoBackN(frame)
接收点丢弃从第一个没有收到的数据包开始的所有数据包
发送点收到NACK后,从NACK中指明的数据包开始重新发送
多帧-发送窗口
在后退N帧式ARQ中,发送方无须在收到上一个帧的ACK后才能开始发送下一帧,而是可以连续发送帧
当接收方检测出失序的信息帧后,要求发送方重发最后一个正确接收的信息帧之后的所有未被确认的帧;
或者当发送方发送了N个帧后,若发现该N个帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重传该出错帧及随后的N个帧
换句话说,接收方只允许按顺序接收帧
例如, 源站向目的站发送数据帧
GBN协议中,接受端通常采用累计确认的方式
GBN协议还规定接收端不一定每收到一个正确的数据帧就必须立即发回一个确认帧,
而可以在连续收到好几个正确的数据帧后,才对最后一个数据帧发确认信息,
或者可在自己有数据要发送时才将对以前正确收到的帧加以捎带确认
这就是说,对某一数据帧的确认就表明该数据帧和此前所有的数据帧均已正确无误地收到
后退N帧的接收窗口大小为1,可以保证接收数据帧
对于GBN,若采用n bit对帧编号,发送窗口的尺寸WTW_TWTn,WTn,W_Tn,WT应该满足
如果给定用于帧编号的编号数m,那么
否则会造成无法分辨新帧和旧帧
举一个具体的例子进行说明
主机甲通过C=128kb/s卫星链路,采用滑动窗口协议向主机乙发送数据,
分析:
此类问题,对一个发送周期进行讨论,并求出周期内发送的帧数:
发送周期:开始发送帧到收到第一个确认帧为止的过程
用时为:
T=第一个帧的传输时延+第一个帧的传播时延+确认帧的传输时延+确认帧的传播时延
即:T=Ts+2DT=T_s+2DT=Ts+2D
因此T=Ts+RTT=2−4s+2×250ms=2−4+2−1=0.5625sT=T_s+RTT=2^{-4}s+2\times 250ms=2^{-4}+2^{-1}=0.5625sT=Ts+RTT=2−4s+2×250ms=2−4+2−1=0.5625s,
接着计算在T内需要发送多少数据(设为LLL)才能满足利用率不小于80%。
(L/128kb/s)/T≥0.8(L/128kb/s)/T≥0.8(L/128kb/s)/T≥0.8,
L27kb/s×(2−4+2−1)s⩾0.8L1kb/s×(23+26)s=L(8+64)kb=L72kb⩾0.8L⩾0.8×72kb=8×7.2kb=7.2kB\frac{L}{2^7kb/s\times{(2^{-4}+2^{-1})}s}\geqslant{0.8} \\ \frac{L}{1kb/s\times{(2^{3}+2^{6})}s}=\frac{L}{ {(8+64)}kb} =\frac{L}{72kb}\geqslant{0.8} \\L\geqslant{0.8\times{72kb}}=8\times{7.2kb}=7.2kB 27kb/s×(2−4+2−1)sL⩾0.81kb/s×(23+26)sL=(8+64)kbL=72kbL⩾0.8L⩾0.8×72kb=8×7.2kb=7.2kB
L/S=7.2kB/1kB=7.2(帧)L/S=7.2kB/1kB=7.2(帧)L/S=7.2kB/1kB=7.2(帧)
即在一个发送周期内至少发7.2个帧才能满足要求,
设需要编号的比特数为n,则2n−1⩾7.22^n-1\geqslant7.22n−1⩾7.2,因此n至少ceil(log27.2)=4ceil(\log_2{7.2})=4ceil(log27.2)=4
两台主机之间的数据链路层采用GBN传输数据
分析:
本题主要求解的是从发送一个帧到接收到这个帧的确认为止的时间内最多可以发送多少数据帧。
要尽可能多发帧,提高信道利用率,应以短的数据帧计算,因此首先计算出发送一帧的时间
数据帧长度是不确定的,范围是128~512B
但在计算至少窗口大小时,为了保证无论数据帧长度如何变化,信道利用率都能达到最高,
这个最高
在不同帧长下计算的结果不同,虽然具体的最高值不确定,但是这个最高在帧长范围区间的边界取到是容易判断的,这又有两种可能,以
结论是,应以最短的帧长计算
因为,如果以最长512B计算,那么求得的参数在传输帧长为128B的最短帧情况下,达不到最高信道利用率。
首先计算出发送一帧的时间
t0=128×8/(16×10−3)=64ms:t_0=128×8/(16×10^{-3})=64ms:t0=128×8/(16×10−3)=64ms:
发送一帧到收到确认为止的总时间(发送周期)为t=t0+RTT+t0=t0+2D+t0=64+270×2+64=668mst=t_0+RTT+t_0=t_0+2D+t_0=64+270×2+64=668mst=t0+RTT+t0=t0+2D+t0=64+270×2+64=668ms:
这段时间总共可以发送668/64=10.4帧,发送这么多帧至少需要用ceil(log210.4)=4ceil(\log_2{10.4})=4ceil(log210.4)=4位比特进行编号。
类似于指令流水,每个帧的发送时间越短,发送周期内可以发送出去的帧就越多
只有接收窗口向前滑动(同时接收方发送了确认帧)时,发送窗口才有可能(只有发送方收到确认帧后才一定)向前滑动
从滑动窗口的概念看,停止-等待协议后退N帧协议和选择重传协议只在发送窗口大小与接收窗口大小上有所差别:
停止-等待协议:发送窗口大小=1,接收窗口大小=1
后退N顿协议:发送窗口大小>1,接收窗口大小=1
选择重传协议:发送窗口大小>1,接收窗口大小>1
接收窗口的大小为1时,可保证帧的有序接收
数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的
若滑动窗口机制采用SR协议来进行流量控制,允许发送方在收到应答前连续发出多个帧,
若帧序号长度为kbit,接收窗口的大小W⩽2k−1W\leqslant{2^{k-1}}W⩽2k−1,才能避免接收端向前移动窗口后,新的窗口和旧的窗口产生重叠
设发送窗口的帧序列区间为[L,U],窗口大小为y=U−L+1y=U-L+1y=U−L+1;发送窗口大小的初始值为W
0⩽y⩽W0\leqslant{y}\leqslant{W}0⩽y⩽W
0⩽U−L+1⩽WU−W+1⩽LL⩾U−W+1mod2k0\leqslant U-L+1\leqslant{W} \\ U-W+1\leqslant{L} \\ L\geqslant{U-W+1\mod{2^{k}}} 0⩽U−L+1⩽WU−W+1⩽LL⩾U−W+1mod2k
连续ARQ协议 | 停止-等待协议 | |
---|---|---|
发送的分组数量 | 一次发送多个分组 | 一次发送一个分组 |
传输控制 | 滑动窗☐协议 | 停等-等待 |
确认 | 单独确认+累积确认 | 单独确认 |
超时定时器 | 每个发送的分组 | 每个发送的分组 |
编号 | 每个发送的分组 | 每个发送的分组 |
重传 | 回退N,多个分组 | 一个分组 |