(运输层)TCP可靠传输之滑动窗口协议

(运输层)TCP可靠传输之滑动窗口协议

A发送窗口表示:在没有收到B的确认的情况下,A可以把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。
发送窗口的位置由窗口前沿和后沿的位置共同确定。发送窗口后沿的变化情况有两种可能,即不动(没有收到新的确认)和前移(收到新的确认)。发送窗口不能向后移动,因为不能撤销掉已收到的确认。
发送窗口前沿通常是不断向前移动,但有可能不动。(一是没有收到新的确认,对方通知的窗口大小也不变;二是收到新的确认但对方通知的窗口缩小了,使得发送窗口前沿正好不动。)它也有可能向后收缩。这发生在对方通知的窗口缩小了,但TCP的标准强烈不赞成这么做。因为很可能发送方在收到这个通知以前已经发送了窗口中的许多数据,现在又要收缩窗口,不让发送这些数据,这样会产生错误。

(运输层)TCP可靠传输之滑动窗口协议

P3-P1=A的发送窗口(又称为通知窗口)
P2-P1=已发送但尚未收到确认的字节数
P3-P2=允许发送但尚未发送的字节(又称为可用窗口或有效窗口)

在接收窗口B外面,到30号为止的数据是已经发送过确认,并且已经交付给主机了。因此在B可以不再保留这些数据。接收窗口内的序号(31-50)是允许接收的。图5-16中,B发送的确认报文段中的确认号仍然是31(即期望收到的序号)。

(运输层)TCP可靠传输之滑动窗口协议

图5-17表明B已经收到了到序号33为止的数据。我们注意到,B还收到了序号为37,38,40的数据,但这些都没有按序到达,只能先暂存在接收窗口中。A收到B的确认后,就可以把发送窗口向前移动3个序号,但指针P2不动。可以看出,现在A的可用窗口增大了,
可发送的序号范围是42-53。

图5-18表明A在继续发送完序号为42-53的数据后,指针P2向前移动和P3重合,发送窗口内的序号都已用完,但还没再收到确认.由于A的发送窗口已满,可用窗口已减小为0,因此必须停止发送。
(运输层)TCP可靠传输之滑动窗口协议


发送缓存用来暂时存放:
(1)发送应用程序传送给发送方TCP准备发送的数据;
(2)TCP已发送出但尚未收到确认的数据。

(运输层)TCP可靠传输之滑动窗口协议

接收缓存用来暂时存放:
(1)按序到达的、但未被应用程序读取的数据。
(2)未按序到达的数据。

根据以上所讨论的,强调三点:
1>虽然A的发送窗口根据B的接收窗口设置的,但在同一时刻,A的发送窗口并不总是和B的接收窗口一样大。因为通过网络传送窗口值需要经历一定的时间滞后,另外,发送方A还可能根据网络当时的拥塞情况适当减小自己的窗口数值。
2>对于不按序到达的数据,TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用程序。
3>TCP要求接收方必须有累计确认的功能,这样可以减小开销。

超时重传时间的选择:
RTO=RTTS+4*RTTD(5-5)
新的RTTD=(1-β)*(旧的RTTD)+β*|RTTS-新的RTT样本|(β<1,推荐值为0.25)
RTO:超时重传时间
RTTS:加权平均往返时间
RTTD:RTT的偏差的加权平均值
修正的Karn算法:报文段每重传一次,就把超时重传时间RTO增大一些。典型的做法是取新的重传时间为2倍的旧的重传时间。当不再发生报文段的重传时,才根据上面给出的(5-5)式计算超时重传时间。