tcp的拥塞控制主要有4个算法分别为慢启动、拥塞避免、快重传、快恢复。
- 慢启动:刚开始不知道网络能承受多少数据,所以初始的cwnd(拥塞窗口)为1MSS或者10MSS(新标准) 每收到一个ACK,cwnd += 1MSS(指数增长),当达到阈值ssthresh,进入拥塞避免阶段
- 拥塞避免:防止窗口增长过快导致拥塞。进入该阶段后,增长变平缓,不再指数增长,改为线性增长。
- 快速重传:不用等RTO超时就快速重传丢包收到 3 个重复 ACK → 判断该包丢失 → 快速重传 如果连续接收2个相同ACK还可能是因为顺序出错导致的。 4.快速恢复:丢包后不进入慢启动阶段,ssthresh = cwnd / 2, cwnd = ssthresh,进入拥塞避免阶段。
如果发生超时导致拥塞会直接进入慢启动状态。同时ssthresh = cwnd / 2
ssthresh 是一个阈值,当拥塞窗口 cwnd 小于它时使用慢启动;大于等于它时使用拥塞避免。
MSS(Maximum Segment Size,最大报文段长度) 是 TCP 数据部分的最大大小,不包括 TCP 头和 IP 头。
| 名称 | 所属层 | 说明 |
|---|---|---|
| Message(报文) | 应用层 | App 产生的数据,如 HTTP 请求报文 |
| Segment(报文段) | 传输层 | TCP 封装后的数据单元(TCP 头 + 数据) |
| Packet(数据包) | 网络层 | IP 头 + TCP 段 |
| Frame(帧) | 数据链路层 | MAC 头 + IP 包 |