/proc 是 Linux 内核网络连接状态的最轻量、最可靠入口,直接反映实时内存数据;其 /proc/net/ 下各文件(tcp、udp、unix、nf_conntrack)分别暴露 TCP/UDP/Unix 套接字及连接跟踪信息,支持精准过滤与统计。

Linux 网络协议栈的连接状态,直接反映在内核内存中,而 /proc 就是通往这些实时数据的最轻量、最可靠入口。它不依赖任何外部命令,无需安装额外工具,也不受用户态程序缓存或权限限制干扰(除 root 权限要求外),是排查连接异常、统计连接数、验证服务监听状态的第一手依据。
/proc/net/ 下的核心连接文件
所有活跃和监听中的网络连接,都以文本形式暴露在 /proc/net/ 目录下:
-
/proc/net/tcp 和 /proc/net/tcp6:分别列出 IPv4 和 IPv6 的 TCP 连接,含 LISTEN、ESTABLISHED、TIME_WAIT、CLOSE_WAIT 等状态;第 4 列为十六进制状态码(如
0A表示 LISTEN,01表示 ESTABLISHED) - /proc/net/udp 和 /proc/net/udp6:UDP 套接字列表,虽无连接状态,但可确认端口是否已绑定、接收队列是否有数据
- /proc/net/unix:Unix 域套接字,显示本地进程间通信路径、类型(STREAM/SEQPACKET)、引用计数及连接状态(如 CONNECTED、LISTENING)
-
/proc/net/nf_conntrack(或
/proc/net/ip_conntrack,取决于内核版本):netfilter 连接跟踪表,记录 NAT、防火墙规则下所有有状态连接(包括双向地址/端口、超时剩余秒数、[ASSURED] 标记等)
快速提取关键连接信息
用标准 shell 工具即可完成精准过滤与统计,无需解析复杂输出:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 统计当前 ESTABLISHED TCP 连接数:
awk '$4 == "01" {count++} END {print count+0}' /proc/net/tcp - 查看所有监听在 80 或 443 端口的进程(需配合 /proc/[pid]/fd):
grep -E ':0050|:01BB' /proc/net/tcp | awk '{print $2,$4}'(端口号为十六进制) - 筛选特定 IP 的 conntrack 条目:
sudo cat /proc/net/nf_conntrack | grep 'src=10.0.1.5' - 检查某个进程打开的 socket:先查 PID,再读
/proc/[pid]/fd/中指向socket:[inode]的符号链接,最后用 inode 反查/proc/net/{tcp,udp,unix}对应行
理解字段含义比记住命令更重要
每类文件的列顺序固定,但含义需对照内核文档确认。例如 /proc/net/tcp 前几列依次为:
- sl:序号(仅显示用)
- local_address:格式为
IPADDR:PORT(十六进制,如0100007F:0016表示 127.0.0.1:22) - rem_address:远程地址,全零表示监听
- st:状态码(十六进制)
- tx_queue / rx_queue:发送/接收队列字节数,非零可能表示拥塞或接收未处理
- uid:创建该 socket 的用户 ID
直接读取这些字段,比依赖 netstat 的格式化输出更能避免歧义——比如 netstat 不显示 queue 长度,而 proc 文件里始终存在。
注意权限与模块加载
部分文件需要 root 权限才能读取:
-
/proc/net/nf_conntrack和/proc/net/ip_conntrack默认仅 root 可见;若文件不存在,可能是nf_conntrack模块未加载,执行sudo modprobe nf_conntrack后重试 -
/proc/[pid]/fd/下的内容对非所属用户不可见,即使有 root 权限,也需确保目标进程未被 ptrace 保护或处于 dumpable=0 状态 - 所有 /proc 文件均为只读虚拟文件,内容随内核状态实时更新,无缓存延迟

















