Linux netstat 超详细完整教程
一、基础说明
netstat(network statistics)是老牌网络连接查看工具,用于查看:端口监听、TCP/UDP连接、路由表、网卡统计、进程占用端口等。
注意:新版 Linux(CentOS8、Ubuntu20+)默认不装 netstat,推荐替代工具
ss,但 netstat 兼容性好,运维仍常用。
1. 安装 netstat
bash
# CentOS / RHEL
yum install net-tools -y
# Debian / Ubuntu
apt install net-tools -y
二、netstat 通用语法
bash
netstat [选项]
核心参数分类记忆
1. 连接协议类
-t:只显示 TCP 连接-u:只显示 UDP 连接-w:原始套接字 RAW-x:UNIX 本地域套接字
2. 显示状态/进程类
-a:all,显示所有连接(监听+已建立,默认只显示已建立)-n:numeric,不解析域名、端口、用户名,直接数字,速度最快(日常必加)-p:program,显示进程 PID/程序名(root 才能看全部进程)-l:listening,只显示监听端口(服务端口)
3. 扩展统计类
-e:extend,扩展信息(用户名、inode)-o:timer,显示连接计时器(TCP 超时、保活时间)-s:statistics,各协议收发数据包统计-r:route,查看系统路由表-i:interface,网卡流量统计-c:continuous,持续刷新输出(每秒打印)
三、输出字段详解
执行 netstat -ant 典型输出:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 96 192.168.1.10:22 10.0.0.5:49152 ESTABLISHED
字段拆解:
- Proto:协议 tcp/udp/unix
- Recv-Q:接收队列,不为0代表对方发的数据本机未读(阻塞)
- Send-Q:发送队列,不为0代表本机数据发不出去(网络拥堵)
- Local Address:本机IP:端口
- Foreign Address :对方IP:端口,
0.0.0.0:*代表监听所有地址 - State:TCP连接状态(UDP无状态)
TCP 常见状态
| 状态 | 含义 |
|---|---|
| LISTEN | 监听端口,等待客户端连接(服务端) |
| ESTABLISHED | 正常已建立连接,正在通信 |
| TIME_WAIT | 连接正常关闭后等待释放(大量TIME_WAIT代表短连接并发高) |
| CLOSE_WAIT | 客户端已关闭,服务端未调用close,程序bug/未释放连接 |
| SYN_SENT | 主动发起连接,等待对方握手 |
| SYN_RECV | 收到连接请求,回复syn+ack |
四、高频实用命令(运维日常)
1. 查看本机所有监听端口(最常用)
bash
# -l 监听 -n 数字 -t TCP -u UDP
netstat -lntu
只看TCP监听:
bash
netstat -lnt
2. 查看所有连接(含已建立+监听,带进程)
bash
# -a 全部 -n 数字 -p 进程 -t TCP
netstat -antp
不加root时部分进程显示
-,sudo/root才能完整查看PID。
3. 查找某个端口被哪个进程占用
例:查找80端口占用
bash
netstat -lntp | grep 80
输出会显示 PID/程序名,杀进程:kill -9 PID
4. 只看已建立的TCP连接
bash
netstat -ant | grep ESTABLISHED
5. 统计每个IP连接数(排查CC/并发)
bash
netstat -ant | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
作用:列出哪个外部IP连接本机最多,判断攻击。
6. 统计 TIME_WAIT / CLOSE_WAIT 数量
bash
# 统计TIME_WAIT
netstat -ant | grep TIME_WAIT | wc -l
# 统计CLOSE_WAIT
netstat -ant | grep CLOSE_WAIT | wc -l
大量CLOSE_WAIT:代码未关闭socket;大量TIME_WAIT:短连接频繁创建销毁。
7. 持续实时监控端口连接(每秒刷新)
bash
netstat -antpc
8. 查看路由表(等价route -n)
bash
netstat -rn
9. 网卡流量统计
bash
netstat -i
输出RX-OK/TX-OK:收发成功包;RX-ERR/TX-ERR:错误包。
10. 网络协议整体流量统计
bash
netstat -s
分别展示TCP、UDP、ICMP、IP收发、丢包、错误统计,排查网络异常。
11. 查看本地Unix套接字(进程本地通信)
bash
netstat -lx
12. 显示完整扩展信息(用户、inode)
bash
netstat -antpe
五、实战排错场景
场景1:端口启动失败,提示address already in use
bash
# 找到占用进程PID
netstat -lntp | grep ":端口号"
# 强制杀死
kill -9 进程PID
场景2:服务器卡顿,大量CLOSE_WAIT连接
原因:服务端代码未释放连接。
临时缓解:调整内核tcp参数;根治:修复程序socket关闭逻辑。
场景3:对外请求慢,大量TIME_WAIT
临时优化内核参数(/etc/sysctl.conf):
conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
生效:sysctl -p
场景4:外部恶意高频连接
用连接数统计命令,拉黑高连接IP:
bash
# 屏蔽IP
iptables -A INPUT -s 1.2.3.4 -j DROP
六、netstat 与 ss 对比(现代推荐ss)
netstat 缺点:性能差,高并发服务器卡顿;底层读取/proc/net/tcp。
ss 优点:速度快、信息更全,系统内置无需装net-tools。
等价替换:
bash
# netstat -lntu
ss -lntu
# netstat -antp
ss -antp
七、完整参数速查表
-a 显示所有连接和监听端口
-t TCP连接
-u UDP连接
-l 仅监听端口
-n 数字格式,不解析域名
-p 进程PID/名称
-e 扩展详情(用户、inode)
-o TCP计时器信息
-c 持续刷新
-s 协议流量统计
-r 路由表
-i 网卡信息
-x Unix套接字
-w RAW套接字