简介
主要目的是为了检测由RTO偏小引起的伪RTO。主要算法是:
当重传定时器超时后,记这时候的snd.nxt为highmark。然后看收到的两个确认是否符合这个要求:ack > snd.una && ack < highmark,如果都符合,那么就宣布这是个伪RTO。
FRTO先重传第一个未被确认的包,并且在收到第一个确认后做如下判断:a. 如果这个ack确认了新的数据但是序列号小于highmark,那么再发2个新的数据包,等收到第二个确认再来判断。b.这个ack是个重复确认或者大于等于highmark,说明原来的包是真丢了,那么说明不是一个伪FRTO,还是进入到传统的RTO恢复当中去。对于收到的第二个确认,也是做和第一个确认相同的判断,只不过对符合要求的情况不需要在发包了,直接宣布是伪RTO。
实现
F-RTO is implemented (mainly) in fourfunctions:
* -tcp_use_frto() is used to determine if TCP is can use F-RTO
* -tcp_enter_frto() prepares TCP state on RTO if F-RTO is used, it is
* called when tcp_use_frto() showed green light