当前位置: 首页 > Linux

Linux下netstat命令详解

时间:2023-04-06 19:19:00 Linux

Linux下netstat命令详解一、简介netstat是一个控制台命令,是一个非常有用的监控TCP/IP网络的工具。它可以显示路由表、实际网络连接以及每个网络接口设备的状态信息。netstat用于显示IP、TCP、UDP和ICMP协议相关的统计数据,一般用于查看本机各端口的网络连接状态。除非你想为netstat和你的设置创建默认设置:[root@sy-suz-srv51~]#netstatActiveInternetconnections(w/oservers)ProtoRecv-QSend-QLocalAddressForeignAddressStatetcp00k8sdev。sui:sun-sr-httpsk8sdev.suiyi.com.:34880SYN_RECVtcp00k8sdev.suiyi.com.c:237910.1.62.21:47910ESTABLISHMENTtcp00k8sdev.suiyi.com.c:2379k8sdev.suiyi.com.:37790.ESTABLISHMENTtcp;00sy-suz-srv:pcsync-https10.1.62.162:49200建立tcp00k8sdev.suiyi.com.:52866k8sdev.sui:sun-sr-https建立tcp00k8sdev.suiyi.com.:37728k8sdev.suiyi.com.c:2379ESTABLISHtcp00k8sdev.sui:sun-sr-httpsk8sdev.suiyi.com.:52852ESTABLISHtcp00k8sdev.sui:sun-sr-https10.1.62.162:32841ESTABLISHtcp00sy-suz-。srv:pcsync-httpssy-suz-srv51:60094ESTABLISHtcp00localhost:webcachelocalhost:40136ESTABLISHtcp00k8sdev.suiyi.com.:3546610.1.62.21:sun-sr-httpsESTABLISHEDtcp00k8sdev.suiyi.com.:3435810.1.62.21:sun-sr-httpsESTABLISHEDActiveUNIXdomainsockets(w/oservers)ProtoRefCnt标志类型状态I-NodePathunix3[]DGRAM18442/run/systemd/notifyunix2[]DGRAM18444/run/systemd/cgroups-agentunix2[]DGRAM23822/var/run/chrony/chronyd.sockunix8[]DGRAM18455/run/systemd/journal/socketunix18[]DGRAM18457/dev/logunix2[]DGRAM14151/var/run/nscd/socketunix2[]DGRAM584/run/systemd/shutdowndunix3[]流连接124439388/运行/dbus/system_bus_socketunix3[]STREAMCONNECTED42312/run/systemd/journal/stdoutunix3[]流连接39909unix3[]流连接21675unix3[]流连接47538unix3[]流连接124585242/var/run/docker/containerd/docker-containerd.sockunix3[]STREAMCONNECTED21658unix2[]STREAMCONNECTED30160unix3[]STREAMCONNECTED33750/run/systemd/journal/stdoutunix3[]STREAMCONNECTED124614293@/containerd-shim/moby/c44e49ee0f86d8a4109afb176701795c64f44655abb1861275bbd3b2a9f76394/shim.sockunix3[]STREAMCONNECTED124609611@/containerd-shim/moby/a736ba153c07f0bbf099ae1a1069530e35bfa28ae93f8f235d6c35a6c5ed9ce7/shim.sockunix3[]STREAMCONNECTED124601653@/containerd-shim/moby/20d3fd59d03455d45b1da2636fca25d0edd79dac1947c17045a797eb8506157c/shim.socknetstat的输出可以分为两部分1.ActiveInternetconnectionsActiveTCPconnections,其中“Recv-Q”和“Send-Q”指的是接收队列和发送队列。这些数字通常应为0。否则,包裹将在队列中堆积。这只会在极少数情况下发生。2.ActiveUNIXdomainsocketsActiveUnixdomainsockets(与网络套接字相同,但只能用于本地通信,性能可提高一倍)。列名说明:Proto:显示连接使用的协议。RefCnt:表示连接到这个socket的进程号。类型:显示套接字的类型。状态:显示套接字的当前状态。Path:表示连接到socket的其他进程使用的路径名。3、netstat-a(all)常用参数显示所有选项,默认不显示LISTEN相关。-t(tcp)只显示与tcp相关的选项。-u(udp)只显示与udp相关的选项。-n拒绝显示别名,所有能显示的数字都转换成数字。-l只列出处于Listening状态的服务。-p显示建立相关链接的程序名-r显示路由信息,路由表-e显示扩展信息,如uid等-s根据每个协议进行统计-c定时执行netstat命令.LISTEN和LISTENING的状态只能用-a或-l才能看到。四、netstat网络状态详解一个正常的TCP连接会经历三个阶段:1.TCP三次握手;2、数据传输;3、TCP如图四次挥手:SYN:(SynchronizeSequenceNumbers,同步序列号)只有在三次握手建立TCP连接时才有效。表示一个新的TCP连接请求。ACK:(AcknowledgmentNumber,确认号)是对TCP请求的确认标志,同时提示对端系统已成功接收到所有数据。FIN:(结束标志,FINish)用于结束一个TCP会话。但是对应的端口还是打开的,准备接收后续的数据。LISTEN:首先,服务器需要打开一个socket进行监听,状态为LISTEN,表示socket正在监听传入的连接。侦听来自远程TCP端口的连接请求。SYN_SENT:客户端通过应用程序调用connect进行主动打开。于是clienttcp发送一个SYN请求建立连接,然后状态设置为SYN_SENT,表示socket正在主动尝试建立连接。发送连接请求后,等待匹配的连接请求。SYN_RECV:服务器应该发送一个ACK来确认客户端的SYN,同时向客户端发送一个SYN,然后设置状态为SYN_RECV,表示已经收到来自网络的连接请求。接收并发送连接请求后,等待连接请求确认。ESTABLISHED:表示一个打开的连接,双方可以执行或已经交换数据,该套接字已建立连接。代表一个打开的连接,可以向用户传输数据。FIN_WAIT1:主动关闭(activeclose)终端应用调用close,于是其TCP发送FIN请求主动关闭连接,然后进入FIN_WAIT1状态。套接字已关闭,连接正在关闭。等待来自远程TCP的连接终止请求,或前一个连接终止请求的确认。CLOSE_WAIT:被动关闭(passiveclose)TCP收到FIN后,发送ACK响应FIN请求(其接收也作为文件尾传递给上层应用),进入CLOSE_WAIT,远端有关闭,等待套接字关闭。等待来自本地用户的连接终止请求。FIN_WAIT2:主动关闭终端并收到ACK后,进入FIN-WAIT-2,Connection关闭,socket等待来自远端的shutdown。等待来自远程TCP的连接中断请求。LAST_ACK:被动关闭end一段时间后,收到end-of-file的应用会调用CLOSE关闭连接。这导致它的TCP也发送一个FIN,等待对方的ACK。进入LAST-ACK,远端已经关闭,套接字关闭。等待确认。等待原来发送给远程TCP确认的连接中断请求。TIME_WAIT:TCP主动关闭端收到FIN后,发送ACK包,进入TIME-WAIT状态。套接字在关闭后等待处理仍在网络中的数据包。等待足够的时间以确保远程TCP收到连接中断请求的确认。CLOSING:相对罕见,两个套接字都已关闭,但我们仍然没有发送所有数据。等待远程TCP确认连接中断。CLOSED:被动关闭端收到ACK包后进入关闭状态。连接结束,套接字未被使用。没有连接状态。TIME_WAIT状态的形成只发生在主动关闭连接的一侧。主动关闭方收到被动关闭方的FIN请求后,向对方成功发送ACK后状态由FIN_WAIT2变为TIME_WAIT,必须等待两倍的MSL(MaximumSegmentLifetime,MSL是一个数据报的时间可以存在于互联网络中)时间过后,双方可以将状态更改为CLOSED以关闭连接。目前在RHEL中维持TIME_WAIT状态的时间是60秒。Linux相关的keepalive参数1.tcp_keepalive_time–INTEGER启用keepalive时TCP发送keepalive消息的频率。(默认:2hours)一个连接需要在TCP开始发送keepalive检测包之前的空闲时间,以秒为单位。2.tcp_keepalive_probes–INTEGERTCP发送了多少个keepalive探测,直到它决定连接断开。(默认值:9)发送的TCPkeepalive探测包的最大数量,默认为9。如果发送了9个keepalive探测包,则如果客户端仍然没有响应,则关闭连接。3.tcp_keepalive_intvl–INTEGER发送探测的频率。乘以tcp_keepalive_probes是时候终止没有响应的连接,在探测开始后。默认值:75秒,即连接将在重试约11分钟后中止。数据包间隔,默认为75秒。五、常用netstat相关命令1、列出所有端口#netstat-a2、列出所有tcp端口#netstat-at3、列出所有udp端口#netstat-au4、只显示监听端口#netstat-l5、只列出所有监听tcpports#netstat-lt6,只列出所有监听的udp端口#netstat-lu7,列出所有监听的UNIX端口#netstat-lx8,显示所有端口的统计信息#netstat-s9,显示TCP或UDP端口的统计信息#netstat-stor-su10,PID和进程名在输出中显示#netstat-p11,在netstat的输出中不显示主机,端口和用户名(host,portoruser)当你不想要主机,端口和用户名时要显示,使用netstat-n。将使用数字代替这些名称。它还可以加快输出速度,因为不需要比较查询。netstat-an如果只是不想显示这三个名称之一,使用以下命令#netsat-a--numeric-ports#netsat-a--numeric-hosts#netsat-a--numeric-users12,不断输出netstat信息#netstat-c13,找出程序运行的端口#netstat-ap|grep':80'14,查看与某个服务端口连接最多的IP地址(前20个)#netstat-nat|grep"10.1.62.23:443"|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-nr|head-2015,各种TCP状态列表#netstat-nat|awk'{print$6}'statistics#netstat-nat|awk'{print$6}'|sort|uniq-csort#netstat-nat|awk'{print$6}'|sort|uniq-c|sort-rn#netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'16.直接统计tcp监听个数#netstat-ant|厕所-升