超时与重传
对于每个连接,TCP管理4个定时器:
- 重传定时器
- 坚持(persist)定时器
- 保活(keepalive)定时器
- 2MSL定时器
指数退避:同一分组的重传时间间隔成指数增长(1.5、3、6、12、24、48、64、...秒)
RTO(Retransmission TimeOut 重传超时时间):进行下一次重传的等待时间
RTO的值根据RTT历史值和最新测量值来动态更新(公式省略)
重传多义性问题:如果某分组重传多次,返回的ACK是对哪次的确认?这种情况下无法确定起始时间,也就无法计算RTT,按照Karn算法不更新RTO值,除非没被重传的分组收到确认;
RTT是如何计算的?
TCP设定固定时长(500ms)的定时器,并不断累计定时次数(因此RTT的值是500ms的倍数)