Linux/Windows 网络诊断实战:netstat 与 ss 命令完全指南
在运维和开发工作中,排查端口占用、检查服务状态、分析网络连接异常是日常高频任务。netstat(以及其升级版 ss)是跨平台(Linux、macOS、Windows)最核心的网络诊断命令。本文将从参数解析、高频组合、实战筛选到新旧命令对比,帮你一次彻底掌握。
一、netstat 核心作用与适用场景
netstat 即 network statistics(网络统计),其核心功能是:
查询操作系统中所有的网络连接、监听的端口、路由表、网络接口状态、套接字信息,能清晰看到「本机和哪些IP建立了连接、哪个进程占用了哪个端口、哪些端口正在对外提供服务」。
- 适用系统:Linux、macOS、Windows 全兼容,核心参数高度一致。
- 核心定位:排查端口占用、网络连接异常、服务是否启动、是否有异常外联的首选命令。
二、语法格式与参数分类
netstat [选项参数]参数可单字母使用(如 -t),也可组合使用(如 -tulnp,最常用组合)。
第一类:按协议类型筛选
-t:仅显示 TCP 协议连接(HTTP/HTTPS/SSH/MySQL 等)-u:仅显示 UDP 协议连接(DNS/广播/视频流等)-w:显示 RAW 原始套接字(极少用)
第二类:按连接状态筛选(重中之重)
-l(全称 listening):只显示正在监听的端口/套接字。
核心意义:一台服务器的「服务端口」(如nginx的80、ssh的22、mysql的3306)启动后,都会处于LISTEN监听状态,等待客户端连接。执行就能看到本机所有对外提供服务的端口,排查「服务是否启动成功」首选。
第三类:实用补充参数(必加)
-n(全称numeric):以数字形式显示所有信息,不做域名/主机名解析。✅ 生产环境铁律:不加 -n 时 netstat 会尝试解析 IP→域名、端口→服务名,耗时且易出错。加 -n 后速度极快、结果准确、格式统一。-p(全称program):显示每个连接对应的进程 PID 和名称。这是排查“哪个进程占用了端口”的核心参数。⚠️ Linux 下普通用户可能看不到完整进程信息,需加 sudo(如sudo netstat -tulnp)。-a(全称all):显示所有连接状态(LISTEN / ESTABLISHED / TIME_WAIT 等),不加时默认只显示已建立的连接。
三、4 个高频组合命令(建议背下)
组合1:netstat -tulnp 【封神级,最常用】
含义拆解:-t(TCP) + -u(UDP) + -l(监听) + -n(数字) + -p(进程信息)。
核心作用:
查询本机上「所有正在监听的TCP/UDP端口」+「对应的进程信息」
适用场景:检查 Nginx 的 80 端口、MySQL 的 3306 端口、Redis 的 6379 端口是否 LISTEN;快速定位端口被哪个进程占用。典型输出:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5678/nginx
tcp6 0 0 :::3306 :::* LISTEN 9102/mysqld
udp 0 0 0.0.0.0:53 0.0.0.0:* 7890/named组合2:netstat -anpt 【高频,查 TCP 所有连接】
含义:-a(所有) + -n(数字) + -p(进程) + -t(TCP)。核心作用:
查询本机「所有TCP协议的网络连接」,包含:监听状态(LISTEN)、已建立连接(ESTABLISHED)、TIME_WAIT/CLOSE_WAIT等所有状态,同时显示每个连接对应的进程PID/名称。
适用场景:排查大量 TIME_WAIT 堆积、查看 Java 进程是否连接了指定的 MySQL 服务器。
组合3:netstat -anpu 【高频,查 UDP 所有连接】
含义:-a(所有) + -n(数字) + -p(进程) + -u(UDP)。核心作用:
查询本机「所有UDP协议的连接/监听端口」及对应进程
适用场景:查看 DNS 的 53 端口、DHCP 的 67/68 端口是否正常监听。
组合4:netstat -ant 【快速查询,无进程信息】
含义:-a(所有) + -n(数字) + -t(TCP)。核心作用:
快速查询本机所有TCP连接状态,不显示进程信息
适用场景:服务器负载高时快速了解 TCP 连接概况,执行速度最快。
四、netstat + grep 组合筛选(生产环境必杀技)
与 ps -ef | grep xxx 逻辑一致,netstat 的输出可通过管道符 | + grep 精准筛选。
场景1:查询指定端口是否被占用
例如查 8080 或 3306:
# 查8080端口的所有相关连接/监听状态 + 进程信息
netstat -tulnp | grep 8080
# 查3306端口(mysql)是否在监听
netstat -tulnp | grep 3306场景2:查询指定进程占用的所有端口
例如查 nginx、java、mysql:
netstat -tulnp | grep nginx
netstat -tulnp | grep java
netstat -tulnp | grep mysql场景3:查询指定连接状态
排查大量 TIME_WAIT 或 CLOSE_WAIT:
# 查看所有已建立的TCP连接
netstat -ant | grep ESTABLISHED
# 查看所有TIME_WAIT状态的TCP连接(这类连接过多会占用端口资源)
netstat -ant | grep TIME_WAIT五、常见连接状态解释(运维必懂)
执行 netstat -anpt 会看到 STATE 列,以下是高频状态:
- LISTEN:监听状态,服务已启动,正常等待客户端连接。
- ESTABLISHED:已建立连接,正在传输数据。
- TIME_WAIT:连接已断开,系统保留一段时间(默认 60 秒),少量正常,大量则占用端口资源。
- CLOSE_WAIT:对方已断开,但本机程序未主动关闭,大量出现表示程序有 bug(未释放连接)。
- SYN_RECV:正在三次握手中间状态,大量出现可能是 SYN 洪水攻击。
六、netstat vs ss 命令(必知)
为什么说 netstat 过时了?
netstat 是传统命令,Linux 内核 2.6.25 后推出了性能更强的 ss(socket statistics)。二者的关系是:
是 的「升级版+替代版」,功能完全覆盖netstat,且执行速度更快、占用资源更少、支持的参数更多。
核心区别
- 性能差异:当服务器有数万连接时,netstat 从 /proc 读取数据会很慢;ss 直接读取内核的 tcp_hashinfo,速度快百倍以上。
- 功能差异:ss 支持更多高级筛选(如按连接数、端口范围),能显示更多内核级信息。
- 兼容性:netstat 在部分精简系统(如 Alpine)中默认未安装,而 ss 自带。
无缝替换写法
ss 参数与 netstat 高度相似,推荐生产环境优先用 ss:
# netstat -tulnp 等价替换(推荐,速度超快)
ss -tulnp
# netstat -anpt 等价替换
ss -anpt
# 筛选指定端口
ss -tulnp | grep 8080总结:该用哪个?
- ✅ 日常学习 / Windows 系统:放心用 netstat,兼容性无敌。
- ✅ Linux 生产环境 / 高并发服务器:优先用 ss,性能碾压。
- ✅ 面试必答:ss 是 netstat 的替代命令,性能更好。
七、Windows 系统中的 netstat 用法
netstat 在 Windows 中完全通用,仅两点差异:
- Windows 没有 -p 参数,改用 -o 参数显示进程 PID。
- 查看进程名称需结合任务管理器(详细信息→PID 列)。
Windows 高频写法:
# 查看所有监听的TCP/UDP端口 + PID
netstat -tulno
# 查指定端口(如8080)
netstat -tulno | findstr 8080八、全文核心知识点总结
netstat 是网络状态查询命令,查端口、连接、进程占用,Linux/Windows 通用。核心参数:-t(TCP)、-u(UDP)、-l(监听)、-n(数字显示,必加)、-p(进程PID)、-a(所有连接);封神组合:netstat -tulnp → 查所有监听端口+进程,必背;精准筛选:netstat -tulnp | grep 端口/进程名 → 生产环境必杀技;替代命令:ss 是 netstat 的升级版,参数几乎一致,ss -tulnp 无缝替换;核心状态:LISTEN(监听)、ESTABLISHED(已连接)、TIME_WAIT(等待关闭)。
掌握 netstat 和 ss,配合 ps、grep 等命令,能解决绝大多数进程与网络排查问题。无论是排查 Python 写的 Web 服务端口、调试 C++ 开发的网络组件、还是监控 Go 或 TypeScript 微服务的连接状态,这套技能都是必备的。希望本文能帮你彻底掌握 netstat 命令。
netstat -lssnetstat
---
浙公网安备 33010602011771号