睿诚科技协会

Linux如何高效查看网络连接状态?

在Linux系统中,查看网络连接状态是系统管理和故障排查中的常见操作,通过相关命令可以实时监控网络连接、端口占用、进程关联等信息,以下是几种常用的查看网络连接状态的方法及其详细说明。

Linux如何高效查看网络连接状态?-图1
(图片来源网络,侵删)

使用netstat命令查看网络连接

netstat是一个传统的网络工具,用于显示网络连接、路由表、接口统计等信息,尽管在部分新版本Linux中已被ss命令替代,但仍有广泛使用场景。

基本用法

  1. 查看所有TCP和UDP连接

    netstat -a

    显示所有活动的网络连接,包括监听(LISTEN)和非监听状态。

  2. 显示监听端口

    Linux如何高效查看网络连接状态?-图2
    (图片来源网络,侵删)
    netstat -l

    仅显示处于监听状态的端口,常用于检查服务是否正常启动。

  3. 显示进程ID和进程名

    netstat -p

    结合-p参数可以查看每个连接对应的进程ID和名称,便于定位问题进程。

  4. 显示TCP连接状态统计

    Linux如何高效查看网络连接状态?-图3
    (图片来源网络,侵删)
    netstat -st

    输出TCP协议的详细统计信息,如连接数、重传次数等。

  5. 显示UDP连接统计

    netstat -su

    输出UDP协议的统计信息,包括数据包收发情况。

常用参数组合

  • netstat -tuln:显示监听的TCP(-t)和UDP(-u)端口,并以数字形式显示地址(-n),避免DNS解析延迟。
  • netstat -anp | grep :80:查找监听80端口的进程及连接状态。

使用ss命令查看网络连接

ss是netstat的替代工具,在性能上更优,尤其是在处理大量连接时,推荐优先使用。

基本用法

  1. 显示所有连接

    ss -a

    功能与netstat -a类似,但输出更简洁高效。

  2. 显示TCP连接

    ss -t

    仅显示TCP连接,可结合-a(所有)、-l(监听)、-n(数字)等参数。

  3. 显示UDP连接

    ss -u

    查看UDP连接状态。

  4. 显示 sockets 摘要

    ss -s

    输出协议类型(TCP/UDP)的连接总数、监听数等统计信息。

  5. 显示进程信息

    ss -p

    显示每个连接对应的进程ID和名称。

常用参数组合

  • ss -tuln:显示监听的TCP和UDP端口(数字形式)。
  • ss -t state established:显示所有已建立的TCP连接。
  • ss -ap 'sport = :22':查找源端口为22的连接(需支持过滤表达式)。

使用lsof命令查看端口占用

lsof(list open files)可用于查看打开的文件、网络连接等,通过指定网络相关参数可定位端口占用进程。

基本用法

  1. 查看指定端口的占用情况

    lsof -i :80

    显示占用80端口的进程、PID、用户等信息。

  2. 查看所有网络连接

    lsof -i

    显示所有活动的网络连接,包括TCP和UDP。

  3. 查看指定用户的网络连接

    lsof -u username

    查看指定用户的所有网络连接。

使用/proc文件系统查看网络连接

Linux内核通过/proc文件系统暴露系统信息,可直接读取网络连接相关文件。

常用文件

  1. /proc/net/tcp
    显示TCP连接信息,格式为本地地址、远程地址、状态、进程ID等。
    示例:

    sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
    0: 00000000:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000   500        0 65536 1 0000000000000000 100 0 0 10 0

    其中local_address为本地IP和端口(十六进制),st为连接状态(如0A表示LISTEN)。

  2. /proc/net/udp
    显示UDP连接信息,格式与TCP类似。

  3. /proc/net/tcp6和/proc/net/udp6
    分别显示IPv6的TCP和UDP连接信息。

解析方法

可通过cat /proc/net/tcp | awk '{print $10}' | sort | uniq -c统计各状态的TCP连接数。

网络连接状态详解

无论是netstat还是ss,连接状态(State)字段是关键信息,常见状态如下(以TCP为例):

状态 说明
LISTEN 端口处于监听状态,等待连接请求
ESTABLISHED 连接已建立,数据传输中
SYN_SENT 发送连接请求后等待对方确认
SYN_RECV 收到连接请求,发送确认并等待对方确认
FIN_WAIT1 主动关闭连接,发送FIN等待对方确认
FIN_WAIT2 收到对方确认,等待对方发送FIN
CLOSE_WAIT 被动关闭连接,等待应用程序关闭
LAST_ACK 被动关闭方发送FIN后,等待对方确认
TIME_WAIT 连接关闭后,等待足够时间确保网络中的报文消失
CLOSED 连接未建立或已关闭

综合应用示例

  1. 查找占用端口的恶意进程

    ss -tulnp | grep :8080

    若发现异常进程(如PID未知),可结合kill -9终止。

  2. 分析高并发连接问题

    ss -s

    观察TCP连接中ESTABLISHED数量是否异常,结合netstat -an | grep ESTABLISHED | wc -l统计总数。

  3. 监控特定IP的连接

    ss -t | grep 192.168.1.100

    查看与指定IP的所有TCP连接。

相关问答FAQs

Q1: 如何区分本地IP地址和远程IP地址?
A: 在netstat或ss的输出中,本地地址(Local Address)格式为IP:PORT,远程地址(Foreign Address)格式相同,例如0.0.0:22表示本地所有IP监听22端口,而168.1.100:80表示远程IP为192.168.1.100、端口为80的连接,使用-n参数可避免DNS解析,直接显示IP地址。

Q2: 为什么TIME_WAIT状态连接过多会影响性能?
A: TIME_WAIT状态是TCP连接正常关闭后的等待阶段,用于确保网络中的延迟数据包被正确处理,若该状态连接过多,可能因服务器处理能力不足或客户端频繁短连接导致,会占用系统端口资源,可通过调整内核参数(如net.ipv4.tcp_tw_reusenet.ipv4.tcp_tw_recycle)优化,但需注意后者可能影响NAT环境。

分享:
扫描分享到社交APP
上一篇
下一篇