系统相关
首页 > 系统相关> > linux命令_netstat

linux命令_netstat

作者:互联网

netstat是一个控制台命令,可用于监控本机的TCP/IP网络,获得路由表、网络连接以及所有网络接口设备的状态信息。一般情况下,我们主要使用netstat命令显示与IP、TCP、UDP和ICMP协议相关的统计数据,检验本机各端口的网络连接情况。

比如说,在日常使用电脑时,如果连接到了网络,或多或少的会因接收到的数据包导致出错数据或故障,在正常量的情况下,TCP/IP可以容许这些类型的错误,并且能够自动重新发送数据包。但是如果累计的出错情况数占所接收IP数据报的百分比过大,而且数目还在不断增加,那么我们就要进入控制台,使用netstat命令查看一下出现问题的连接端口。

netstat结果详解

[root@honey-master ~] netstat
------------------------------------------------------------------------------------|
Active Internet connections (w/o servers)                                           |
Proto Recv-Q Send-Q Local Address           Foreign Address         State           |
tcp        0      0 honey-ma:xmltec-xmlmail honey-master:44714      ESTABLISHED     |
tcp        0      0 honey-master:postgres   honey-master:46680      ESTABLISHED     |
tcp        0      0 honey-master:41756      honey-master:redis      ESTABLISHED     |
tcp        0      0 honey-master:42726      honey-master:redis      ESTABLISHED     | 
tcp        0      0 localhost:39230         localhost:redis         ESTABLISHED     |
..                                                                                  |
tcp6       0      0 honey-master:mysql      honey-master:58232      ESTABLISHED     |
tcp6       0      0 localhost:mysql         localhost:53266         ESTABLISHED     |
tcp6       0      0 honey-master:mysql      honey-master:58446      ESTABLISHED     |
udp        0      0 honey-master:bootpc     _gateway:bootps         ESTABLISHED     |
udp        0      0 localhost:55920         localhost:55920         ESTABLISHED     |
------------------------------------------------------------------------------------|---------------|
Active UNIX domain sockets (w/o servers)                                                            |
Proto RefCnt Flags       Type       State         I-Node   Path                                     |
unix  3      [ ]         DGRAM                    1703     /run/systemd/notify                      |
unix  2      [ ]         DGRAM                    1705     /run/systemd/cgroups-agent               |
...                                                                                                 |
unix  3      [ ]         STREAM     CONNECTED     29975    /run/systemd/journal/stdout              |
unix  3      [ ]         STREAM     CONNECTED     1543565  /var/run/docker.sock                     |
unix  3      [ ]         STREAM     CONNECTED     323733                                            |
unix  3      [ ]         STREAM     CONNECTED     189654                                            |
----------------------------------------------------------------------------------------------------|
Active Bluetooth connections (w/o servers)
Proto  Destination       Source            State         PSM DCID   SCID      IMTU    OMTU Security
Proto  Destination       Source            State     Channel

从整体上看,netstat的输出结果可以分为两个部分:

一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

列出所有的tcp和udp端口:

image-20220522180200247

字段 含义
proto 协议名称:tcp/udp
Recv-Q 网络接收队列:表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
Send-Q 网络发送队列:对方没有收到的数据或者说没有Ack的,还是本地缓冲区,如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。从步骤一的结果可以看到22端口对应的链路的send-Q中堆积了大量的数据包,可以判定是发送数据给目的地址的时候出现了阻塞的问题,导致了包堆积在本地缓存中,不能成功发出去。
Local-address 表格下分析
Foreign Address 与本机端口通信的外部socket。显示规则与Local Address相同
State 表格下分析
PID/program PID即进程id,Program即使用该socket的应用程序。其中0.0.0.0:1234——本地IP/Port信息。
1、0.0.0.0代表本机上可用的任意地址。比如0.0.0.0:1234表示本机上所有地址的1234端口,这样ip计算机就不用重复显示了。
2、0.0.0.0为默认路由,即要达到不在路由表里面的网段的包都走0.0.0.0这条规则。气死,我们可以"通用"理解为代表"本机地址",1234在程序中体现为绑定的1234端口号 0.0.0.0: *——目的地址IP/Port信息。

