kcp协议中rto计算方式

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.参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值