TCP 网络连接情况查询

在Linux系统中,可以通过以下命令查看当前的TCP连接情况,包括连接状态、源/目标IP和端口等信息:


1. netstat 命令(传统工具)

netstat -tunap
  • 参数说明
    • -t:显示TCP连接。
    • -u:显示UDP连接(可选)。
    • -n:禁用域名解析(显示IP而非主机名)。
    • -a:显示所有连接(包括监听和非监听)。
    • -p:显示进程信息(需要root权限)。
  • 输出示例
    Proto Recv-Q Send-Q Local Address    Foreign Address    State       PID/Program name
    tcp   0      0      0.0.0.0:22       0.0.0.0:*          LISTEN      1234/sshd
    tcp   0      0      192.168.1.10:22  203.0.113.5:12345  ESTABLISHED 5678/sshd
    
  • 关键字段
    • State:连接状态(如 LISTENESTABLISHEDTIME_WAIT 等)。
    • PID/Program name:占用连接的进程(需 -p 参数和权限)。

注意:部分新系统已弃用 netstat,推荐使用 ss 替代。


2. ss 命令(推荐替代品)

ss -tunap
  • 参数说明:与 netstat 类似,但性能更高。
  • 输出示例
    Netid State  Recv-Q Send-Q Local Address:Port  Peer Address:Port
    tcp   LISTEN 0      128    0.0.0.0:22         0.0.0.0:*        users:(("sshd",pid=1234,fd=3))
    tcp   ESTAB  0      0      192.168.1.10:22    203.0.113.5:12345 users:(("sshd",pid=5678,fd=3))
    
  • 优势
    • 更快的执行速度。
    • 默认显示更多内核信息(如计时器)。

3. lsof 命令(查看进程打开的文件/连接)

sudo lsof -i tcp
  • 作用:列出所有TCP连接及对应的进程和用户。
  • 输出示例
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    1234 root    3u  IPv4  12345      0t0  TCP *:ssh (LISTEN)
    sshd    5678 root    3u  IPv4  67890      0t0  TCP 192.168.1.10:ssh->203.0.113.5:12345 (ESTABLISHED)
    

4. 统计连接状态

ss -tun | awk '{print $1}' | grep -v "State" | sort | uniq -c
  • 作用:统计各状态的TCP连接数量(如 ESTABLISHEDTIME_WAIT)。
  • 输出示例
    5 LISTEN
    12 ESTABLISHED
    3 TIME-WAIT
    

5. 实时监控连接变化

watch -n 1 "ss -tunap | grep ESTAB"
  • 作用:每1秒刷新一次已建立的连接(ESTABLISHED)。

6. 检查特定端口的连接

ss -tunap | grep ':22'  # 查看SSH端口(22)的连接

关键TCP连接状态说明

状态 含义
LISTEN 服务端正在监听端口。
ESTABLISHED 活跃的连接(数据正在传输)。
TIME_WAIT 连接已关闭,等待足够时间以确保远程收到ACK(常见于高并发短连接)。
CLOSE_WAIT 连接未正确关闭(可能需检查应用代码)。
SYN_SENT 客户端发起连接请求(可能表示网络问题或防火墙拦截)。

注意事项

  1. 权限要求:查看进程信息(-p 参数)需要 sudo 或 root 权限。
  2. 工具安装
    • sslsof 不存在,可通过包管理器安装:
      sudo apt install iproute2 lsof  # Debian/Ubuntu
      sudo yum install iproute lsof   # CentOS/RHEL
      
  3. 性能分析:大量 TIME_WAIT 连接可能需调整内核参数(如 net.ipv4.tcp_tw_reuse)。

通过以上命令,可以全面掌握系统的TCP连接状态,快速定位网络或应用层问题。

posted @ 2025-11-11 19:05  蓝迷梦  阅读(75)  评论(0)    收藏  举报