如何用命令查看TCP连接的详细状态?

在计算机网络管理和故障排查中,查看TCP连接状态是核心操作之一,无论是监控服务端口、识别异常连接,还是分析网络性能,都需要通过命令行工具快速获取TCP连接信息,不同操作系统(如Linux、Windows、macOS)提供的命令略有差异,但核心功能类似,下面将详细介绍各系统中常用的TCP连接查看方法。

怎么用命令查看tcp连接

Linux系统下查看TCP连接

Linux系统提供了多种命令查看TCP连接,其中最常用的是netstatss,此外lsof也可用于关联进程信息。

netstat命令(传统工具)

netstat是Linux系统中经典的网络状态查看工具,虽然逐渐被ss替代,但在许多旧系统或兼容场景中仍广泛使用,常用参数如下:

参数 作用 示例
-a 显示所有连接(包括监听和未监听) netstat -a
-t 仅显示TCP连接 netstat -t
-u 仅显示UDP连接 netstat -u
-l 仅显示监听状态的连接 netstat -l
-n 以数字形式显示IP和端口(不解析域名) netstat -n
-p 显示连接对应的进程ID和名称 netstat -p
-anp 组合参数:显示所有TCP连接,数字形式,并关联进程 netstat -anp

示例输出

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1234/mysqld        
tcp        0      0 192.168.1.100:80       10.0.0.5:54321         ESTABLISHED 5678/nginx          
tcp6       0      0 :::22                   :::*                    LISTEN      9012/sshd           

字段说明

  • Proto:协议(TCP/UDP);
  • Local Address:本地IP和端口;
  • Foreign Address:远程IP和端口;
  • State:连接状态(如LISTEN监听、ESTABLISHED已建立、TIME_WAIT等待关闭等);
  • PID/Program name:进程ID和进程名(需root权限或netstat -p)。

ss命令(推荐,更高效)

ssiproute2工具包的一部分,相比netstat更快速,默认显示TCP连接,且支持更丰富的过滤条件,常用参数与netstat类似:

