一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

详解 netstat 显示所有已建立的 TCP 连接状态

时间:2026-07-15 19:36:45 编辑:袖梨 来源:一聚教程网

最直接有效的方式是使用 netstat -tn,因为它仅筛选 TCP 协议、以数字形式显示地址端口,并默认只输出 ESTABLISHED 状态连接,避免监听或关闭状态干扰,结果清晰高效。

要查看所有已建立的 TCP 连接,最直接有效的方式是使用 netstat -tn,它只显示处于 ESTABLISHED 状态的活跃连接,不包含监听端口或未完成握手的连接,结果清晰、干扰少。

为什么用 -tn 而不是 -a 或 -t

参数组合决定输出范围和可读性:

  • -t:仅筛选 TCP 协议(排除 UDP 等无关协议)
  • -n:以数字形式显示 IP 和端口(跳过 DNS 解析,速度快、结果稳定)
  • 不加 -l(监听)或 -a(全部),就自动过滤掉 LISTEN、TIME_WAIT、CLOSE_WAIT 等非 ESTABLISHED 状态

若用 netstat -anetstat -t,会混入大量监听中或已关闭的连接,需额外用 grep ESTABLISHED 筛选,反而多一步且易漏匹配。

识别 ESTABLISHED 连接的关键字段

典型输出如下:

tcp 0 0 192.168.1.100:22 192.168.1.200:49152 ESTABLISHED
tcp 0 0 192.168.1.100:3306 10.0.0.5:51234 ESTABLISHED
  • Proto:协议类型,此处为 tcp
  • Local Address:本机 IP:端口(如 192.168.1.100:22 表示本机 SSH 服务正与对方通信)
  • Foreign Address:对端 IP:端口(如 192.168.1.200:49152 是客户端临时端口)
  • State:必须为 ESTABLISHED,表示三次握手已完成,数据双向传输中

需要关联进程时加 -p 参数

仅看连接不够?想确认哪个程序在通信?加上 -p(需 root 权限):

  • 命令:sudo netstat -tnp | grep ESTABLISHED
  • 输出末尾会多一列 PID/Program name,例如 1234/sshd5678/mysqld
  • 注意:普通用户执行 -p 会提示 “can't resolve port number”,必须用 sudo

快速排查常见问题的小技巧

实际运维中常结合管道提升效率:

  • 查某个服务的对外连接(如 MySQL):sudo netstat -tnp | grep :3306 | grep ESTABLISHED
  • 统计当前活跃连接数:netstat -tn | grep ESTABLISHED | wc -l
  • 按远程 IP 归类排序:netstat -tn | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

热门栏目