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
可以帮助排查网络连接问题,例如检查是否有异常的监听端口或未关闭的连接。