TCP-IP学习笔记回顾-4.5 TCP报文段的首部格式 -4.6 TCP可靠传输的实现【重点】
4.5 TCP报文段的首部格式
TCP虽然是面向字节流的,但TCP传输的数据单元是报文段。一个TCP报文段分为首部和数据两部分。TCP首部的最小长度是20Byte
IP数据报首部 | IP数据包数据部分 内容为{TCP首部 | TCP数据部分}
4.6 TCP可靠传输的实现【重点】
为了讲述可靠传输原理的方便,我们假定数据传输只在一个方向进行,即A发送数据,B给出确认。这样的好处是讨论限于两个窗口,即发送方A的发送窗口和接收方B的接收窗口。
4.6.1 以字节为单位的滑动窗口
第一,缓存空间和序号空间都是有限的,并且都是循环使用的。第二,由于实际缓存或窗口中的字节数是非常之大的,因此无法再图中把一个个字节的位置标注清楚。
发送缓存用来暂时存放:
(1)发送应用程序传送给发送方TCP准备发送的数据;
(2)TCP已发送出但尚未收到的确认的数据。
接受缓存用来暂时存放:
(1)按序到达的、但尚未被接受应用程序读取的数据;
(2)未按序到达的数据。
4.6.2 超时重传时间的选择
TCP的发送方在规定的时间内没有收到接收方的确认,就要重传已发送的报文段,这种重传的概念是很简单的,但是重传时间的选择却是TCP最复杂的问题之一。
TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间****RTT(ZY:Receive Transmit Time)。TCP保留了RTT的一个加权平均往返时间RTTs(又称为平滑的往返时间)。
新的RTTs = (1-α) * (旧的RTTs)+ α * (新的RTT样本)
上式中,0≦α<1。
超时计时设置的超时重传时间RTO应略大于上面得出的加权平均往返时间RTTs。
RTO = RTTs +4 * RTTd (RTO是RTT的偏差的加权平均值)
新的RTTd=(1-β)*(旧的RTTd)+β*|RTTs-新的RTT样本| (β的推荐值是0.25)
在计算加权平均RTTs时,只要报文段重传了,就不采用其往返时间样本。这样的出的加权平均RTTs和RTO就比较准备。
选择确认SACK(selective ACK)
还没有评论,来说两句吧...