article/linux/linux_netstat.md
2023-03-23 16:55:59 +08:00

3.8 KiB
Raw Blame History

该 netstat 的命令用来显示网络状态

传统上它用于问题确定而不是性能测量。但是netstat 命令可用于确定网络上的流量,以确定性能问题是否是由于网络拥塞引起的。

在 netstat 的关于所配置的网络接口,诸如以下的流量命令显示信息:

与所有sockets关联的任何协议控制块的地址以及所有sockets的状态 通信子系统中接收,传输和丢弃的数据包数 每个接口的累积统计信息 路线及其状态 "netstat" 命令参数:

-r--route显示路由表信息 -g--groups显示多重广播功能群组组员名单 -s--statistics按照每个协议来分类进行统计。默认的显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6 的统计信息。 -M--masquerade显示网络内存的集群池统计信息 -v--verbose命令显示每个运行中的基于公共数据链路接口的设备驱动程序的统计信息 -W--wide不截断IP地址 -n进制使用域名解析功能。链接以数字形式展示(IP地址),而不是通过主机名或域名形式展示 -N--symbolic解析硬件名称 -e--extend显示额外信息 -p--programs与链接相关程序名和进程的PID -t所有的 tcp 协议的端口 -x所有的 unix 协议的端口 -u所有的 udp 协议的端口 -o--timers显示计时器 -c--continuous每隔一个固定时间执行netstat命令 -l--listening显示所有监听的端口 -a--all显示所有链接和监听端口 -F--fib显示转发信息库(默认) -C--cache显示路由缓存而不是FIB -Z--context显示套接字的SELinux安全上下文 命令使用举例

netstat -anp显示系统端口使用情况 netstat -nuplUDP类型的端口 netstat -ntplTCP类型的端口 netstat -na|grep ESTABLISHED|wc -l统计已连接上的状态为"established" netstat -l只显示所有监听端口 netstat -lt只显示所有监听tcp端口

  1. LISTEN首先服务端需要打开一个socket进行监听状态为LISTEN。来自远方TCP端口的连接请求
  2. SYN_SENT客户端通过应用程序调用connect进行active open。于是客户端tcp发送一个SYN以请求建立一个连接状态置为SYN_SENT。在发送连接请求后等待匹配的连接请求
  3. SYN_RECV服务端应发出ACK确认客户端的 SYN同时自己向客户端发送一个SYN状态置为SYN_RECV。在收到和发送一个连接请求后等待对连接请求的确认
  4. ESTABLISHED代表一个打开的连接双方可以进行或已经在数据交互了。代表一个打开的连接数据可以传送给用户
  5. FIN-WAIT-1主动关闭(active close)端应用程序调用close于是其TCP发出FIN请求主动关闭连接之后进入FIN_WAIT1状态。等待远程TCP连接中断请求或先前的连接中断请求的确认
  6. CLOSE-WAIT被动关闭(passive close)端TCP接到FIN后就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序)并进入CLOSE_WAIT。等待从本地用户发来的连接中断请求
  7. FIN-WAIT-2主动关闭端接到ACK后就进入了 FIN-WAIT-2。从远程TCP等待连接中断请求
  8. LAST-ACK被动关闭端一段时间后接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN等待对方的ACK这就进入了LAST-ACK。等待原来发向远程TCP的连接中断请求的确认
  9. TIME-WAIT在主动关闭端接收到FIN后TCP 就发送ACK包并进入TIME-WAIT状态。等待足够的时间以确保远程TCP接收到连接中断请求的确认
  10. CLOSING比较少见。等待远程TCP对连接中断的确认
  11. CLOSED被动关闭端在接受到ACK包后就进入了closed的状态。链接结束没有任何连接状态
  12. UNKNOWN未知的Socket状态