1. netstat基本参数:
参数 | 说明 | 输出 |
-a | 列出所有连接。 列出 tcp, udp 和 unix 协议下所有套接字的所有连接。然而这些信息还不够详细,管理员往往需要查看某个协议或端口的具体连接情况。 | ![]() |
-t; -u | 只列出 TCP 或 UDP 协议的连接 | |
-n | 禁用反向域名解析,加快查询速度。 默认情况下 netstat 会通过反向域名解析技术查找每个 IP 地址对应的主机名。这会降低查找速度。 | ![]() |
-l | 只列出监听中的连接 | ![]() |
-p | 获取进程名、进程号以及用户 ID | ![]() |
-c | netstat 持续输出 |
|
-s | 打印网络统计数据 | ![]() |
-i | 打印网络接口 结合e选项更有好的显示 | ![]() |
2. 关于tcp的state
tcp的连接情况,网上有很多资料,包括状态图。但是结合上面的输出信息看,最直观的方式就是结合下面的这个状态流来看:
<客户端> CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED <服务端> CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED |
上面的状态流比状态图更好理解,而且通过netstat看到的tcp状态基本都在这里,重要的是很多状态通过看名字就可以知道该端口是作为服务端还是客户端使用。比如TIME_WAIT和CLOSE_WAIT,前者是客户端状态,后者是服务端状态。
由于某些状态出现概率极低,netstat看到的tcp状态主要包括:ESTABLISHED, TIME_WAIT, LISTEN, CLOSE_WAIT.
鉴于状态图的经典地位,这里还是贴出来:
3. 与lsof对比
主要参数 | 说明 |
lsof -c abc | 显示abc进程现在正在打开的文件 |
lsof -d 4 | 显示使用文件描述符为4的所有进程 |
lsof -p 12 | 显示进程号为12的进程打开的所有文件 |
lsof abc.txt | 显示开启文件abc.txt的进程 |
lsof -i:22 | 显示22端口现在被什么程序占用 |
lsof +d /usr/local/ lsof +D /usr/local/ | 显示指定目录下被进程开启的文件,+d不会遍历该目录下的所有子目录,+D会遍历该目录下的所有子目录 |
lsof有权限控制,只能看到本用户的信息,所以一般我们会在root下运行lsof,这样才能充分发挥其效果。
另外二者侧重点不一样,lsof侧重于文件本身交互,netstat侧重于网络交互。