Linux/Window如何查网络连接/端口/套接字信息?最核心使用的是netstat命令,运维/开发必用,我会把它的核心用法、所有高频参数、实用组合命令、和ss命令的区别全部讲透,内容条理清晰,看完就能直接用
文章目录
- [✅ 一、netstat 核心作用](#✅ 一、netstat 核心作用)
- [✅ 二、netstat 语法格式](#✅ 二、netstat 语法格式)
- [✅ 三、netstat 高频核心参数(必记,按用途分类,好理解)](#✅ 三、netstat 高频核心参数(必记,按用途分类,好理解))
-
- [✔ 第一类:按「协议类型」筛选(只查TCP/UDP连接)](#✔ 第一类:按「协议类型」筛选(只查TCP/UDP连接))
- [✔ 第二类:按「连接状态」筛选(最核心,重中之重)](#✔ 第二类:按「连接状态」筛选(最核心,重中之重))
- [✔ 第三类:实用补充参数(必加,提升查询价值)](#✔ 第三类:实用补充参数(必加,提升查询价值))
- [✅ 四、netstat 「最常用的4个组合命令」(重中之重,背下来!)](#✅ 四、netstat 「最常用的4个组合命令」(重中之重,背下来!))
-
- [✅ 组合1:`netstat -tulnp` 【⭐⭐⭐⭐⭐ 封神级,最最常用,没有之一!】](#✅ 组合1:
netstat -tulnp【⭐⭐⭐⭐⭐ 封神级,最最常用,没有之一!】) - [✅ 组合2:`netstat -anpt` 【⭐⭐⭐⭐ 高频,查TCP所有连接】](#✅ 组合2:
netstat -anpt【⭐⭐⭐⭐ 高频,查TCP所有连接】) - [✅ 组合3:`netstat -anpu` 【⭐⭐⭐ 高频,查UDP所有连接】](#✅ 组合3:
netstat -anpu【⭐⭐⭐ 高频,查UDP所有连接】) - [✅ 组合4:`netstat -ant` 【⭐⭐⭐ 快速查询,无进程信息】](#✅ 组合4:
netstat -ant【⭐⭐⭐ 快速查询,无进程信息】)
- [✅ 组合1:`netstat -tulnp` 【⭐⭐⭐⭐⭐ 封神级,最最常用,没有之一!】](#✅ 组合1:
- [✅ 五、和你上一条命令联动:`netstat` + `grep` 组合筛选(超实用!)](#✅ 五、和你上一条命令联动:
netstat+grep组合筛选(超实用!)) -
- [✔ 场景1:查询「指定端口」是否被占用/监听(最常用)](#✔ 场景1:查询「指定端口」是否被占用/监听(最常用))
- [✔ 场景2:查询「指定进程」占用的所有端口](#✔ 场景2:查询「指定进程」占用的所有端口)
- [✔ 场景3:查询「指定连接状态」的所有连接](#✔ 场景3:查询「指定连接状态」的所有连接)
- [✅ 六、netstat 输出中「常见的连接状态」解释(运维必懂)](#✅ 六、netstat 输出中「常见的连接状态」解释(运维必懂))
- [✅ 七、重要补充:`netstat` vs `ss` 命令(必知)](#✅ 七、重要补充:
netstatvsss命令(必知)) -
- [✔ 为什么很多人说「netstat 过时了」?](#✔ 为什么很多人说「netstat 过时了」?)
- [✔ 核心区别](#✔ 核心区别)
- [✔ 无缝替换:`ss` 对应 `netstat` 的核心写法](#✔ 无缝替换:
ss对应netstat的核心写法) - [✔ 总结:该用哪个?](#✔ 总结:该用哪个?)
- [✅ 八、Windows系统中的 netstat 用法(补充)](#✅ 八、Windows系统中的 netstat 用法(补充))
-
- [Windows 高频写法](#Windows 高频写法)
- [✅ 九、全文核心知识点总结(浓缩精华,方便记忆)](#✅ 九、全文核心知识点总结(浓缩精华,方便记忆))
✅ 一、netstat 核心作用
netstat = network statistics(网络统计),命令的核心功能:
查询操作系统中所有的网络连接、监听的端口、路由表、网络接口状态、套接字信息,能清晰看到「本机和哪些IP建立了连接、哪个进程占用了哪个端口、哪些端口正在对外提供服务」。
✅ 适用系统:Linux、macOS、Windows全兼容 ,核心参数用法基本一致,少量参数有差异(下文会标注)。
✅ 核心定位:排查端口占用、网络连接异常、服务是否启动、是否有异常外联的首选命令。
✅ 二、netstat 语法格式
bash
netstat [选项参数]
参数可以单字母使用 (如-t),也可以组合使用 (如-tulnp,最常用组合,强烈推荐背下来),参数之间无顺序要求。
✅ 三、netstat 高频核心参数(必记,按用途分类,好理解)
✔ 第一类:按「协议类型」筛选(只查TCP/UDP连接)
这类参数用来过滤只显示指定协议的网络连接,是最基础的筛选,必用:
-t:只列出 TCP 协议 的所有连接/监听端口(TCP是可靠传输,绝大多数服务用TCP:http/https/ssh/mysql等)-u:只列出 UDP 协议 的所有连接/监听端口(UDP是无连接传输:dns/广播/视频流等)-w:只列出 RAW原始套接字 相关连接(极少用,一般不用记)
✔ 第二类:按「连接状态」筛选(最核心,重中之重)
-l:全称listening→ 只显示「正在监听」的端口/套接字 核心意义:一台服务器的「服务端口」(如nginx的80、ssh的22、mysql的3306)启动后,都会处于LISTEN监听状态 ,等待客户端连接。执行netstat -l就能看到本机所有对外提供服务的端口,排查「服务是否启动成功」首选。
✔ 第三类:实用补充参数(必加,提升查询价值)
-
-n:全称numeric→ 以「数字形式」显示所有信息,不做域名/主机名解析✅ 核心作用:
- 速度极快:不加
-n时,netstat会尝试把IP解析成域名、把端口号解析成服务名(如80→http),耗时很长; - 结果准确:避免解析失败导致的乱码/错误,生产环境必加
-n,这是铁律! - 格式统一:IP就是IP、端口就是端口,方便后续筛选/查看。
- 速度极快:不加
-
-p:全称program→ 显示每个网络连接对应的「进程PID」和「进程名称」✅ 核心意义:这是
netstat最核心的参数之一 !能直接告诉你「哪个进程占用了哪个端口 」,比如查到端口8080被占用,用-p就能精准定位到是java进程还是tomcat进程,排查「端口占用」的核心参数 。⚠️ 注意:Linux系统中,普通用户执行
-p可能看不到完整进程信息 ,需要加sudo(如sudo netstat -tulnp)才能查看所有进程的PID和名称,Windows无此限制。 -
-a:全称all→ 显示「所有」的网络连接状态 ,包含:监听状态(LISTEN)、已建立连接(ESTABLISHED)、等待连接(CLOSE_WAIT/TIME_WAIT)、关闭状态等,不加-a默认只显示已建立的连接。
✅ 四、netstat 「最常用的4个组合命令」(重中之重,背下来!)
所有参数的核心价值都在组合使用 ,这4个命令覆盖了99%的日常使用场景,优先级从高到低排序,按需使用即可,全部都是生产环境高频用法:
✅ 组合1:netstat -tulnp 【⭐⭐⭐⭐⭐ 封神级,最最常用,没有之一!】
含义拆解
-t(TCP) + -u(UDP) + -l(监听中) + -n(数字显示) + -p(显示进程PID/名称)
核心作用
查询本机上「所有正在监听的TCP/UDP端口」+「对应的进程信息」
适用场景
✅ 检查服务是否启动(如:nginx的80端口、mysql的3306、redis的6379是否处于LISTEN状态)
✅ 快速查看本机所有对外提供的服务端口,以及端口被哪个进程占用
✅ 排查「端口被占用」的问题(比如启动tomcat提示8080被占用,执行这个命令直接定位占用进程)
典型输出示例
bash
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
输出字段说明(从左到右):协议 → 接收队列 → 发送队列 → 本机IP:端口 → 远程IP:端口 → 状态 → PID/进程名
✅ 组合2:netstat -anpt 【⭐⭐⭐⭐ 高频,查TCP所有连接】
含义拆解
-a(所有连接) + -n(数字显示) + -p(进程信息) + -t(TCP协议)
核心作用
查询本机「所有TCP协议的网络连接」,包含:监听状态(LISTEN)、已建立连接(ESTABLISHED)、TIME_WAIT/CLOSE_WAIT等所有状态,同时显示每个连接对应的进程PID/名称。
适用场景
✅ 排查TCP连接异常(如:大量TIME_WAIT连接堆积、有异常的远程IP连接本机)
✅ 查看本机和哪些远程IP建立了TCP连接(比如:本机的java程序是否连接了指定的mysql服务器)
✅ 组合3:netstat -anpu 【⭐⭐⭐ 高频,查UDP所有连接】
含义拆解
-a(所有连接) + -n(数字显示) + -p(进程信息) + -u(UDP协议)
核心作用
查询本机「所有UDP协议的连接/监听端口」及对应进程
适用场景
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 端口:
bash
# 查8080端口的所有相关连接/监听状态 + 进程信息
netstat -tulnp | grep 8080
# 查3306端口(mysql)是否在监听
netstat -tulnp | grep 3306
✔ 场景2:查询「指定进程」占用的所有端口
比如查 nginx、java、mysql 进程对应的端口:
bash
netstat -tulnp | grep nginx
netstat -tulnp | grep java
netstat -tulnp | grep mysql
✔ 场景3:查询「指定连接状态」的所有连接
比如排查是否有大量TIME_WAIT或ESTABLISHED连接堆积:
bash
# 查看所有已建立的TCP连接
netstat -ant | grep ESTABLISHED
# 查看所有TIME_WAIT状态的TCP连接(这类连接过多会占用端口资源)
netstat -ant | grep TIME_WAIT
✅ 六、netstat 输出中「常见的连接状态」解释(运维必懂)
执行netstat -anpt会看到很多STATE(状态)列的值,这些状态是TCP协议的核心,掌握后能排查绝大多数网络连接异常,记住高频的5个即可:
- LISTEN :监听状态 → 本机的端口正在等待客户端连接(服务已启动,正常状态)
- ESTABLISHED :已建立连接 → 本机和远程主机的连接已经成功建立,正在传输数据(正常的业务连接)
- TIME_WAIT :等待关闭 → 连接已经断开,系统会保留该连接一段时间(默认60秒),防止丢包,少量属于正常,大量则会占用端口资源
- CLOSE_WAIT :被动关闭 → 对方已经断开连接,但本机的程序没有主动关闭连接,出现大量该状态=程序有bug(未释放连接)
- SYN_RECV :等待同步 → 正在建立TCP三次握手的中间状态,少量正常,大量则可能是SYN洪水攻击
✅ 七、重要补充:netstat vs ss 命令(必知)
✔ 为什么很多人说「netstat 过时了」?
netstat 是传统的网络查询命令 ,而Linux系统在2.6.25内核之后,推出了一个全新的、性能更强的命令 ss(socket statistics),二者的关系是:
ss是netstat的「升级版+替代版」 ,功能完全覆盖netstat,且执行速度更快、占用资源更少、支持的参数更多。
✔ 核心区别
- 性能差异 :当服务器的网络连接非常多(比如几万/几十万连接)时,
netstat会非常慢(因为它从/proc/net/tcp读取数据,解析耗时),而ss直接读取内核的tcp_hashinfo,速度提升百倍以上。 - 功能差异 :
ss支持更多高级筛选(如按连接数、按端口范围),能显示更多内核级的网络信息。 - 兼容性 :
netstat在部分精简版Linux系统(如Alpine)中默认未安装,而ss是默认自带的。
✔ 无缝替换:ss 对应 netstat 的核心写法
ss 的参数和netstat 高度相似,学会netstat后,ss 几乎零成本上手,推荐的替换写法(生产环境优先用ss):
bash
# netstat -tulnp 等价替换(推荐,速度超快)
ss -tulnp
# netstat -anpt 等价替换
ss -anpt
# 筛选指定端口
ss -tulnp | grep 8080
✔ 总结:该用哪个?
✅ 日常学习/Windows系统:放心用 netstat,兼容性无敌,语法简单;
✅ Linux生产环境/高并发服务器:优先用 ss ,性能碾压,功能更强;
✅ 面试必答:ss 是 netstat 的替代命令,性能更好,推荐使用。
✅ 八、Windows系统中的 netstat 用法(补充)
netstat在Windows中完全通用,只是有2个小差异,用法几乎一致,Windows用户也能直接用:
- Windows中
netstat没有-p参数,而是用-o参数来显示进程PID; - Windows中查看端口对应的进程名称,需要结合任务管理器(详细信息→PID列)。
Windows 高频写法
cmd
# 查看所有监听的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命令,它和ps、grep一起,是Linux运维/开发的三大基础命令,掌握后能解决绝大多数进程和网络的排查问题 ✅!