计算机网络-传输层(2)流水线协议和滑动窗口协议

流水线技术允许发送方在收到ACK之前连续发送多个分组:
(1)必须增加序号范围,因为每个输送中的分组(不计算重传的)必须有一个唯一的序号,而且也许有多个在输送中未确认的报文。
(2)协议的发送方和接收方两端也许必须缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有确认的分组。如下面讨论的那样,接收方或许也需要缓存那些已正确接收的分组。
(3)所需序号范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组。解决流水线的差错恢复有两种滑动窗口协议:回退N步(Go-Back- N,GBN) 和选择重传(Selective Repeat, SR) 。
 
 
回退N步(GBN)协议
在流水线中未确认的分组数不能超过最大允许数(窗口长度N<2^k)
基序号(base) 定义为最早的未确认分组的序号,将下一个序号(nextseqnum) 定义为最小的未使用序号(下一个待发分组的序号)
如果窗口已满,发送方会缓存上层应用发来的数据,或使用同步机制(如一个信号量或标志)仅当窗口不满时才允许上层应用发送数据。
对序号为n的分组的确认采取累积确认的方式, 接受方发送拥有最高序列号的、已被正确接收的分组的ACK,表明自己已正确接收到序号≤n的所有分组。
乱序到达的分组直接丢弃(接收方无需缓存)重新确认序列号最大的、按序到达的分组,因此可能产生重复ACK。
只有一个计时器,base每次增加1,如果base==nextseqnum,就停止计时器,否则重启计时器。
如果出现超时,发送方重传所有已发送但还未被确认过的所有分组。
缺点:单个分组的差错就能够引起GBN重传大批分组,许多分组根本没有必要重传。随着信道差错率的增加,流水线可能会被这些不必要重传的分组所充斥。
 
选择重传(Selective Repeat, SR)
发送方窗口和接受方窗口之和必须小于2^k
发送方:
从上层收到数据:当从上层接收到数据后,发送方检查下一个可用于该分组的序号。如果序号位于发送方的窗口内,则将数据打包并发送;否则就像在GBN 中一样,要么将数据缓存,要么将其返回给上层以便以后传输。
重传:每个分组必须拥有其自己的逻辑定时器,超时发生后只能发送一个分组,并重启该定时器
收到ACK :如果收到ACK,倘若该分组序号在窗口内,则发送方将那个被确认的分组标记为己接收;如果该分组的序号等于发送窗口基序号send_base, 则send_base向前移动到具有最小序号的未确认分组处;如果窗口移动了并且有序号落在窗口内的未发送分组,则发送这些分组。
缓存机制:接收方将确认一个正确接收的分组而不管其是否按序。失序的分组将被缓存直到所有丢失分组(序号更小的分组)皆被收到为止
接受方:
序号在[rcv_base, rcv_base + N-1] 内的分组被正确接收:如果该分组以前没收到过,则缓存该分组。如果该分组的序号等于接收窗口的基序号rcv_base,则该分组以及以前缓存过的所有连续分组交付给上层。
序号在[rev_base-N, rev_base-1]内的分组被正确接收:虽然该分组是接收方以前已确认过的分组,也必须发送ACK
其他情况:忽略该分组。

猜你喜欢

转载自www.cnblogs.com/yangyuliufeng/p/9268886.html