netstat 还能这么玩儿?

简介: 一次摸鱼的机会,看到群里小伙伴问了一嘴 netstat -tnpl 这个命令是干啥的,netstat 这个命令用过很多次,但是我其实也没有认真研究,但是这是一个问题,我不能放过它,而且 netstat 这个命令我日常就用来查询端口的监听状态了,所以趁着这次机会,一起搞懂 netstat 这个命令。

一次摸鱼的机会,看到群里小伙伴问了一嘴 netstat -tnpl 这个命令是干啥的,netstat 这个命令用过很多次,但是我其实也没有认真研究,但是这是一个问题,我不能放过它,而且 netstat 这个命令我日常就用来查询端口的监听状态了,所以趁着这次机会,一起搞懂 netstat 这个命令。

netstat 这个命令在 Linux 、Windows 和 MacOS 操作系统下都兼容,不同的是,netstat 在 UNIX 下显示详细信息的命令是 man netstat ,而在 Linux 和 Windows 下面是 netstat --help

Linux 下的 netstat 命令

当我在 Linux 下执行 man netstat 命令之后,系统显示出来的提示着实让我吓一大跳,看来这个命令内容很多啊!不要被这么长的描述吓到,我们一步一步来。

微信图片_20220417162844.jpg

首先来了解一下 netstat 这个命令是干啥的。

官方给我们的解释就是

netstat -- show network status

列出网络状态

但是这网络状态都有啥呢?带着疑问,我在 Linux 下执行了一下。

微信图片_20220417162849.jpg

打印出来是一个六元组,六元组每一列的内容分别是

image.gif

仔细看了一下这个六元组,这好像表明 netstat 这个命令是用于监控传入和传出的网络连接和状态的一个命令行工具啊

从整体上来看,netstst 的输出结果可以分为两部分,一部分是 Active Internet connections,称为活跃 TCP 连接,其中的 Recv-Q 和 Send-Q 指的是客户端发送队列和客户端接收队列。这两个队列的值一般都是 0 ,如果不是 0 的话表示有消息堆积还没有发出去/取出,这种情况一般很少见到。

另外一部分是 Active UNIX domain sockets, 称为 活跃的 Unix 域套接字,这部分中的 socket 和网络 socket 套接字一样,不同的是,这块只能用来本地通信,性能要比网络 socket 高。Active UNIX domain sockets 也是一个六元组,分别表示

微信图片_20220417162852.jpg

netstat 参数释义

下面我们来解释一下 netstat --help 列出来的一些参数,我们从最常见的一些参数开始入手,这样大家看起来也能形成阶段性记忆,不至于失去重点。

netstat -a

-a 这个参数默认会监控所有的 socket 连接。

微信图片_20220417162856.jpg

包括已经监听的、已经建立连接的、客户端发送的等待服务器的和未被监听都会被列出来。

netstat -at/-t

netstat -atnetstat -t 这俩后缀都是用来监听与 TCP 协议有关的端口,不同的是 netstat -at 会监听所有 State(状态)下的端口,而 netstat -t 仅仅会监听 ESTABLISHED 状态的端口。

netstat -at

微信图片_20220417162859.jpg

netstat -t

微信图片_20220417162903.jpg

netstat -au/-u

同样的,netstat -aunetstat -u 都会监控与 UDP 有关的端口,不同的是 netstat -au 会监听所有 State(状态)下的端口,而 netstat -u 仅仅会监听 ESTABLISHED 状态的端口。

netstat -au

微信图片_20220417162906.jpg

netstat -u

微信图片_20220417162910.jpg

我这里测试是没有监控已经建立连接状态下的 UDP 协议。

netstat -ap

这条命令用于列出程序运行的端口,常用的命令是

netstat -ap|grep '程序名'

比如我们要找 http 程序,就是 Netstat -ap|grep http

微信图片_20220417162913.jpg

还可以直接列出端口号

netstat -ap|grep 8080

微信图片_20220417162917.jpg

不过需要注意下,并不是所有的程序都能被找到,没有权限的不会显示,使用 root 权限可以查询所有信息。

netstat -l

netstat -l 用于监听正在处于监听状态的端口(读起来还真有那么点费劲,为了读起来更顺畅,后面直接使用列出替换监听)。

微信图片_20220417162921.jpg

netstat -lt 只用于列出所有监听 TCP 端口。

