1.含义
- rto(Retransmission Timeout ),即重传超时时间
- srtt,利用指数加权移动平均的方式估算rtt值
- rttval,对rtt平均偏差的估计
2.计算方式
static void ikcp_update_ack(ikcpcb *kcp, IINT32 rtt)
{
IINT32 rto = 0;
if (kcp->rx_srtt == 0) {
kcp->rx_srtt = rtt;
kcp->rx_rttval = rtt / 2;
} else {
long delta = rtt - kcp->rx_srtt;
if (delta < 0) delta = -delta;
kcp->rx_rttval = (3 * kcp->rx_rttval + delta) / 4;
kcp->rx_srtt = (7 * kcp->rx_srtt + rtt) / 8;
if (kcp->rx_srtt < 1) kcp->rx_srtt = 1;
}
rto = kcp->rx_srtt + _imax_(kcp->interval, 4 * kcp->rx_rttval);
kcp->rx_rto = _ibound_(kcp->rx_minrto, rto, IKCP_RTO_MAX);
}
- 报文从发出到收到 ACK 经过的时间应为一个 RTT,如果某个报文在一个 RTT 内未收到 ACK, 说明它很有可能丢包了。因此 RTO 应该与 RTT 呈正相关, 且应高于 RTT 以容忍一定程度的抖动。
- srtt = srtt * 7/8+ rtt * 1/8,srtt初始值=rtt
- rttval = rttval * 3/4 + |rtt-srtt| * 1/4,rttval初始值=rtt / 2
- rto = srtt + max(4 * rttval, interval),kcp中interval=100
3.参考