当前TCP缓冲区配置由全局套接字限制(net.core.rmem_max/wmem_max等)和TCP专属设置(net.ipv4.tcp_rmem/wmem)共同决定,前者为绝对上限,后者支持动态调整;可通过sysctl或/proc/sys查看,运行时用ss -i或getsockopt获取实际值。

直接查看当前 TCP 缓冲区配置,主要看两组参数:一组是全局套接字级限制(影响所有协议),另一组是 TCP 协议专属设置(更精细控制)。两者共同决定实际可用的缓冲区大小。
查看全局接收/发送缓冲区限制
这些参数设定了单个 socket 的 绝对上限,应用层调用 setsockopt 时不能超过它们:
-
net.core.rmem_max:接收缓冲区最大值(字节) -
net.core.wmem_max:发送缓冲区最大值(字节) -
net.core.rmem_default:新 socket 默认接收缓冲区大小 -
net.core.wmem_default:新 socket 默认发送缓冲区大小
执行命令:
sysctl net.core.rmem_max net.core.wmem_max net.core.rmem_default net.core.wmem_default
或直接读文件:
cat /proc/sys/net/core/rmem_max /proc/sys/net/core/wmem_max /proc/sys/net/core/rmem_default /proc/sys/net/core/wmem_default
查看 TCP 协议专用缓冲区设置
这组参数控制 TCP 连接自身的缓冲区行为,格式为“最小值 默认值 最大值”,单位字节:
-
net.ipv4.tcp_rmem:TCP 接收缓冲区(对应 SO_RCVBUF) -
net.ipv4.tcp_wmem:TCP 发送缓冲区(对应 SO_SNDBUF)
执行命令:
sysctl net.ipv4.tcp_rmem net.ipv4.tcp_wmem
或:
cat /proc/sys/net/ipv4/tcp_rmem /proc/sys/net/ipv4/tcp_wmem
注意:内核会根据网络状况在“最小”和“最大”之间动态调整,默认值仅作初始参考。
查看当前生效的实际 socket 缓冲区大小
对运行中的 TCP 连接,可查其实际分配的缓冲区(需 root 或进程权限):
- 用
ss -i查单个连接的接收/发送队列与窗口信息(含当前 rmem/wmem) - 用
ss -tuln | grep :端口定位连接后,再结合/proc/net/{tcp,tcp6}中的sk地址查详细状态(较复杂) - 程序内用
getsockopt(..., SO_RCVBUF, ...)获取已设置值(注意:返回值通常是设置值的两倍,因内核预留管理开销)
额外提醒
修改后的值是否生效,取决于是否满足约束:
- 应用层设置
SO_RCVBUF时,若指定值 >net.core.rmem_max,会被截断为该上限 - 若指定值太小(如小于 256 字节),内核会自动提升到最小允许值
-
net.ipv4.tcp_rmem的“最大值”不能超过net.core.rmem_max,否则启动时会被静默修正


















