Linux/Window如何查网络连接/端口/套接字信息?

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 【⭐⭐⭐ 快速查询,无进程信息】)
  • [✅ 五、和你上一条命令联动:`netstat` + `grep` 组合筛选(超实用!)](#✅ 五、和你上一条命令联动:netstat + grep 组合筛选(超实用!))
    • [✔ 场景1:查询「指定端口」是否被占用/监听(最常用)](#✔ 场景1:查询「指定端口」是否被占用/监听(最常用))
    • [✔ 场景2:查询「指定进程」占用的所有端口](#✔ 场景2:查询「指定进程」占用的所有端口)
    • [✔ 场景3:查询「指定连接状态」的所有连接](#✔ 场景3:查询「指定连接状态」的所有连接)
  • [✅ 六、netstat 输出中「常见的连接状态」解释(运维必懂)](#✅ 六、netstat 输出中「常见的连接状态」解释(运维必懂))
  • [✅ 七、重要补充:`netstat` vs `ss` 命令(必知)](#✅ 七、重要补充:netstat vs ss 命令(必知))
    • [✔ 为什么很多人说「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以「数字形式」显示所有信息,不做域名/主机名解析

    ✅ 核心作用:

    1. 速度极快:不加-n时,netstat会尝试把IP解析成域名、把端口号解析成服务名(如80→http),耗时很长;
    2. 结果准确:避免解析失败导致的乱码/错误,生产环境必加-n,这是铁律!
    3. 格式统一: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_WAITESTABLISHED连接堆积:

bash 复制代码
# 查看所有已建立的TCP连接
netstat -ant | grep ESTABLISHED

# 查看所有TIME_WAIT状态的TCP连接(这类连接过多会占用端口资源)
netstat -ant | grep TIME_WAIT

✅ 六、netstat 输出中「常见的连接状态」解释(运维必懂)

执行netstat -anpt会看到很多STATE(状态)列的值,这些状态是TCP协议的核心,掌握后能排查绝大多数网络连接异常,记住高频的5个即可

  1. LISTEN :监听状态 → 本机的端口正在等待客户端连接(服务已启动,正常状态)
  2. ESTABLISHED :已建立连接 → 本机和远程主机的连接已经成功建立,正在传输数据(正常的业务连接)
  3. TIME_WAIT :等待关闭 → 连接已经断开,系统会保留该连接一段时间(默认60秒),防止丢包,少量属于正常,大量则会占用端口资源
  4. CLOSE_WAIT :被动关闭 → 对方已经断开连接,但本机的程序没有主动关闭连接,出现大量该状态=程序有bug(未释放连接)
  5. SYN_RECV :等待同步 → 正在建立TCP三次握手的中间状态,少量正常,大量则可能是SYN洪水攻击

✅ 七、重要补充:netstat vs ss 命令(必知)

✔ 为什么很多人说「netstat 过时了」?

netstat传统的网络查询命令 ,而Linux系统在2.6.25内核之后,推出了一个全新的、性能更强的命令 ss(socket statistics),二者的关系是:

ssnetstat 的「升级版+替代版」 ,功能完全覆盖netstat,且执行速度更快、占用资源更少、支持的参数更多

✔ 核心区别

  1. 性能差异 :当服务器的网络连接非常多(比如几万/几十万连接)时,netstat 会非常慢(因为它从/proc/net/tcp读取数据,解析耗时),而ss 直接读取内核的tcp_hashinfo,速度提升百倍以上
  2. 功能差异ss 支持更多高级筛选(如按连接数、按端口范围),能显示更多内核级的网络信息。
  3. 兼容性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 ,性能碾压,功能更强;

✅ 面试必答:ssnetstat 的替代命令,性能更好,推荐使用。


✅ 八、Windows系统中的 netstat 用法(补充)

netstat在Windows中完全通用,只是有2个小差异,用法几乎一致,Windows用户也能直接用:

  1. Windows中 netstat 没有 -p 参数,而是用 -o 参数来显示进程PID
  2. Windows中查看端口对应的进程名称,需要结合任务管理器(详细信息→PID列)。

Windows 高频写法

cmd 复制代码
# 查看所有监听的TCP/UDP端口 + PID
netstat -tulno

# 查指定端口(如8080)
netstat -tulno | findstr 8080

✅ 九、全文核心知识点总结(浓缩精华,方便记忆)

  1. netstat 是网络状态查询命令,查端口、连接、进程占用,Linux/Windows通用;
  2. 核心参数:-t(TCP)、-u(UDP)、-l(监听)、-n(数字显示,必加)、-p(进程PID)、-a(所有连接)
  3. 封神组合:netstat -tulnp → 查所有监听端口+进程,必背
  4. 精准筛选:netstat -tulnp | grep 端口/进程名 → 精准查询,生产环境必杀技;
  5. 替代命令:ss 是netstat的升级版,性能更强,参数几乎一致,ss -tulnp 无缝替换;
  6. 核心状态:LISTEN(监听)、ESTABLISHED(已连接)、TIME_WAIT(等待关闭)。

希望这份详解能帮你彻底掌握netstat命令,它和psgrep一起,是Linux运维/开发的三大基础命令,掌握后能解决绝大多数进程和网络的排查问题 ✅!

相关推荐
invicinble2 小时前
对于linux形成整体性的认识
linux·运维·arm开发
Maggie_ssss_supp2 小时前
Linux-ansible自动化运维
运维·自动化·ansible
『往事』&白驹过隙;2 小时前
系统编程的内存零拷贝(Zero-Copy)技术
linux·c语言·网络·c++·物联网·iot
盐焗西兰花2 小时前
鸿蒙学习实战之路-STG系列(3/11)-用户授权管理详解
服务器·学习·harmonyos
xiaoliuliu123452 小时前
Kylin V10 安装 zlib-devel-1.2.11-20.ky10.x86_64详细步骤
linux·运维·服务器
@––––––2 小时前
力扣hot100—系列6-栈
linux·python·leetcode
Trouvaille ~2 小时前
【Linux】网络进阶:内网穿透、DNS与ICMP实战
linux·运维·服务器·网络·dns·nat·icmp
开开心心就好2 小时前
实用PDF批量加马赛克,抹除敏感信息绿色版
java·linux·开发语言·网络·人工智能·pdf·word2vec