kcp icon indicating copy to clipboard operation
kcp copied to clipboard

关于cwnd的更新

Open chenhongquan opened this issue 2 years ago • 0 comments

请教一个问题:在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抢占的时候增加了几分优势?

chenhongquan avatar Jun 06 '22 05:06 chenhongquan