Linux常用系统分析工具-网络

netstat

netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。netstat的常用的选项如下:

-a(all):显示所有选项;
-t(tcp):仅显示停车票相关选项;
-u(udp):仅显示udp相关选项;
-l(listen):仅列出Listen监听的服务状态;
-p(program):显示建立相关链接的程序名;
-r(route):显示路由信息,路由表;
-e(extend):显示扩展信息;
-n(numeric数字的):直接使用ip地址,而不通过域名服务器;
-c :每个一个固定时间,执行该netstat命令。

在这里我们简单复习一下TCP三次握手和四次挥手的过程,便于下面解释netstat中tcp的各种状态。

TCP三次握手的过程如下:

(1)主动连接端发送一个SYN包给被动连接端;

(2)被动连接端收到SYN包后,发送一个带ACK的SYN包给主动连接端。

(3)主动连接端发送一个带ACK标志的包给被动连接端,握手动作完成。

TCP的四次挥手过程如下:

(1)主动关闭端发送一个FIN包给被动关闭端。

(2)被动关闭端收到FIN包后,发送一个ACK包给主动关闭端。

(3)被动关闭端发送了ACK包后,再发送一个FIN包给主动关闭端。

(4)主动关闭端收到FIN包后,发送一个ACK包。当被动关闭端收到ACK后,四次挥手动作完成,连接断开。

下面我们解释一下netstat中tcp连接对应的各种状态。

(1)LISTEN:侦听状态,等待远程机器的连接请求。

(2)SYN_SEND:在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。

(3)SYN_RECV:在TCP三次握手期间,主动接收端收到SYN包后,进入SYN_RECV状态。

(4)ESTABLISHED:完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。

(5)FIN_WAIT_1:在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。

(6)FIN_WAIT_2:在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。

(7)TIME_WAIT:在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多2MSL时间,让被动关闭端收到ACK包。

(8)CLOSING:在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到了对方的FIN包,此时进入CLOSING状态。

(9)CLOSE_WAIT:在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。

(10)LAST_ACK:在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。

netstat -te(显示出所有的tcp连接)执行起来的效果如下:

img

netstat的常用方法:

netstat -p | grep 19626:得到进程号19626所打开的所有端口;
netstat -tpl:查看当前tcp监听端口,需要显示监听的程序名;
netstat -c 2:每隔2秒执行一次netstat,持续输出。

lsof

lsof命令用于查看进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。在使用TCP的UDP的时候,系统在后台都为该应用程序分配了一个文件描述符。无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。lsof的使用示例如下:

img

输出的各项含义如下:

COMMAND:进程名称;
PID:进程标识符;
USER:进程所有者;
FD:文件描述符,应用程序通过文件描述符识别该文件,如cwd、txt等;
TYPE:文件类型,如DIR,REG等;
DEVICE:指定磁盘的名称;
SIZE:文件的大小;
NODE:索引节点(文件在磁盘上的标识);
NAME:打开文件的名称。


lsof的常用方法:
lsof abc.txt:查看所有打开了文件abc.txt的进程;
lsof -p pid:显示进程打开的所有文件。

推荐文章