TCP重传类型
基于RTO定时器的重传,每个连接维护一个RTO超时定时器
基于ACK报文结构顺序的重传,快速重传
改进快速重传:早期重传
RTT引入的问题由karn算法,Jacobson算法解决
FACK(快速ack):通过记录SACK块中系列号最大(forward-most)的SACK块来推测丢包信息,loss probe触发的SACK块信息与ack number之间相隔3个以上(包括3个)TCP报文的时候就可以触发基于FACK的快速重传。
thin stream:如果当前没有处于初始的慢启动过程并且已经发出去的还没有收到ACK的数据包的个数小于4。
ER(早期重传)触发快速重传必须同时满足下面两个条件:
发出去的但是还没有收到ACK确认的TCP报文个数(假设为oseg)小于4
缓存中没有未发送数据或者发送窗口受限不能发送新数据,如果允许发送新数据的话就可以进一步触发dup ACK来达到门限了。
当满足上面两个条件时候,如果这个tcp连接未使能SACK的时候,用来触发ER的dup ACK门限必须降低为:ER_thresh >= oseg – 1(>=为增强ER,=为ER)
当这个TCP连接支持SACK的时候,触发ER的条件则变为,(oseg-1)个TCP包已经被SACK确认,dup ACK门限不变。
ER解决dupack较少,无法触发快速重传的问题。
TLP:PTO定时器=2*SRTT,一般小于RTO定时器
tlp应用场景:尾包丢失或发送窗口内全部包丢失,即无法发包了,此时依赖rto超时影响体验,可以发送尾包探测获取ack,从而触发快速重传。
在同时打开FACK和TLP的情况下,当loss probe触发的SACK块信息与ack number之间相隔3个以下(不包括3个)TCP报文的时候就可以触发基于增强ER的快速重传。
TLP(需打开SACK)结合ER解决了任意程度的尾丢包:
RACK:如果发送端收到的确认包中的SACK选项确认收到了一个数据包,那么在这个数据包之前发送的数据包要么是在传输过程中发生了乱序,要么是发生了丢包。(暂不分析)
虚假重传探测算法:FRTO、DSACK
FRTO:在RTO超时重传了第一个数据包之后,FRTO会检测之后收到的ACK报文来判断刚刚的超时重传是否是虚假重传
检测方式:检测RTO超时重传之后的两个ack信息,如果ack确认了新信息,说明报文延迟到达对方,RTO超时是误判,进入RTO处理,否则进入慢启动丢包处理。