NetWork计算机网络(第5版)第5章运输层数据通信与计算机网络第5章本讲主要内容5.6TCP可靠传输的实现5.6.1以字节为单位的滑动窗口5.6.2超时重传时间的选择5.7TCP的流量控制不允许接收已发送确认允许接收B的接收窗口26272829303132333435363738394041424344454647484950515253545556PB1PB2PB3seq=31,rwnd=20不允许发送收到确认允许发送但尚未发送A的发送窗口262728293031323334353637383940414243444546474849505152535455已发送但未收到确认56PA1PA2PA3不允许接收已发送确认允许接收B的接收窗口26272829303132333435363738394041424344454647484950515253545556PB1PB2PB3seq=35,rwnd=20不允许发送收到确认允许发送但尚未发送A的发送窗口262728293031323334353637383940414243444546474849505152535455已发送但未收到确认56PA1PA2PA3数据通信与计算机网络不允许发送已发送并收到确认A的发送窗口已满,有效窗口为零262728293031323334353637383940414243444546474849505152535455已发送但未收到确认56P1P2P3A的发送窗口内的序号都已用完,但还没有再收到确认,必须停止发送。数据通信与计算机网络发送缓存最后被确认的字节发送应用程序发送缓存最后发送的字节发送窗口已发送TCP序号增大数据通信与计算机网络接收缓存接收应用程序已收到接收窗口TCP接收缓存下一个读取的字节序号增大下一个期望收到的字节(确认号)数据通信与计算机网络发送缓存与接收缓存的作用发送缓存用来暂时存放:发送应用程序传送给发送方TCP准备发送的数据;TCP已发送出但尚未收到确认的数据。接收缓存用来暂时存放:按序到达的、但尚未被接收应用程序读取的数据;不按序到达的数据。数据通信与计算机网络需要强调三点A的发送窗口并不总是和B的接收窗口一样大(因为有一定的时间滞后)。TCP标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。TCP要求接收方必须有累积确认的功能,这样可以减小传输开销。习题5-30设TCP使用的最大窗口为64KB。而传输信道的带宽可认为是不受限制的。若报文段的平均时延为20ms,问所能得到的最大的吞吐量是多少?答:可见在报文段平均往返时延20ms内,发送方最多能发送64×1024×8比特,所以最大的吞吐量为=64×1024×8÷(20×10-3)=26214400bit/s=26.21Mbit/s数据通信与计算机网络第5章本讲主要内容5.6TCP可靠传输的实现5.6.1以字节为单位的滑动窗口5.6.2超时重传时间的选择5.7TCP的流量控制数据通信与计算机网络5.6.2超时重传时间的选择TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。重传机制是TCP中最重要和最复杂的问题之一。数据通信与计算机网络往返时延的方差很大由于TCP的下层是一个互联网环境,IP数据报所选择的路由变化很大。因而运输层的往返时间的方差也很大。时间数据链路层T1T2往返时间的概率分布数据通信与计算机网络加权平均往返时间TCP保留了RTT的一个加权平均往返时间RTTS(这又称为平滑的往返时间)。第一次测量到RTT样本时,RTTS值就取为所测量到的RTT样本值。以后每测量到一个新的RTT样本,就按下式重新计算一次RTTS:新的RTTS(1)(旧的RTTS)(新的RTT样本)(5-4)式中,01。若很接近于零,表示RTT值更新较慢。若选择接近于1,则表示RTT值更新较快。RFC2988推荐的值为1/8,即0.125。数据通信与计算机网络超时重传时间RTO(RetransmissionTime-Out)RTO应略大于上面得出的加权平均往返时间RTTS。RFC2988建议使用下式计算RTO:RTORTTS+4RTTD(5-5)RTTD是RTT的偏差的加权平均值。RFC2988建议这样计算RTTD。第一次测量时,RTTD值取为测量到的RTT样本值的一半。在以后的测量中,则使用下式计算加权平均的RTTD:新的RTTD=(1)(旧的RTTD)+RTTS新的RTT样本(5-6)是个小于1的系数,其推荐值是1/4,即0.25。数据通信与计算机网络往返时间RTT?往返时间的测量相当复杂TCP报文段1没有收到确认。重传(即报文段2)后,收到了确认报文段ACK。如何判定此确认报文段是对原来的报文段1的确认,还是对重传的报文段2的确认?发送一个TCP报文段超时重传TCP报文段收到ACK时间12往返时间RTT?是对哪一个报文段的确认?数据通信与计算机网络Karn算法在计算平均往返时间RTT时,只要报文段重传了,就不采用其往返时间样本。这样得出的加权平均平均往返时间RTTS和超时重传时间RTO就较准确。数据通信与计算机网络报文段每重传一次,就把RTO增大一些:新的RTO(旧的RTO)系数的典型值是2。当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延RTT和超时重传时间RTO的数值。实践证明,这种策略较为合理。修正的Karn算法习题5-34已知第一次测得TCP的往返时间RTT是30ms。接着接收到了三个确认报文段,用它们测量出的往返时间样本RTT分别是:26ms,32ms和24ms。设=0.1。试计算每一次的新的加权平均往返时间值RTTS。讨论所得出的结果。RTTS1=0.9*30ms+0.1*26ms=29.6msRTTS2=0.9*29.6ms+0.1*32ms=29.84msRTTS2=0.9*29.84ms+0.1*24ms=29.256ms数据通信与计算机网络第5章本讲主要内容5.6TCP可靠传输的实现5.6.1以字节为单位的滑动窗口5.6.2超时重传时间的选择5.7TCP的流量控制数据通信与计算机网络5.7.1利用滑动窗口实现流量控制一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。流量控制(flowcontrol)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口机制可以很方便地在TCP连接上实现流量控制。数据通信与计算机网络seq=1,DATAseq=201,DATAseq=401,DATAseq=301,DATAseq=101,DATAseq=201,DATAseq=501,DATAACK=1,ack=201,rwnd=300ACK=1,ack=601,rwnd=0ACK=1,ack=501,rwnd=100AB允许A发送序号201至500共300字节A发送了序号101至200,还能发送200字节A发送了序号301至400,还能再发送100字节新数据A发送了序号1至100,还能发送300字节A发送了序号401至500,不能再发送新数据了A超时重传旧的数据,但不能发送新的数据允许A发送序号501至600共100字节A发送了序号501至600,不能再发送了不允许A再发送(到序号600为止的数据都收到了)丢失!流量控制举例A向B发送数据。在连接建立时,B告诉A:“我的接收窗口rwnd=400(字节)”。数据通信与计算机网络持续计时器(persistencetimer)。TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。若窗口不是零,则死锁的僵局就可以打破了。数据通信与计算机网络5.7.2必须考虑传输效率可以用不同的机制来控制TCP报文段的发送时机:第一种机制是TCP维持一个变量,它等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去。第二种机制是由发送方的应用进程指明要求发送报文段,即TCP支持的推送(push)操作。第三种机制是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过MSS)发送出去。