﻿# 阶段 3：TCP 内核参数瓶颈（Day 7-9）

> **撞上的问题**：FD 瓶颈修复后，连接数跑到 3 万时开始出现建连超时，部分连接建不起来，已有的连接偶尔出现丢包。

## 背景

10K 连接稳定后，继续向上爬升。这时候操作系统默认的 TCP 参数不够用了。

## 每日概览

| 天 | 主题 | 关键操作 | 产出 |
|:--:|------|------|------|
| Day 7 | [建连超时与端口范围](/demos/echo/day-07/README.md) | 3 万连接时出现 `connect()` 超时，发现 `ip_local_port_range` 默认只有 32768-60999（约 2.8 万可用端口） | 端口耗尽现象记录 |
| Day 8 | [TCP 缓冲区与内存](/demos/echo/day-08/README.md) | `tcp_rmem`/`tcp_wmem` 默认值偏小导致吞吐受限，调优缓冲区 | 吞吐对比（优化前 vs 后） |
| Day 9 | [somaxconn 与 SYN 积压](/demos/echo/day-09/README.md) | `net.core.somaxconn` 默认 128，高并发建连时 SYN 队列溢出 | `scripts/03-tcp-kernel-params.sh` |

## 问题诊断路径

```bash
3 万连接 → connect() 超时 → 检查 ip_local_port_range（28000 端口）
→ 扩到 1024-65535 → 超时消失

5 万连接 → 吞吐下降 → 观察 tcp_rmem/tcp_wmem（默认 128KB）
→ 调大缓冲区 → 吞吐恢复

高并发建连 → ss -s 看到 SYN_RECV 堆积 → somaxconn=128 太小
→ 调高 somaxconn → SYN 队列正常
```

## 完工验证清单

- [ ] `ip_local_port_range` = 1024 65535
- [ ] `somaxconn` ≥ 65535
- [ ] TCP 读写缓冲区 ≥ 4MB
- [ ] 5 万连接稳定运行

> **一句话总结**：FD 只是第一关，TCP 内核参数是第二关——端口范围、缓冲区大小、监听队列长度，每个默认值在高并发下都是瓶颈，但你必须先撞上才能理解为什么需要改它们。

