netstat 是一个网络统计工具,它可以显示网络连接、路由表、接口统计、伪装连接和多播成员。通过使用 netstat 命令,管理员可以查看当前的网络连接情况,包括连接的状态、协议类型、本地地址、外部地址等信息。
在现代Linux系统中,netstat 已经逐渐被 ss(Socket Statistics)命令所取代,但仍然有很多场景下会用到 netstat。
以下是 netstat 常用的一些选项及其功能:
查看所有活动连接
netstat -a
参数 -a 表示显示所有活动的连接。
查看TCP连接
netstat -at
参数 -t 表示仅显示TCP连接。
查看UDP连接
netstat -au
参数 -u 表示仅显示UDP连接。
以数字形式显示地址和端口
netstat -an
参数 -n 表示以数字形式显示地址和端口号,而不是尝试解析主机名和服务名。
显示监听的端口
netstat -l
参数 -l 表示显示处于监听状态的端口。
显示程序对应的PID和名称
netstat -p
参数 -p 表示显示与每个连接关联的进程ID(PID)和程序名称。
显示统计信息
netstat -s
参数 -s 表示显示每个协议的统计信息。
显示路由表
netstat -r
参数 -r 表示显示内核路由表。
结合多个选项
netstat -tulnp
上述命令表示显示所有监听的TCP端口,并显示对应的进程信息。
运行以下命令:
netstat -a
输出示例:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:3306 *:* LISTEN
tcp 0 0 localhost:631 *:* LISTEN
udp 0 0 *:bootpc *:*
解释:
Proto:协议类型(如TCP或UDP)。Recv-Q 和 Send-Q:接收队列和发送队列中的数据包数量。Local Address:本地地址和端口。Foreign Address:远程地址和端口。State:连接状态(如LISTEN、ESTABLISHED等)。运行以下命令:
netstat -tulnp
输出示例:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 123/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 456/mysqld
udp 0 0 0.0.0.0:68 0.0.0.0:* 789/dhclient
解释:
PID/Program name 列出了监听端口的进程ID和程序名称。运行以下命令:
netstat -r
输出示例:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default _gateway 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
解释:
Destination:目标网络。Gateway:网关地址。Genmask:子网掩码。Flags:标志位(如U表示可达,G表示网关)。Iface:接口名称。替代工具:ss 命令
在现代Linux系统中,ss(Socket Statistics)命令被认为是 netstat 的替代品,因为它性能更高且功能更强大。例如:
ss -tuln
功能与 netstat -tuln 类似。
常见网络状态
LISTEN:等待传入连接。ESTABLISHED:已建立连接。TIME_WAIT:连接关闭后等待一段时间以确保数据包清理完成。CLOSE_WAIT:被动关闭状态,等待应用程序关闭连接。排查网络问题
使用 netstat 或 ss 可以帮助排查网络连接问题,例如检查是否有异常的监听端口或未关闭的连接。