ss / netstat 对比
ss 是 netstat 的现代替代——更快、信息更全。优先用 ss,netstat 仍兼容。
# 看所有 TCP 监听端口
sudo ss -tlnp # 简写记法:t=tcp, l=listen, n=数字不解析名字, p=显示进程
sudo netstat -tlnp # 同上
# 看 UDP 监听
sudo ss -ulnp
# 看所有已建立的连接
sudo ss -tnp
# 看所有连接(含监听)
sudo ss -tunap
输出列含义
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
tcp ESTAB 0 0 192.168.1.100:51234 1.2.3.4:443 users:(("curl",pid=5678,fd=3))
State 常见值:
| 状态 | 含义 |
|---|---|
LISTEN |
在监听等连接 |
ESTAB |
已建立连接 |
TIME-WAIT |
自己已关,等回收(最多 2MSL) |
CLOSE-WAIT |
对端已关,自己还没关(应用 bug 信号) |
SYN-SENT |
我发了 SYN,等回 |
SYN-RECV |
我收到 SYN,回了 SYN-ACK,等 ACK |
实战:常见查询
1. 看 80 端口被谁监听
sudo ss -tlnp | grep :80
sudo lsof -i :80
sudo fuser 80/tcp
2. 看 nginx 当前连接数
sudo ss -tnp | grep nginx | wc -l
3. 看与某 IP 的所有连接
sudo ss -tnp | grep 1.2.3.4
4. 按状态统计
sudo ss -tn | awk '{print $1}' | sort | uniq -c | sort -rn
# 100 ESTAB
# 35 TIME-WAIT
# 10 CLOSE-WAIT ← 这个数字大说明应用没正确关连接
lsof:列出打开的文件 / 网络
Linux 哲学"一切皆文件"——socket 也是文件,所以 lsof 能查网络。
sudo lsof -i :80 # 谁在用 80 端口
sudo lsof -i tcp:443 # TCP 443
sudo lsof -i @1.2.3.4 # 与某 IP 的连接
sudo lsof -i -P -n # 所有网络连接(-P 不解析端口名 -n 不解析 IP)
sudo lsof -p 1234 # 进程 1234 打开的所有 fd
sudo lsof -u wadely # wadely 用户的所有打开 fd
sudo lsof /var/log/syslog # 谁在读 syslog
端口被占用的排查模板
# 想跑服务但端口被占
$ python -m http.server 5500
OSError: [Errno 98] Address already in use
# 1. 看谁占了
sudo ss -tlnp | grep :5500
sudo lsof -i :5500
# 2. 如果是已死进程的 socket,等 TIME-WAIT 过;或重用端口
SO_REUSEADDR=1 ...
# 3. 如果是另一个进程,杀
sudo kill <pid>
TIME_WAIT 爆多怎么办
高 QPS 服务可能积累大量 TIME-WAIT:
sudo ss -tn state time-wait | wc -l
# 50000
正常:每个连接 4 元组在 TIME_WAIT 期间不能重用(默认 2 分钟)。 应对:
- 启用
tcp_tw_reuse:sysctl -w net.ipv4.tcp_tw_reuse=1(通常安全) - 别用
tcp_tw_recycle:内核 4.12+ 已移除(NAT 后会出问题) - 应用层:用 keep-alive 连接池,少建立短连接
看实时连接(动态监控)
# watch + ss 实时
watch -n 1 'ss -tn state established | wc -l'
# nethogs:按进程看流量
sudo nethogs
端口范围
# 看系统的临时端口范围
cat /proc/sys/net/ipv4/ip_local_port_range
# 32768 60999
短连接服务很多 → 这个范围用完会"端口耗尽"。临时调大:
sudo sysctl -w net.ipv4.ip_local_port_range="10000 65000"
下一篇:远程连接三件套——SSH / SCP / rsync。