选择重传协议也是基于滑动窗口流量控制技术的。它的接受窗口尺寸和发送窗口尺寸都大于 1,以便能够一次性接受多个帧。如果采用 n 个比特对帧机型编号,为了避免接受端向前移动窗口后,新接收窗口与旧接收窗口产生重叠,发送窗口的最大尺寸应该不超过序列号范围的一般:WT≤2n−1WT≤2n−1.当发送窗口取最大值时,WR=WT=2n−1WR=WT=2n−1(大部分情况都是发送窗口等于接收窗口并且都等于 2n−12n−1,因为在这种情况下可以达到最大效率),此时,如果 WTWT 取大于 2n−12n−1 的值,可能造成新、旧接收窗口重叠。
基本思想:如果某一帧出错,其后续帧先存入接收方的缓冲区中,同时要求发送方重新传输出错帧,就和原先存在缓冲区的其余帧一起按照正确的顺序送到主机。选择重传协议避免了重复传输那些本来已经正确到达接收方的数据帧,进一步提高了信道利用率,代价是增加了缓冲空间。
补充:为什么选择重传协议的最大发送窗口大小是 2n−12n−1?
答:现在先假设选择重传协议的最大发送窗口是 W,那么可以一次性发送 0 ~ W - 1 号帧,并且接收方都已经收到了(就是说,这 W 个确认帧都已经发了),但是这 W 个确认帧全部在传输过程中丢失了,此时接收窗口的位置已经移动到 W ~ 2W - 1. 如果发送方再发一轮,这 W 个帧应该落在W ~ 2W - 1上,但是此时的 W 帧是重传的,所以如要正确,就必须满足 2W - 1 是在最大序号 2n−12n−1之内,也就是说 2W−1≤2n−12W−1≤2n−1,即 W≤2n−1W≤2n−1.
由于选择重传协议的最大发送窗口是 2n−12n−1 还是比较难以理解的。举个例子,假设 n=3n=3 ,则 2n−1=4 2n−1=4.如果发送窗口和接收窗口为 5. 假设 t1t1 时刻发送方发送序号为 0~4 的帧 ,t2t2 时刻接收方收到序号为 0~4 的帧,但是确认帧在传输过程中丢失了。于是,发送方在 t3t3时刻重新发送帧0,当t4t4时刻接收方收到帧 0时候,由于帧0 在其接受范围之内, 0 被错误的当作下一个新帧接受,导致协议错误。因此 W≤2n−1W≤2n−1.
另外一个疑问点:如果不按需接受,交给主机时不是全部乱套了?
答:如果没有按序,正确的接受帧先存入接收方的缓冲区中,同时要求发送方重传出错帧,一旦接收到重传帧之后,就和原先存在缓冲区的其余帧按照正确的顺序发送到主机。所以说选择重选协议避免了重复传输那些本来已经正确到达接收方的数据帧,进一步提高了信道的利用率,但是代价是增加了缓冲空间。