skywind3000 / kcp

:zap: KCP - A Fast and Reliable ARQ Protocol

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于cwnd的更新

chenhongquan opened this issue · comments

commented

请教一个问题:在ikcp_input中,最后进行了拥塞窗口的更新:
if (_itimediff(kcp->snd_una, prev_una) > 0) {
if (kcp->cwnd < kcp->rmt_wnd) {
IUINT32 mss = kcp->mss;
if (kcp->cwnd < kcp->ssthresh)
{
kcp->cwnd++;
kcp->incr += mss; /* 可以发送的最大数据量 */
}
else
{
if (kcp->incr < mss)
kcp->incr = mss;

			kcp->incr += (mss * mss) / kcp->incr + (mss / 16);

			if ((kcp->cwnd + 1) * mss <= kcp->incr)
			{
			#if 1
				kcp->cwnd = (kcp->incr + mss - 1) / ((mss > 0)? mss : 1);
			#else
				kcp->cwnd++;
			#endif
			}
		}
		if (kcp->cwnd > kcp->rmt_wnd) {
			kcp->cwnd = kcp->rmt_wnd;
			kcp->incr = kcp->rmt_wnd * mss;
		}
	}
}

这样的话,无论是本次确认了1个packet,还是确认了10个packet,cwnd的改变幅度都是一样的是吗?
另外,cwnd更新方法和tcp基本一致,但增加了一个mss/16项,这有什么意义吗,是不是这样在和TCP抢占的时候增加了几分优势?