# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。