[Linux] netstat命令和ss命令

1. netstat输出结果

netstat的输出结果可以分为两个部分
Part1 => Active Internet connections 有源TCP连接,其中"Recv-Q"和"Send-Q"指接收队列和发送队列;这些数字如果不为0则表示软件包正在队列中堆积。
Part2 => Active UNIX domain sockets 有源Unix域套接口,只能用于本机通信,性能可以提高一倍。

注:netstat默认不显示udp协议、不显示状态为LISTEN

[root@xxserver bin]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp       32      0 HA-node1-cluster-he:35762 HA-node1-cluster-h:efi-mg CLOSE_WAIT
tcp       32      0 HA-node1-cluster-he:48560 HA-node2-cluster-h:efi-mg CLOSE_WAIT
tcp        0      0 xxserver:ssh             169.177.166.247:53827   ESTABLISHED
……
tcp6       0      0 localhost:44208         localhost:mysql         ESTABLISHED
tcp6       0      0 localhost:61613         localhost:34190         ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  3      [ ]         DGRAM                    11527    /run/systemd/notify
unix  2      [ ]         DGRAM 
……
unix  3      [ ]         STREAM     CONNECTED     32670    /run/dbus/system_bus_socket

 

2.常用参数

-a 显示所有选项,默认不显示LISTEN相关
-t 仅显示tcp相关选项
-u 仅显示udp相关选项
-w 仅显示RAW相关选项
-x 仅显示unix相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在 Listen (监听) 的服务状态
-p 显示正在使用Socket的程序名和PID
-r 显示路由表
-i 显示网络接口列表
-s 按各个协议进行统计
-c 每隔一个固定时间执行该netstat命令

举例:

(1) -a 列出所有端口(包括监听和未监听的)
netstat -a  列出所有端口
netstat -at 列出所有 tcp 端口 
netstat -au 列出所有 udp 端口

(2) -l 只显示监听端口
只显示监听端口 netstat -l
只列出所有监听 tcp 端口 netstat -lt
只列出所有监听 udp 端口 netstat -lu
只列出所有监听 UNIX 端口 netstat -lx

说明:为什么udp和raw的State不打印LISTEN? 查看 man netstat解释如下

Since there are no states in raw mode and usually no states used in UDP and UDPLite, this column may be left blank.

[root@xxserver bin]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:rsync           0.0.0.0:*               LISTEN
tcp6       0      0 [::]:42242              [::]:*                  LISTEN
……
udp        0      0 HA-node1-ne:45334         0.0.0.0:*
udp6       0      0 192.169.4.202:snmptrap  [::]:*
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     42703    private/relay
unix  2      [ ACC ]     STREAM     LISTENING     42712    private/retry
……

(3) netstat -s 显示每个协议的统计信息

(4) netstat -p 输出中显示PID和进程名称 

[root@xxserver ~]# netstat -ap
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      22533/sshd
udp6       0      0 192.169.4.202:snmptrap  [::]:*                              26680/java
……

(5) netstat -n 输出中不显示主机、端口和用户名 (host, port or user)

[root@xxserver ~]# netstat -anp | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      22533/sshd
udp6       0      0 192.169.4.202:162       :::*                                26680/java
……

说明:如果仅不想让其中一个被显示,使用以下命令
# netsat -a --numeric-ports
# netsat -a --numeric-hosts
# netsat -a --numeric-users

(6) netstat -c 持续输出netstat信息
默认1秒打印一次 netstat -auc | grep snmp
设置5秒打印一次 netstat -auc 5 | grep snmp

[root@xxxserver ~]# netstat -auc | grep snmp
Tue Mar 30 17:08:23 CST 2021
udp6       0      0 192.169.4.202:snmptrap  [::]:*
udp6       0      0 192.169.4.202:snmptrap  [::]:*
udp6       0      0 192.169.4.202:snmptrap  [::]:*
udp6       0      0 192.169.4.202:snmptrap  [::]:*
^C
[root@xxxserver ~]# 

(7) 显示路由信息 netstat -r 输出结果同route

(8) 显示网络接口列表 netstat -i,netstat -ie输出结果同ifconfig

[root@xxxserver ~]# netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens164           1500  4649150      0     30 0       6231154      0      0      0 BMRU
ens192           1500  4596573      0     29 0       2720436      0      0      0 BMRU
lo              65536 16194199      0      0 0      16194199      0      0      0 LRU
virbr0           1500        0      0      0 0             0      0      0      0 BMU
[root@xxxserver ~]#

 

3.套接口的State

Active Internet connections
   State
       The  state  of the socket. Since there are no states in raw mode and usually no states used in UDP and
       UDPLite, this column may be left blank
. Normally this can be one of several values:

       ESTABLISHED
              The socket has an established connection.
       SYN_SENT
              The socket is actively attempting to establish a connection.
       SYN_RECV
              A connection request has been received from the network.
       FIN_WAIT1
              The socket is closed, and the connection is shutting down.
       FIN_WAIT2
              Connection is closed, and the socket is waiting for a shutdown from the remote end.
       TIME_WAIT
              The socket is waiting after close to handle packets still in the network.
       CLOSE  The socket is not being used.
       CLOSE_WAIT
              The remote end has shut down, waiting for the socket to close.
       LAST_ACK
              The remote end has shut down, and the socket is closed. Waiting for acknowledgement.
       LISTEN The socket is listening for incoming connections.  Such sockets are not included in the  output
              unless you specify the --listening (-l) or --all (-a) option.
       CLOSING
              Both sockets are shut down but we still don't have all our data sent.
       UNKNOWN
              The state of the socket is unknown.

