Linux 【03- netstat命令超详细教程】

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

字段拆解:

  1. Proto:协议 tcp/udp/unix
  2. Recv-Q:接收队列,不为0代表对方发的数据本机未读(阻塞)
  3. Send-Q:发送队列,不为0代表本机数据发不出去(网络拥堵)
  4. Local Address:本机IP:端口
  5. Foreign Address :对方IP:端口,0.0.0.0:* 代表监听所有地址
  6. 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套接字
相关推荐
cjhbachelor1 小时前
线程的控制
linux
写代码的学渣2 小时前
Linux 彻底清空历史命令 & 恢复历史命令(完整版、重启永久生效)
linux·运维·chrome
生万千欢喜心2 小时前
liunx AnolisOS-8.9-x86_64-dvd.iso win11 适配龙蜥 - 虚拟机
linux
天空'之城3 小时前
Linux 系统编程 12:TCP 进阶
linux·网络编程
红糖奶茶4 小时前
怎么样在遍历列表时动态判断阈值是否被满足并返回相应文本
java·linux·服务器
bkspiderx4 小时前
rpath:Linux 中固定共享库搜索路径的“永久解决方案”
linux·rpath·固定共享库搜索路径
wbs_scy4 小时前
仿 muduo 高并发服务器项目:从 timerfd 到时间轮实现定时任务机制
linux·服务器·c++
AI的探索之旅4 小时前
从 Ubuntu 14.04 到 24.04:TI AM335x 开发环境完整迁移与 Agent 接管方案
linux·数据库·嵌入式硬件·ubuntu·postgresql
阿pin4 小时前
Android随笔-pipe是什么?
android·linux·pipe