Linux系统之netstat 命令详解
netstat 是一个用于显示 Linux 网络子系统信息的命令行工具。它支持查看活动的网络连接、路由表、接口统计、多播组成员、伪装连接(NAT)以及协议统计信息。虽然 netstat 仍广泛使用,但官方已推荐使用更高效的替代工具(如 ss、ip 等)。
·
netstat 是一个用于显示 Linux 网络子系统信息的命令行工具。它支持查看活动的网络连接、路由表、接口统计、多播组成员、伪装连接(NAT)以及协议统计信息。虽然 netstat 仍广泛使用,但官方已推荐使用更高效的替代工具(如 ss、ip 等)。
核心功能
- 网络连接
- 显示 TCP/UDP/RAW 等协议的连接状态(如
ESTABLISHED、LISTEN)。
- 显示 TCP/UDP/RAW 等协议的连接状态(如
- 路由表
- 查看内核路由表(
-r)或 FIB(Forwarding Information Base)信息。
- 查看内核路由表(
- 接口统计
- 显示网络接口的流量统计(如发送/接收的数据包数量)。
- 多播成员
- 列出 IPv4/IPv6 多播组的成员信息(
-g)。
- 列出 IPv4/IPv6 多播组的成员信息(
- 伪装连接
- 显示 NAT(Network Address Translation)连接(
-M)。
- 显示 NAT(Network Address Translation)连接(
- 协议统计
- 按协议(TCP、UDP 等)汇总统计信息(
-s)。
- 按协议(TCP、UDP 等)汇总统计信息(
语法
netstat [选项] [延迟]
常用命令模式
-
默认模式
netstat- 显示所有活动的网络连接(TCP/UDP/RAW 等)。
-
路由表模式
netstat -r- 显示内核路由表(等效于
route -e)。
- 显示内核路由表(等效于
-
接口统计模式
netstat -i- 显示网络接口的统计信息(如数据包错误率)。
-
多播组成员模式
netstat -g- 显示 IPv4/IPv6 多播组的成员信息。
-
伪装连接模式
netstat -M- 显示 NAT 连接(如防火墙伪装的连接)。
-
协议统计模式
netstat -s- 按协议汇总统计信息(如 TCP 错误数)。
选项详解
通用选项
| 选项 | 说明 |
|---|---|
-a, --all |
显示所有连接(包括监听和非监听状态)。 |
-n, --numeric |
以数字形式显示地址和端口号(禁用 DNS/服务名解析)。 |
-p, --program |
显示与套接字关联的进程 PID 和程序名(需 root 权限)。 |
-c, --continuous |
每秒刷新一次输出(实时监控)。 |
-t, --tcp |
仅显示 TCP 连接。 |
-u, --udp |
仅显示 UDP 连接。 |
-l, --listening |
仅显示监听状态的连接(如 LISTEN)。 |
-v, --verbose |
显示详细信息(如未配置的地址族提示)。 |
地址族选项
| 选项 | 说明 |
|---|---|
-4, --inet |
仅显示 IPv4 连接。 |
-6, --inet6 |
仅显示 IPv6 连接。 |
-x, --unix |
显示 UNIX 域套接字。 |
--ipx |
显示 IPX 连接(已过时)。 |
--ax25 |
显示 AX.25 连接(业余无线电协议)。 |
扩展选项
| 选项 | 说明 |
|---|---|
-e, --extend |
显示额外信息(如用户 ID、文件描述符)。 |
-o, --timers |
显示网络定时器信息。 |
--numeric-hosts |
仅以数字形式显示主机地址。 |
--numeric-ports |
仅以数字形式显示端口号。 |
--numeric-users |
仅以数字形式显示用户 ID。 |
路由相关选项
| 选项 | 说明 |
|---|---|
-r, --route |
显示路由表(等效于 ip route)。 |
-F |
从 FIB(转发信息库)显示路由信息(默认)。 |
-C |
从路由缓存显示路由信息。 |
接口相关选项
| 选项 | 说明 |
|---|---|
-i, --interfaces |
显示所有网络接口的统计信息。 |
-I=iface |
显示指定接口(iface)的统计信息。 |
输出字段详解
活动网络连接(TCP/UDP/RAW)
| 字段 | 说明 |
|---|---|
| Proto | 协议类型(如 tcp、udp)。 |
| Recv-Q | 接收队列中的字节数(ESTABLISHED 状态)或 syn backlog(LISTEN 状态)。 |
| Send-Q | 发送队列中的字节数(ESTABLISHED 状态)或最大 syn backlog(LISTEN 状态)。 |
| Local Address | 本地 IP 地址和端口号(若未指定 -n,则解析为主机名和服务名)。 |
| Foreign Address | 远程 IP 地址和端口号。 |
| State | 连接状态(如 ESTABLISHED、LISTEN)。 |
| User | 套接字所有者的用户名或 UID。 |
| PID/Program name | 拥有套接字的进程 ID 和程序名(需 -p 选项)。 |
TCP 状态说明
| 状态 | 说明 |
|---|---|
| ESTABLISHED | 连接已建立。 |
| LISTEN | 监听传入连接(需 -l 或 -a 选项)。 |
| SYN_SENT | 主动发送连接请求。 |
| SYN_RECV | 收到连接请求。 |
| TIME_WAIT | 等待网络中残留数据包消失。 |
| CLOSE_WAIT | 远端关闭连接,本地需关闭。 |
| LAST_ACK | 等待远端确认关闭。 |
UNIX 域套接字
| 字段 | 说明 |
|---|---|
| Proto | 协议类型(通常为 unix)。 |
| RefCnt | 引用计数(连接到套接字的进程数)。 |
| Flags | 标志位(如 ACC 表示监听状态)。 |
| Type | 套接字类型(如 SOCK_STREAM、SOCK_DGRAM)。 |
| Path | 套接字的路径名(用于 UNIX 域通信)。 |
路由表
| 字段 | 说明 |
|---|---|
| Destination | 目标网络或主机。 |
| Gateway | 下一跳网关地址。 |
| Genmask | 子网掩码。 |
| Flags | 路由标志(如 U 可用、G 经过网关)。 |
| Iface | 使用的网络接口(如 eth0)。 |
使用场景与示例
1. 查看所有活动连接
netstat -a
- 输出示例:
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:22 *:* LISTEN tcp 0 0 192.168.1.100:22 192.168.1.1:56789 ESTABLISHED
2. 查看监听端口
netstat -lt
- 输出示例:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:80 *:* LISTEN
3. 查看 TCP 连接状态
netstat -ant
- 输出示例:
Active Internet connections (server and client) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.1.100:22 192.168.1.1:56789 ESTABLISHED tcp 0 0 192.168.1.100:80 192.168.1.2:12345 TIME_WAIT
4. 查看进程与端口的关联
sudo netstat -tup
- 输出示例:
Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.1.100:22 192.168.1.1:56789 ESTABLISHED 1234/sshd
5. 实时监控网络连接
netstat -c
- 输出示例:
Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.1.100:22 192.168.1.1:56789 ESTABLISHED- 每秒刷新一次连接状态。
6. 查看路由表
netstat -r
- 输出示例:
Kernel IP routing table Destination Gateway Genmask Flags Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG eth0 192.168.1.0 0.0.0.0 255.255.255.0 U eth0
7. 查看接口统计信息
netstat -i
- 输出示例:
Kernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 12345 0 0 0 67890 0 0 0 BMRU
8. 查看多播组成员
netstat -g
- 输出示例:
IPv6/IPv4 Multicast Group Memberships Interface refcnt Group lo 1 all-systems@mcast.net eth0 2 224.0.0.1
替代方案与注意事项
-
推荐替代工具
ss:ss -tuln替代netstat -tuln,性能更高。ip route:ip route show替代netstat -r。ip -s link:ip -s link show替代netstat -i。
-
权限要求
- 使用
-p选项查看进程信息需 root 权限(sudo)。
- 使用
-
地址解析
- 使用
-n禁用 DNS 解析,提高速度(如netstat -antn)。
- 使用
-
IPv6 支持
- 确保系统启用 IPv6(通过
sysctl net.ipv6.conf.all.disable_ipv6验证)。
- 确保系统启用 IPv6(通过
-
过时警告
netstat依赖/proc文件系统,未来可能被完全弃用,建议使用ss和ip工具。
网络相关关键文件详解
以下文件均用于提供内核网络状态信息,主要位于 /proc/net/ 目录(proc 文件系统,动态反映内核状态,非磁盘持久化文件),或 /etc/services(静态服务映射文件),是 netstat 等工具的信息来源,也可直接查看用于网络诊断。
1. /etc/services
- 说明:服务与端口号的映射表(静态文本文件),用于将端口号转换为对应的服务名称(如
80/tcp对应http)。 - 内容:每行格式为
服务名 端口号/协议 [别名...],例如:http 80/tcp www www-http # WorldWideWeb HTTP ssh 22/tcp # Secure Shell - 用途:
netstat等工具默认通过此文件解析端口号对应的服务名(-n选项可禁用解析)。
2. /proc/net/dev
- 说明:网络接口统计信息,记录所有网络接口(如
eth0、lo)的收发数据量、错误数等。 - 内容:包含接口名、接收/发送的数据包数(
RX packets/TX packets)、字节数(RX bytes/TX bytes)、错误数(RX errors/TX errors)、丢弃数(RX dropped/TX dropped)等。 - 用途:查看接口流量、诊断丢包或错误问题(如
RX errors过高可能是硬件或驱动问题)。
3. /proc/net/raw
- 说明:原始套接字(raw socket)信息,记录内核中所有 raw 类型的套接字(用于直接操作 IP 数据包,如 ping、traceroute 等工具使用)。
- 内容:包含本地地址、远程地址、状态、用户 ID(UID)等。
- 用途:查看系统中使用 raw 套接字的进程,诊断网络监控或低级别网络工具的行为。
4. /proc/net/tcp
- 说明:TCP 套接字信息,记录所有 TCP 连接的详细状态。
- 内容:包含本地 IP:端口、远程 IP:端口、连接状态(如
01对应ESTABLISHED,0A对应LISTEN)、发送/接收队列大小、用户 ID 等(状态码对应关系需参考内核定义)。 - 用途:查看当前 TCP 连接(如活跃连接、监听端口),诊断连接异常(如大量
TIME_WAIT状态可能是连接关闭未释放)。
5. /proc/net/udp
- 说明:UDP 套接字信息,记录所有 UDP 套接字(无连接协议,状态较少)。
- 内容:类似
tcp文件,包含本地/远程地址:端口、用户 ID 等(UDP 无“状态”字段,默认显示00)。 - 用途:查看 UDP 监听端口或数据报发送/接收情况(如 DNS 服务的
53/udp端口)。
6. /proc/net/udplite
- 说明:UDPLite 套接字信息,UDPLite 是 UDP 的变体,支持部分数据校验和(而非整个数据包)。
- 内容:类似
udp文件,记录 UDPLite 套接字的地址、端口等信息。 - 用途:查看使用 UDPLite 协议的应用(较少见,主要用于对校验和灵活性有要求的场景)。
7. /proc/net/igmp
- 说明:IGMP(Internet Group Management Protocol)多播组信息,记录 IPv4 主机加入的多播组。
- 内容:包含接口名、多播组 IP 地址、成员类型(如
INCLUDE/EXCLUDE)等。 - 用途:查看系统加入的多播组,诊断多播通信问题(如流媒体、组播路由)。
8. /proc/net/unix
- 说明:UNIX 域套接字信息,记录本地进程间通信(IPC)使用的 UNIX 套接字。
- 内容:包含套接字状态(如
LISTENING、CONNECTED)、引用计数、路径(如/run/docker.sock)等。 - 用途:查看本地进程间的套接字通信(如服务间通过
unix://路径通信的连接)。
9. /proc/net/ipx
- 说明:IPX 协议(Novell 网协议,已过时)的套接字信息。
- 内容:记录 IPX 套接字的地址、端口、状态等。
- 用途:仅用于维护旧有 IPX 网络,现代系统中极少使用。
10. /proc/net/ax25
- 说明:AX.25 协议(业余无线电通信协议)的套接字信息。
- 内容:记录 AX.25 套接字的连接状态、地址等。
- 用途:用于业余无线电网络设备的调试。
11. /proc/net/appletalk
- 说明:AppleTalk 协议(苹果早期网络协议,已过时)的 DDP(Datagram Delivery Protocol)套接字信息。
- 内容:记录 AppleTalk 套接字的地址、端口等。
- 用途:仅用于旧有苹果网络的维护。
12. /proc/net/nr
- 说明:NET/ROM 协议(业余无线电分组交换协议)的套接字信息。
- 内容:记录 NET/ROM 套接字的连接状态、路由等。
- 用途:用于业余无线电网络的调试。
13. /proc/net/route
- 说明:IPv4 路由表信息,记录内核的 IP 路由规则。
- 内容:包含目标网络、网关、子网掩码、接口名、标志(如
U表示路由可用,G表示网关路由)等。 - 用途:查看系统路由配置(等价于
netstat -r或ip route),诊断网络可达性问题。
14. /proc/net/ax25_route
- 说明:AX.25 协议的路由表信息。
- 内容:记录 AX.25 协议的路由规则、接口、跳数等。
- 用途:调试 AX.25 无线电网络的路由。
15. /proc/net/ipx_route
- 说明:IPX 协议的路由表信息。
- 内容:记录 IPX 网络的路由目标、网关、接口等。
- 用途:维护旧有 IPX 网络的路由配置。
16. /proc/net/nr_nodes
- 说明:NET/ROM 协议的节点列表,记录已知的 NET/ROM 网络节点。
- 内容:包含节点名称、地址、状态等。
- 用途:查看 NET/ROM 网络中的节点信息。
17. /proc/net/nr_neigh
- 说明:NET/ROM 协议的邻居信息,记录相邻的 NET/ROM 节点。
- 内容:包含邻居节点地址、接口、信号强度等。
- 用途:调试 NET/ROM 网络的邻居发现。
18. /proc/net/ip_masquerade
- 说明:IP 伪装(网络地址转换,NAT)连接信息,记录通过 NAT 转换的连接。
- 内容:包含内部 IP:端口、外部 IP:端口、协议、状态等。
- 用途:查看防火墙或路由器的 NAT 转换规则,诊断端口映射问题(现代系统更多使用
nftables或iptables查看)。
19. /proc/net/snmp
- 说明:SNMP 风格的网络统计信息,记录各协议的累计数据。
- 内容:按协议分类(如
Tcp、Udp、Ip),包含数据包数、错误数、重传数等(如Tcp: RtoAlgorithm RtoMin ... TcpOutSegs TcpRetransSegs)。 - 用途:统计网络协议的整体运行情况(如 TCP 重传率过高可能是网络不稳定)。
更多推荐



所有评论(0)