netstat 是一个用于显示 Linux 网络子系统信息的命令行工具。它支持查看活动的网络连接、路由表、接口统计、多播组成员、伪装连接(NAT)以及协议统计信息。虽然 netstat 仍广泛使用,但官方已推荐使用更高效的替代工具(如 ssip 等)。

核心功能
  1. 网络连接
    • 显示 TCP/UDP/RAW 等协议的连接状态(如 ESTABLISHEDLISTEN)。
  2. 路由表
    • 查看内核路由表(-r)或 FIB(Forwarding Information Base)信息。
  3. 接口统计
    • 显示网络接口的流量统计(如发送/接收的数据包数量)。
  4. 多播成员
    • 列出 IPv4/IPv6 多播组的成员信息(-g)。
  5. 伪装连接
    • 显示 NAT(Network Address Translation)连接(-M)。
  6. 协议统计
    • 按协议(TCP、UDP 等)汇总统计信息(-s)。
语法
netstat [选项] [延迟]
常用命令模式
  1. 默认模式

    netstat
    
    • 显示所有活动的网络连接(TCP/UDP/RAW 等)。
  2. 路由表模式

    netstat -r
    
    • 显示内核路由表(等效于 route -e)。
  3. 接口统计模式

    netstat -i
    
    • 显示网络接口的统计信息(如数据包错误率)。
  4. 多播组成员模式

    netstat -g
    
    • 显示 IPv4/IPv6 多播组的成员信息。
  5. 伪装连接模式

    netstat -M
    
    • 显示 NAT 连接(如防火墙伪装的连接)。
  6. 协议统计模式

    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 协议类型(如 tcpudp)。
Recv-Q 接收队列中的字节数(ESTABLISHED 状态)或 syn backlogLISTEN 状态)。
Send-Q 发送队列中的字节数(ESTABLISHED 状态)或最大 syn backlogLISTEN 状态)。
Local Address 本地 IP 地址和端口号(若未指定 -n,则解析为主机名和服务名)。
Foreign Address 远程 IP 地址和端口号。
State 连接状态(如 ESTABLISHEDLISTEN)。
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_STREAMSOCK_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
    
替代方案与注意事项
  1. 推荐替代工具

    • ssss -tuln 替代 netstat -tuln,性能更高。
    • ip routeip route show 替代 netstat -r
    • ip -s linkip -s link show 替代 netstat -i
  2. 权限要求

    • 使用 -p 选项查看进程信息需 root 权限(sudo)。
  3. 地址解析

    • 使用 -n 禁用 DNS 解析,提高速度(如 netstat -antn)。
  4. IPv6 支持

    • 确保系统启用 IPv6(通过 sysctl net.ipv6.conf.all.disable_ipv6 验证)。
  5. 过时警告

    • netstat 依赖 /proc 文件系统,未来可能被完全弃用,建议使用 ssip 工具。
网络相关关键文件详解

以下文件均用于提供内核网络状态信息,主要位于 /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
  • 说明:网络接口统计信息,记录所有网络接口(如 eth0lo)的收发数据量、错误数等。
  • 内容:包含接口名、接收/发送的数据包数(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 对应 ESTABLISHED0A 对应 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 套接字。
  • 内容:包含套接字状态(如 LISTENINGCONNECTED)、引用计数、路径(如 /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 -rip 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 转换规则,诊断端口映射问题(现代系统更多使用 nftablesiptables 查看)。
19. /proc/net/snmp
  • 说明:SNMP 风格的网络统计信息,记录各协议的累计数据。
  • 内容:按协议分类(如 TcpUdpIp),包含数据包数、错误数、重传数等(如 Tcp: RtoAlgorithm RtoMin ... TcpOutSegs TcpRetransSegs)。
  • 用途:统计网络协议的整体运行情况(如 TCP 重传率过高可能是网络不稳定)。
Logo

电影级数字人,免显卡端渲染SDK,十行代码即可调用,工业级demo免费开源下载!

更多推荐