Skip to content

关于源码中的慢启动和拥塞避免算法 #402

@yufeige4

Description

@yufeige4

下面代码中,在慢启动条件下(cwnd<sstresh),为什么窗口大小是线性增长而非指数级增长,而在非慢启动条件下却是指数级增长,是不是写反了:
// 收到了未确认过的数据包 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 { // incr最小值为一个单元的数据大小 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; } } }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions