面试官提问:
请简要介绍一下 TCP 中的拥塞控制机制,特别是拥塞窗口(cwnd)的含义以及慢启动过程。
应聘者参考回答:
TCP 拥塞控制的核心目的是防止发送方因发送速率过快而造成网络拥塞。为此,TCP 在发送方引入了一个**拥塞窗口(Congestion Window,简称 cwnd)**的概念。
拥塞窗口的定义与作用:
- 拥塞窗口
cwnd
是发送方根据网络拥塞状况动态调整的窗口大小,用于限制发送速率; - 与接收方通告的接收窗口不同,
cwnd
反映的是发送方对网络当前可承受能力的估计; - 实际发送窗口 =
min(cwnd, rcv_wnd)
,即取拥塞窗口和接收窗口中的较小值作为可发送数据上限。
拥塞控制的主要算法:慢启动(Slow Start)
- 初始阶段:
cwnd
初始化为 1 个 MSS(最大报文段长度);- 每收到一个 ACK,
cwnd
增加 1 个 MSS,即指数增长。
- 示例流程:
- 第 1 次发送:发送 1 个数据段,收到 ACK 后 cwnd = 2;
- 第 2 次发送:发送 2 个数据段,收到 2 个 ACK 后 cwnd = 4;
- 第 3 次发送:发送 4 个数据段,cwnd = 8;
- 以此类推,指数级增长直到到达慢启动阈值(ssthresh)。
- 之后进入拥塞避免阶段(Congestion Avoidance),cwnd 增长转为线性,以防过度增加导致拥塞。
特点与总结:
- 拥塞窗口是发送方使用的控制手段,与接收方的通告窗口互补;
- 拥塞控制适应网络实际带宽状况,避免链路过载;
- 通过“慢启动”实现快速探测可用带宽,后续通过线性增长稳步扩大发送能力。
该机制是 TCP 协议实现可靠性与公平性的关键之一,确保网络稳定运行。
😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。