如何用命令查看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

相关推荐

  • 命令提示符中如何正确输入大括号?

    在命令提示符(CMD)环境下,大括号作为常用的特殊符号,可能在文本输出、脚本编写、文件操作等多种场景中需要输入,由于命令提示符的语法特性和环境限制,大括号的输入和使用需结合具体场景灵活处理,本文将详细说明不同情境下的输入方法、注意事项及常见问题解决,普通命令行直接输入大括号在命令提示符的普通命令行模式下,大括号……

    2025年8月22日
    13700
  • Windows copy命令如何高效使用?隐藏技巧揭秘

    Windows 的 copy 命令用于复制一个或多个文件到指定位置,支持通配符进行批量复制,并能合并多个文件,它不能复制目录(文件夹),主要用于文件操作。

    2025年7月27日
    15200
  • 安全加速SCDN有免费试用吗?

    安全加速SCDN作为现代企业网络安全与性能优化的重要工具,其试用政策一直是用户关注的焦点,本文将围绕“安全加速SCDN有试用的么”这一核心问题,从试用政策、功能特性、适用场景及使用建议等方面展开详细说明,帮助用户全面了解该服务,安全加速SCDN的试用政策主流云服务提供商普遍为安全加速SCDN提供试用服务,但具体……

    2025年11月27日
    9600
  • 流星蝴蝶剑9.07隐藏命令怎么用?

    该补丁用于解锁《流星蝴蝶剑9.07》中的隐藏命令功能,安装后覆盖原文件即可生效,玩家可输入特定指令获得额外游戏功能或效果。

    2025年6月18日
    15800
  • 安全加速网络购买

    在数字化时代,网络购物已成为人们生活的重要组成部分,然而网络环境复杂、访问速度慢等问题时常影响购物体验,安全加速网络购买技术应运而生,通过多重技术手段保障用户数据安全,同时优化网络传输效率,为消费者打造更流畅、可靠的购物环境,安全防护:构建全方位购物屏障安全加速网络购买的核心在于保障交易安全,通过SSL/TLS……

    2025年11月26日
    9100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信