各个状态解释可参考另一篇博文,TCP的连接建立和释放 https://blog.csdn.net/wy_hhxx/article/details/103980331

Active UNIX domain Sockets
   State
       This field will contain one of the following Keywords:

       FREE   The socket is not allocated
       LISTENING
              The socket is listening for a connection request.  Such sockets are only included in the output
              if you specify the --listening (-l) or --all (-a) option.
       CONNECTING
              The socket is about to establish a connection.
       CONNECTED
              The socket is connected.
       DISCONNECTING
              The socket is disconnecting.
       (empty)
              The socket is not connected to another one.
       UNKNOWN
              This state should never happen.

 

参考资料:

Linux netstat命令详解及state的含义 https://blog.csdn.net/libaineu2004/article/details/82465215

========================================================================  

ss命令,偷个懒 囧

ss比netstat快的主要原因是,netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多。

ss命令和netstat命令比较   https://cloud.tencent.com/developer/article/1026969
Linux网络状态工具ss命令使用详解   http://www.ttlsa.com/linux-command/ss-replace-netstat/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `netstat` 命令通常是预装在 Linux 系统中的。但如果你的系统中没有预装该命令,你可以使用以下命令来安装它: - Ubuntu/Debian系统:`sudo apt-get install net-tools` - CentOS/RHEL系统:`sudo yum install net-tools` - Arch Linux系统:`sudo pacman -S net-tools` 请注意,该命令在最新的 Linux 发行版中已经被废弃,推荐使用 `ss` 命令来代替 `netstat`。你可以通过以下方式安装 `ss` 命令: - Ubuntu/Debian系统:`sudo apt-get install iproute2` - CentOS/RHEL系统:`sudo yum install iproute` - Arch Linux系统:`sudo pacman -S iproute2` ### 回答2: 在Linux系统下,netstat命令是用于查看网络连接状态和统计信息的工具。它可以显示当前活动的网络连接,包括TCP、UDP协议以及UNIX域套接字。同时,netstat命令也可以显示网络接口的统计信息,如接收和发送的数据包数量等。 要在Linux系统中安装netstat命令,具体的安装命令取决于所使用的Linux发行版。下面以常见的Ubuntu和CentOS系统为例: 1. 在Ubuntu系统中,可以使用apt命令进行安装。打开终端,输入以下命令并按下回车键: ``` sudo apt install net-tools ``` 系统会要求输入管理员密码,输入密码后按下回车键确认,然后系统会自动下载并安装net-tools包,其中包含了netstat命令。 2. 在CentOS系统中,可以使用yum命令进行安装。打开终端,输入以下命令并按下回车键: ``` sudo yum install net-tools ``` 系统会要求输入管理员密码,输入密码后按下回车键确认,然后系统会自动下载并安装net-tools包,其中包含了netstat命令。 安装完成后,可以在终端中直接输入netstat命令来使用。netstat命令的常见用法有: - `netstat -a`:显示所有的网络连接和监听端口。 - `netstat -t`:显示所有使用TCP协议的网络连接和监听端口。 - `netstat -u`:显示所有使用UDP协议的网络连接和监听端口。 - `netstat -l`:显示所有正在监听的网络连接和监听端口。 - `netstat -p`:显示所有网络连接和监听端口,并显示对应的进程ID。 通过使用netstat命令,我们可以了解Linux系统上当前的网络连接状态,帮助排查网络问题,进行网络调优等操作。 ### 回答3: netstat是一个用于显示网络连接状态的命令行实用工具。在Linux系统中,netstat是默认安装的,无需额外安装。 在绝大多数Linux发行版中,使用以下命令来安装netstat是多余的,因为它通常已经可以直接使用: ``` sudo apt-get install net-tools ``` 上述命令是针对基于Debian和Ubuntu的系统,它会安装net-tools软件包,其中包含了netstat命令。 然而,如果你的Linux发行版不包含netstat,或者你需要使用更新或特定版本的netstat,或者你希望使用其他网络状态工具,那么你可以通过不同的方法进行安装。 一种方法是通过下载net-tools软件包的源码,然后手动编译和安装。你可以从net-tools的官方网站(https://sourceforge.net/projects/net-tools/)上获取最新的源码压缩包。下载后,解压缩并进入解压后的目录,然后按照其中的README文件提供的指导进行编译和安装。 另一种方法是使用其他第三方软件源,例如EPEL(Extra Packages for Enterprise Linux)。在使用这种方法之前,你需要先安装EPEL软件源(如果还没有安装)。安装完成后,使用以下命令安装netstat: ``` sudo yum install net-tools ``` 以上命令适用于基于Red Hat和CentOS的系统,它会从EPEL软件源中安装net-tools软件包。 无论你使用哪种方法,安装完成后,你就可以在终端中使用netstat命令了。该命令可以用来显示各种网络连接信息,例如打开的端口、连接状态、IP地址等等。你可以通过man netstat命令查看netstat的手册,了解更多可以使用的选项和参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值