Local Address

  1. 部分0.0.0.0:22表示监听服务器上所有的ip地址上的22端口

  2. :::22 这个也表示监听本地所有ip的22端口,跟上面的区别是这里表示的是IPv6地址,上面的0.0.0.0表示的是本地所有IPv4地址NOTE “:::”这三个:的前两个"::",是"0:0:0:0:0:0:0"的缩写,相当于IPv6的"0.0.0.0",就是本机的所有IPv6地址,第三个:是IP和端口的分隔符

  3. 127.0.0.1:3310 这个表示监听本机的loopback地址的3310端口(如果某个服务只监听了回环地址,那么只能在本机进行访问,无法通过tcp/ip 协议进行远程访问)

  4. ::1:323 这个表示监听IPv6的回环地址的323端口,::1表示IPv6的loopback地址

State 列共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。

符号 状态解释
LISTEN 首先服务器要打开一个socket进行监听,状态为LISTEN
the socket is listening for incoming connections
SYN_SENT 客户端通过应用程序调用connect进行active open,于是客户端tcp发送一个SYN以请求建立一个链接,之后状态设置为SYN_SENT
socket is actively attempting to establish a connection
SYN_RECV 服务端发出ACk确认包给客户端,状态变为SYN_RECV
a connection request has been received from the network
ESTABLISHED 代表打开一个连接,双方可以进行或者已经在数据交互了
the socket has an established connection
FIN_WAIT1 主动关闭服务端应用程序,tcp发送FIN请求关闭连接,之后进入FIN_WAIT1状态
the socket is closed, and the connection is shutting down.
CLOSE_WAIT 被动关闭,服务端接收到FIN请求后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT状态
the remote end has shut down, waiting for the socket to close
FIN_WAIT2 主动关闭接收到ACK后,就进入了FIN_WAIT2状态
connection is closed, and the socket is waitng for a shut down from the remote end.
LAST_ACK 服务端关闭一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接,这导致发送一个等待原来向服务端发送连接中断请求的确认FIN,死后进入LAST_ACK
the remote end has shut down, and the socket is closed. Waiting for anknowledgement.
TIME_WAIT 在主动关闭端接收到FIN后,就会向对方发送ACk确认包,并进入TIME_WAIT状态。
the socket is waiting after close to handle packets still in the networks.
CLOSING both sockets are shutting down but we still don't have all our data sent
CLOSED 连接结束
UNKNOWN 未知的状态

参数

-a或--all:显示所有连线中的Socket; 
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; 
-c或--continuous:持续列出网络状态; 
-C或--cache:显示路由器配置的快取信息; 
-e或--extend:显示网络其他相关信息; 
-F或--fib:显示FIB; 
-g或--groups:显示多重广播功能群组组员名单; 
-h或--help:在线帮助; 
-i或--interfaces:显示网络界面信息表单; 
-l或--listening:显示监控中的服务器的Socket; 
-M或--masquerade:显示伪装的网络连线; 
-n或--numeric:直接使用ip地址,而不通过域名服务器; 
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; 
-o或--timers:显示计时器; 
-p或--programs:显示正在使用Socket的程序识别码和程序名称; 
-r或--route:显示Routing Table; 
-s或--statistice:显示网络工作信息统计表; 
-t或--tcp:显示TCP传输协议的连线状况; 
-u或--udp:显示UDP传输协议的连线状况; 
-v或--verbose:显示指令执行过程; 
-V或--version:显示版本信息; 
-w或--raw:显示RAW传输协议的连线状况; 
-x或--unix:此参数的效果和指定"-A unix"参数相同; 
--ip或--inet:此参数的效果和指定"-A inet"参数相同。

组合命令

标签:0.0,netstat,tcp,honey,命令,master,linux,root
来源: https://www.cnblogs.com/ivanlee717/p/16298654.html