网络分析模型五





















































































🧠 Linux 网络缓冲区与内核参数全景图文手册(含作用范围)
一、总览结构图(从应用到驱动)
┌────────────────────────────────────┐
│ 用户空间 │
│ 应用程序 write()/send()/read() │
│ │
└──────────────┬─────────────────────┘
│ 系统调用
▼
┌────────────────────────────────────┐
│ 内核 socket 层 │
│ Send buffer ←→ Recv buffer │
│ ↑受 net.core.{rmem,wmem}_max 限制 │
│ ↑应用 setsockopt(SO_SNDBUF/RCVBUF) │
└──────────────┬─────────────────────┘
│
▼
┌────────────────────────────────────┐
│ TCP 协议栈层 │
│ 自适应缓冲区动态调整: │
│ tcp_rmem = [min, default, max] │
│ tcp_wmem = [min, default, max] │
│ 受 net.core.{rmem,wmem}_max 约束 │
└──────────────┬─────────────────────┘
│
▼
┌────────────────────────────────────┐
│ 网络设备/驱动层 │
│ 网卡发送队列(tx_queue_len) │
│ 网卡接收环形缓冲(rx ring buffer) │
│ 驱动统计 ethtool -S 查看 │
└────────────────────────────────────┘
二、缓冲区分类、职责与作用范围
| 层级 | 缓冲区类型 | 作用描述 | 典型内核参数 | 作用范围 |
|---|---|---|---|---|
| 用户空间 | 应用缓冲区 | 用户数据区,通过系统调用送往内核 | 无 | 单个应用线程/进程 |
| 内核 socket | send/recv buffer | 应用写入数据后暂存于此,等待发送/接收 | net.core.rmem_max / net.core.wmem_max | 单个 socket(受 core max 限制) |
| TCP 层 | 自适应缓冲区 | 根据带宽延迟(BDP)动态调整窗口 | net.ipv4.tcp_rmem / net.ipv4.tcp_wmem | 单个 TCP 连接动态调整 |
| 驱动层 | 网卡队列缓冲 | 实际发送到物理网卡前的硬件队列 | tx_queue_len、ethtool、/proc/net/dev | 网卡全局(所有 socket 共享) |
| 硬件 | 网卡 DMA buffer | 硬件直接搬运数据区 | 驱动控制,不可调 | 网卡全局 |
三、关键内核参数详解(含作用范围)
1️⃣ 全局 socket 硬上限(作用范围:单个 socket)
| 参数 | 默认值 | 含义 | 作用范围 |
|---|---|---|---|
net.core.rmem_max |
212992 | 所有 socket 接收缓冲区最大值 | 单个 socket |
net.core.wmem_max |
212992 | 所有 socket 发送缓冲区最大值 | 单个 socket |
net.core.rmem_default |
212992 | 默认接收 buffer | 单个 socket |
net.core.wmem_default |
212992 | 默认发送 buffer | 单个 socket |
⚙️ 受应用
setsockopt()调整限制。
2️⃣ TCP 自适应参数(作用范围:单个 TCP 连接)
| 参数 | 默认值 | 含义 | 作用范围 |
|---|---|---|---|
net.ipv4.tcp_rmem |
4096 87380 6291456 |
TCP 接收缓冲区 [min default max] |
单个 TCP 连接动态增长 |
net.ipv4.tcp_wmem |
4096 16384 4194304 |
TCP 发送缓冲区 [min default max] |
单个 TCP 连接动态增长 |
实际最大 buffer = min(tcp_*_max, net.core.*mem_max)
3️⃣ UDP/RAW 套接字(作用范围:单个 socket)
-
仅受
rmem_max/wmem_max限制 -
无自适应机制
-
每个 socket 的上限 =
net.core.*_max
4️⃣ 网卡层缓存与队列(作用范围:网卡全局)
| 参数/命令 | 含义 | 作用范围 |
|---|---|---|
/sys/class/net/eth0/tx_queue_len |
网卡驱动层发送队列长度 | 网卡全局,所有 socket 共享 |
ethtool -g eth0 |
查看网卡 ring buffer 大小(驱动级) | 网卡全局 |
ethtool -S eth0 |
查看 tx/rx packet 数量、drop 情况 | 网卡全局 |
/proc/net/dev |
每个设备的包统计计数 | 网卡全局 |
四、查看与排查方法汇总
| 层级 | 命令 | 用途 | 作用范围 |
|---|---|---|---|
| 系统全局 | `sysctl -a | grep mem_max` | 查看 socket 全局上限 |
| TCP 动态 | sysctl net.ipv4.tcp_rmem |
查看自适应配置 | 单个 TCP 连接 |
| socket 实时 | ss -t -a -m |
查看每个连接缓冲区使用 | 单个 socket / TCP 连接 |
| TCP 队列 | cat /proc/net/tcp |
查看 tx/rx 队列长度 | 单个 TCP 连接 |
| UDP 溢出 | `dmesg | grep UDP` | 检查 UDP overflow |
| 网卡队列 | ethtool -S eth0 |
检查 tx queue、drop 情况 | 网卡全局 |
五、判断缓存区是否满
1️⃣ TCP 缓冲区(单个 socket / TCP 连接)
ss -t -a -m | grep 443
-
r=接收 buffer 当前使用字节 -
w=发送 buffer 当前使用字节 -
接近 tcp_rmem[2]/tcp_wmem[2] → 缓冲区可能满
2️⃣ UDP 缓冲区(单个 socket)
ss -u -a -m
dmesg | grep UDP
-
Recv-Q 长时间增长或出现 overflow → 缓冲区不足
3️⃣ 网卡队列(网卡全局)
ethtool -S eth0 | egrep 'tx_errors|rx_dropped'
-
tx_errors / rx_dropped 增长 → 驱动或硬件队列满
六、动态调优示例(作用范围说明)
# 全局上限 (每个 socket 最大值)
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
# TCP 自适应 (单个 TCP 连接动态增长)
sysctl -w net.ipv4.tcp_rmem="4096 131072 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 131072 16777216"
# 网卡队列 (网卡全局)
ip link set eth0 txqueuelen 5000
七、调优建议表(含作用范围)
| 场景 | 配置 | 作用范围 | 备注 |
|---|---|---|---|
| 高并发 Web | rmem/wmem = 4MB, tcp_*mem = 4K/128K/8M | socket / 单个 TCP 连接 | 小包高并发 |
| 跨机房高 RTT | rmem/wmem = 16MB, tcp_*mem = 16K/256K/16M | socket / 单个 TCP 连接 | 长距离链路 |
| UDP 视频流 | rmem_max/wmem_max = 16MB | 单个 socket | 避免丢包 |
| 日志/大包传输 | tcp_wmem/tcp_rmem 上限调高 | 单个 TCP 连接 | 高吞吐场景 |
八、socket 用户态 vs 内核态关系图(含作用范围)
用户态 buffer (应用内存)
│
▼
write()/send()
│
▼
┌────────────────────┐
│ 内核态 socket 缓冲区 │ ← SO_SNDBUF / SO_RCVBUF (单个 socket)
│ 受 core.*mem_max 限制 │
└────────────────────┘
│
▼
TCP 自适应层 (tcp_*_mem, 单个 TCP 连接)
│
▼
驱动发送队列 (tx queue, 网卡全局)
│
▼
网卡 DMA 缓冲 (硬件层, 网卡全局)
✅ 现在文档完整覆盖:
-
缓冲区类型、作用、作用范围
-
内核参数、默认值、作用范围
-
查看与排查方法
-
动态调优示例
-
TCP/UDP/网卡分层关系
浙公网安备 33010602011771号