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套接字
相关推荐
2035去旅行31 分钟前
bootcmd 详细讲解
linux·嵌入式·arm·soc
陈希1231 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
女神下凡2 小时前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
且从容.5 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道6 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
且从容.9 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落10 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨10 小时前
WSL2的安装与使用
linux·wsl
微小的鱼10 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng11 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器