微信图片_20220417162924.jpg

netstat -lu 只用于列出所有监听 UDP 端口。

微信图片_20220417162928.jpg

netstat -lx 只用于列出所有监听 UNIX 端口。

微信图片_20220417162930.jpg

netstat -s

netstat -s用于列出所有端口的统计信息。

微信图片_20220417162933.jpg

netstat -st用于列出 TCP 端口的统计信息。

微信图片_20220417162935.jpg

netstat -su用于列出 UDP 端口的统计信息。

微信图片_20220417162939.jpg

netstat -p

netstat -p 可以与其他参数一起使用,例如 netstat -pt 就可以列出服务名称和 PID 号。

微信图片_20220417162945.jpg

netstat -c

使用 netstat -c 将每隔一秒列出网络信息。

微信图片_20220417162948.jpg

netstat -r

netstat -r用于列出路由核心信息。

微信图片_20220417162951.jpg

netstat --verbose

这条命令会列出系统支持的地址族(Address Family)

微信图片_20220417162954.jpg

Address Family 简单来说就是底层是使用的哪种通信协议来递交数据的,如 AF_INET 用的是 TCP/IPv4;AF_INET6 使用的是 TCP/IPv6;而 AF_LOCAL 或者 AF_UNIX 则指的是本地通信(即本次通信是在当前主机上的进程间的通信),一般用绝对路径的形式来指明。

netstat -i

netstat -i 用来列出网络接口数据包,包括传输和接收具有 MTU(最大传输单元)的数据包。

微信图片_20220417162957.jpg

另外,netstat -ie 还用于列出内核接口表,和 ifconfig 命令很相似

微信图片_20220417163000.jpg

关于这个问题

所以,回到文章刚开始的那个疑问,netstat -tnpl 是干什么用的,其实这就是几个参数的组合

  • -t :仅列出与 tcp 有关的信息
  • -n:以数字形式列出
  • -p:列出正在使用 socket PID 和 程序名称
  • -l:列出正在监听的服务器 socket

我们执行一下这个命令。

微信图片_20220417163004.jpg

另外,在 Linux 中,已经推荐使用 ss 来替代 netstat ,使用 ip route 来替代 netstat -r ,使用 ip -s link 来替代 netstat -i ,使用 ip addr 来替代 netstat -g 了。

相关文章
|
9月前
|
测试技术
第二次使用脚本后想学点东西:grep
第二次使用脚本后想学点东西:grep
51 0
|
2月前
|
网络协议 网络性能优化
第十二问:TCP慢起动详细解释
TCP的慢启动是其拥塞控制的一部分,旨在防止网络拥塞。在连接建立初期,TCP逐步增加发送的数据量,通过接收方的ACK确认来调整拥塞窗口(cwnd)。初始阶段cwnd较小,每收到一个ACK,cwnd增加1个MSS,发送速率大致翻倍。当cwnd达到慢启动阈值(ssthresh)时,进入拥塞避免阶段,cwnd改为线性增长。若发生数据丢失或网络拥塞,TCP会减小cwnd,重新进入慢启动。慢启动通过动态调整发送速率,确保网络不被瞬时大流量压垮。
59 0
|
6月前
|
监控 Linux Shell
但凡我早点知道这个Linux批量ping的脚本,也不至于现在还单身!
但凡我早点知道这个Linux批量ping的脚本,也不至于现在还单身!
128 1
|
6月前
|
缓存 网络协议 Linux
网工,这10条常用命令,没用过3条的,算我输!
网工,这10条常用命令,没用过3条的,算我输!
|
XML 安全 网络协议
上帝之眼Nmap简介及命令大全
本篇文章首先对黑客常用的工具Nmap(上帝之眼)做了一个基本介绍,然后对Nmap的常用命令做了一个很详细的汇总,包括Nmap常用命令的解释说明,详情请看正文。
204 1
上帝之眼Nmap简介及命令大全
|
Linux Shell
学点Linux命令没坏处(常用的内置命令)
linux操作系统提供了一些内置的命令,掌握这些有利于我们日常对linux的使用,以及shell脚本的开发维护。下面简单了解几个常用的
|
Java
|
消息中间件 自然语言处理 监控
这些最常用的Linux命令,每一条都应该会,没有借口!
linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心。
|
移动开发 网络协议 应用服务中间件