您好,登录后才能下订单哦!
# Linux下怎么查看TCP连接数
## 引言
在Linux系统管理和网络故障排查中,监控TCP连接数是一项基础但至关重要的任务。无论是排查高负载问题、分析网络攻击,还是优化服务器性能,了解如何查看和分析TCP连接状态都必不可少。本文将详细介绍多种查看TCP连接数的方法及其应用场景。
---
## 一、基础命令工具
### 1. `netstat`命令
`netstat`是传统的网络统计工具,可以显示网络连接、路由表、接口统计等信息。
```bash
netstat -ant | grep -v "LISTEN" | wc -l
参数说明:
- -a
:显示所有连接
- -n
:以数字形式显示地址
- -t
:仅显示TCP连接
输出示例:
ESTABLISHED 42
TIME_WT 18
优缺点: - ✅ 兼容性好,多数Linux发行版预装 - ❌ 性能较差(大数据量时可能卡顿)
ss
命令ss
(Socket Statistics)是netstat
的现代替代品,性能更优。
ss -s # 查看汇总统计
ss -tan | awk '{print $1}' | sort | uniq -c
典型输出:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.10:ssh 203.0.113.5:59234
优势:
- 比netstat
快10倍以上
- 支持更详细的过滤条件
/proc/net/tcp
分析Linux内核通过虚拟文件系统暴露网络信息:
cat /proc/net/tcp | wc -l # 原始TCP连接数
awk '{print $4}' /proc/net/tcp | sort | uniq -c # 按状态统计
状态码解读:
- 0A
:LISTEN
- 01
:ESTABLISHED
- 06
:TIME_WT
conntrack
工具(适用于NAT环境)conntrack -L -p tcp | wc -l
适用场景: - 经过NAT转发的连接 - 防火墙规则分析
TCP连接的常见状态及统计方法:
状态 | 含义 | 统计命令示例 |
---|---|---|
ESTABLISHED | 已建立连接 | ss -tan state established |
TIME_WT | 等待关闭 | netstat -ant | grep TIME_WT |
SYN_SENT | 主动发起连接 | ss -tan state syn-sent |
CLOSE_WT | 等待本地关闭 | ss -tan state close-wait |
关键指标关注:
- 大量TIME_WT
:可能需调整tcp_tw_reuse
- 持续SYN_RECV
:可能是SYN Flood攻击
ss -tan 'sport = :80' | wc -l
ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
输出示例:
45 203.0.113.12
22 198.51.100.34
iftop
(带宽监控)iftop -P -n -N
nethogs
(进程级监控)nethogs eth0
tcptrack
(可视化工具)tcptrack -i eth0
#!/bin/bash
DATE=$(date +%F-%T)
COUNT=$(ss -tan | wc -l)
echo "$DATE $COUNT" >> /var/log/tcp_connections.log
#!/bin/bash
THRESHOLD=1000
COUNT=$(ss -tan | wc -l)
if [ $COUNT -gt $THRESHOLD ]; then
echo "警报:TCP连接数过高 ($COUNT)" | mail -s "连接数警报" admin@example.com
fi
# 查看当前配置
sysctl net.ipv4.tcp_tw_reuse
sysctl net.ipv4.tcp_max_tw_buckets
# 临时修改
sysctl -w net.ipv4.tcp_max_syn_backlog=4096
# 查看文件描述符限制
ulimit -n
# 修改limits.conf
* soft nofile 65535
* hard nofile 65535
# 统计每个IP的连接数
netstat -ant | awk '{print $5}' | cut -d: -f1 | grep -v '^$' | sort | uniq -c | sort -nr
# 使用iptables自动封禁
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
# 查看所有容器的连接数
for id in $(docker ps -q); do
echo "Container $id:"
docker exec $id ss -tan | wc -l
done
kubectl get pods -o wide | awk '{print $1}' | xargs -I{} kubectl exec {} -- ss -tan | wc -l
工具/方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
netstat |
兼容性好 | 性能差 | 老系统兼容 |
ss |
性能极佳 | 新系统才完整支持 | 现代Linux服务器 |
/proc/net/tcp |
无额外依赖 | 需要解析十六进制 | 嵌入式设备等精简环境 |
conntrack |
支持NAT连接跟踪 | 需要root权限 | 防火墙/NAT服务器 |
掌握TCP连接数监控是Linux系统管理的必备技能。建议:
1. 日常使用ss
命令作为首选工具
2. 关键业务系统设置自动化监控
3. 定期分析连接数趋势图
4. 根据业务特点调整内核参数
通过本文介绍的多维度分析方法,您可以全面掌握服务器的TCP连接状况,为性能优化和安全防护提供数据支撑。 “`
注:实际字数为约1800字,您可以通过以下方式扩展: 1. 增加具体案例解析 2. 补充各命令的详细参数说明 3. 添加性能测试对比数据 4. 深入讲解TCP状态机原理
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。