1. 对每个连接,TCP管理4个定时器: (1)重传定时器:用于等待另一端的确认; 2. 超时与重传递时间间隔 超时时间可以应用程序设置(SO_RCVTIMEO,SO_SNDTIMEO),而重试的时间采用指数退避的方式,即每次重试的时间间隔为上次的2倍。在目前的实现中,首次分组传输与复位信号传输的时间间隔为9分钟。 3. 往返时间RTT的测量 平滑的RTT估计器:R=alpha*R+(1-alpha)*M,其中alpha=0.9, M是ACK测量到的RTT 重传超时时间的计算: 最初RTO=R*beta, beta=2,但该方法在RTT变化很大时会引起不必要的重传
当一个超时和重传发生时,在重传数据的确认最后到达之前不能更新RTT估计器,因为我们不知道ACK对应哪次传输。并且,由于数据重传,RTO已经得到一
个指数退避,下次传输的时候使用这个退避后的RTO。对一个没有被重传的报文段而言,除非收到了一个确认,否则不计算新的RTO。 慢启动算法是在一个连接上发起数据流的方法,但有时分组回达到中间路由的极限。拥塞避免算法是一种处理丢失分组的方法。该算法假设分组由于损坏引起的丢失是非常少的,因此分组丢失就意味着源主机和目的主机的某处网络发生了拥塞。 有两种分组丢失的指示:发生超时、接收到重复的确认。 拥塞避免算法通常与慢启动算法同时实现,它们需要对每个连接维护两个变量:拥塞窗口cwnd和慢启动门限ssthresh。这样,算法的过程如下: 慢启动算法初始设置 cwnd为1个报文段,此后每收到一个确认就加 1。这会使窗口按指数方式增长:发送1个报文段,然后是2个,接着是4个……。 拥塞避免算法要求每次收到一个确认时将 cwnd增加1 /cwnd。与慢启动的指数增加比起来,这是一种加性增长(additive increase)。我们希望在一个往返时间内最多为cwnd增加1个报文段(不管在这个RT T中收到了多少个ACK),然而慢启动将根据这个往返时间中所收到的确认的个数增加cwnd。 术语“慢启动”并不完全正确。它只是采用了比引起拥塞更慢些的分组传输速率,但在慢启动期间进入网络的分组数增加的速率仍然是在增加的。只有在达到ssthresh拥塞避免算法起作用时,这种增加的速率才会慢下来。 一个示例图: 6. 快速重传算法 拥塞避免算法的修改建议1 9 9 0年提出 [Jacobson 1990b]。 7. TCP连接对ICMP差错的处理 (1)ICMP源站抑制差错:将拥塞窗口cwnd设为1个报文段大小发起慢启动,但是慢启动门限ssthresh没有变化; 8. 重新分组 当tcp重传的时候,不一定要重新传输相同的报文段。实际上,TCP允许进行重新分组而发送一个较大的报文段,这有助于提升性能。 |
|
来自: xn00 > 《TCP/IP详解》