参数 作用 示例
-t 显示TCP连接 ss -t
-l 显示监听连接 ss -l
-n 数字形式显示 ss -n
-p 显示进程信息 ss -p
-4/-6 仅显示IPv4/IPv6连接 ss -4
state 过滤连接状态(如ESTABLISHEDLISTEN ss state ESTABLISHED

示例:查看所有已建立的TCP连接并关联进程:

ss -tp state ESTABLISHED

lsof命令(关联文件描述符)

lsof(List Open Files)可查看进程打开的文件,网络连接在Linux中也被视为文件,因此可通过lsof查看TCP连接并关联进程:

lsof -i :8080  # 查看8080端口的连接
lsof -i TCP    # 查看所有TCP连接

Windows系统下查看TCP连接

Windows系统主要通过netstat命令和PowerShell的Get-NetTCPConnection cmdlet查看TCP连接。

怎么用命令查看tcp连接

netstat命令

Windows的netstat参数与Linux类似,但语法略有差异,常用参数如下:

参数 作用 示例
-a 显示所有连接 netstat -a
-n 数字形式显示IP和端口 netstat -n
-o 显示进程ID(PID) netstat -o
-an 显示所有连接(数字形式) netstat -an
-ano 显示所有连接、数字形式、PID netstat -ano
-b 显示创建连接的可执行文件(需管理员权限) netstat -b

示例:查看所有TCP连接并显示PID:

netstat -ano

输出示例

Proto  Local Address          Foreign Address        State        PID
TCP    0.0.0.0:80             0.0.0.0:LISTENING      4
TCP    127.0.0.1:3306         127.0.0.1:54321        ESTABLISHED  1234
TCP    192.168.1.100:8080     10.0.0.5:12345         ESTABLISHED  5678

字段说明

  • Proto:协议;
  • Local Address:本地IP和端口;
  • Foreign Address:远程IP和端口;
  • State:连接状态;
  • PID:进程ID(可通过任务管理器查看对应进程)。

PowerShell命令(推荐,更详细)

PowerShell提供了Get-NetTCPConnection cmdlet,可获取更丰富的TCP连接信息,包括进程名、本地/远程端口、状态等:

Get-NetTCPConnection | Where-Object {$_.State -eq "ESTABLISHED"}  # 查看已建立的连接
Get-NetTCPConnection | Where-Object {$_.LocalPort -eq 8080}       # 查看8080端口连接

输出示例

LocalAddress        LocalPort RemoteAddress       RemotePort State       ProcessName
-----------        --------- -------------       ---------- -----       -----------
192.168.1.100      8080      10.0.0.5            12345      ESTABLISHED nginx
127.0.0.1          3306      127.0.0.1          54321      ESTABLISHED mysqld

macOS系统下查看TCP连接

macOS系统与Linux类似,支持netstatss命令,参数基本一致,同时也可使用lsof

netstat命令

macOS的netstat默认显示TCP连接,常用参数:

怎么用命令查看tcp连接

netstat -an    # 显示所有连接(数字形式)
netstat -an -p  # 显示进程信息(需sudo权限)
netstat -t      # 仅显示TCP连接

ss命令

macOS较新版本(如10.14+)支持ss,语法与Linux一致:

ss -t state ESTABLISHED  # 查看已建立的TCP连接
ss -l                     # 查看监听端口

lsof命令

macOS的lsof用法与Linux相同,可查看端口关联的进程:

lsof -i :22    # 查看22端口(SSH)连接
lsof -i TCP    # 查看所有TCP连接

TCP连接状态说明

无论是哪个系统,TCP连接状态字段(如State)是理解连接的关键,常见状态包括:

  • LISTEN:监听状态,等待连接请求(如服务端口);
  • ESTABLISHED:已建立连接,双方可正常通信;
  • TIME_WAIT:连接关闭后等待一段时间,确保数据传输完成;
  • CLOSE_WAIT:被动关闭方等待应用程序关闭连接;
  • SYN_SENT:发送连接请求后等待确认;
  • SYN_RECV:收到连接请求后等待确认。

相关问答FAQs

Q1: 如何快速查看某个进程占用的TCP连接?
A1:

  • Linux/macOS:使用netstatss结合grep过滤进程名或PID,
    netstat -anp | grep "nginx"  # 查看nginx进程的所有连接
    ss -tp | grep "PID=1234"     # 通过PID过滤(ss需用grep "PID=")
  • Windows:通过netstat -ano获取PID,再用任务管理器或PowerShell关联进程名:
    netstat -ano | findstr "5678"  # 查看PID为5678的连接

    或PowerShell:

    Get-NetTCPConnection | Where-Object {$_.OwningProcess -eq 5678}

Q2: 如何统计当前系统TCP连接数及各状态分布?
A2:

  • Linux/macOS:使用ssnetstat结合awk/sort/uniq统计,
    ss -t | awk 'NR>1{print $1}' | sort | uniq -c  # 统计各状态TCP连接数
    ss -t | wc -l                                # 统计总TCP连接数(含监听)
  • Windows:通过netstat或PowerShell统计,
    netstat -ano | findstr "TCP" | findstr "ESTABLISHED" /c /i  | wc -l  # 统计已建立连接数

    或PowerShell:

    (Get-NetTCPConnection).State | Group-Object | Select-Object Name, Count  # 各状态统计

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/15722.html

(0)
酷番叔酷番叔
上一篇 2025年8月24日 04:25
下一篇 2025年8月24日 04:41

相关推荐

  • CAD如何自定义命令?

    在CAD中自定义命令是提升绘图效率的重要方式,通过将常用操作组合为快捷命令或工具按钮,可大幅减少重复操作,以下是详细的自定义命令操作步骤,以AutoCAD为例,其他CAD软件流程类似,需打开“自定义用户界面”(CUI)编辑器,这是CAD命令自定义的核心工具,可通过以下两种方式打开:在命令行输入“CUI”后按回车……

    2025年8月28日
    3000
  • CAD如何用ATT命令定义属性块?

    ATT命令用于创建属性定义,是定义属性块的核心工具,通过设置标记、提示和默认值,为图块添加可编辑的文字变量,实现标题栏、符号标记等内容的灵活填充与统一管理。

    2025年6月23日
    7100
  • 批处理如何高效执行多条命令?

    单行顺序执行(&分隔符) echo 第一条命令 & echo 第二条命令 & calc.exe作用:无论前一条命令是否成功,后续命令都会执行,场景:批量创建文件后启动程序:mkdir C:\Logs & type NUL > C:\Logs\error.txt &amp……

    2025年7月31日
    3800
  • 问题核心原因分析

    UG NX 6(又称NX 6.0)的钣金模块缺失通常由许可证配置错误、角色设置不当或环境变量冲突导致,并非软件本身无此功能,以下是系统化的排查与修复步骤:检查当前用户角色点击NX界面右上角 【角色】下拉菜单(默认显示”基本功能”或”高级”),选择 【完整】或【高级】角色(推荐”具有完整菜单的高级功能”),观察顶……

    2025年6月26日
    5000
  • Windows cmd中竖线符号怎么输入?

    Windows命令提示符中,竖线符号 | 是管道操作符,用于将一个命令的输出作为另一个命令的输入(dir | find “txt”),其输入方法取决于所使用的键盘布局。

    2025年6月14日
    5200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信