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:连接状态(如LISTEN、ESTABLISHED、TIME_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连接数量(如
ESTABLISHED、TIME_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 |
客户端发起连接请求(可能表示网络问题或防火墙拦截)。 |
注意事项
- 权限要求:查看进程信息(
-p参数)需要sudo或 root 权限。 - 工具安装:
- 若
ss或lsof不存在,可通过包管理器安装:sudo apt install iproute2 lsof # Debian/Ubuntu sudo yum install iproute lsof # CentOS/RHEL
- 若
- 性能分析:大量
TIME_WAIT连接可能需调整内核参数(如net.ipv4.tcp_tw_reuse)。
通过以上命令,可以全面掌握系统的TCP连接状态,快速定位网络或应用层问题。
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/19211335

浙公网安备 33010602011771号