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 了。

相关文章
|
开发框架 .NET Java
高校在线心理咨询系统的设计与实现(论文+源码)_kaic
高校在线心理咨询系统的设计与实现(论文+源码)_kaic
高校在线心理咨询系统的设计与实现(论文+源码)_kaic
|
14天前
|
数据采集 人工智能 大数据
2025年数据治理工具哪家好?国内数据治理厂商推荐
围绕当前市场需求,对多款主流数据治理工具进行详细解析,为企业IT及数据管理相关部门员工提供有价值的参考,助力企业精准选择数据治理解决方案。
|
关系型数据库 MySQL 数据库
实现淘宝母婴订单实时查询和实时大屏
本场景中订单和婴儿信息存储在MySQL中,使用Flink实时把它写到Elasticsearch中;数据经过分组聚合后,计算出订单数量和婴儿出生的关系,实时展示到Kibana大屏中。
|
物联网 5G
Wi-Fi 7:主要功能、优势和与前代的改进
【8月更文挑战第23天】
1387 0
|
消息中间件 存储 算法
时间轮在Kafka的实践:技术深度剖析
【8月更文挑战第13天】在分布式消息系统Kafka中,时间轮(Timing Wheel)作为一种高效的时间调度机制,被广泛应用于处理各种延时操作,如延时生产、延时拉取和延时删除等。本文将深入探讨时间轮在Kafka中的实践应用,解析其技术原理、优势及具体实现方式。
442 2
|
SQL API 数据库
揭开高效数据层构建的秘密武器:Entity Framework Core 分页查询的最佳实践与性能优化技巧全解析
【8月更文挑战第31天】本文以随笔形式详细探讨了如何在Entity Framework Core中实现分页查询的最佳实践。通过创建基于EF Core的项目,配置数据库上下文,并定义领域模型,文章展示了如何使用`Skip()`和`Take()`方法进行分页查询。此外,还介绍了如何使用惰性加载、显式加载和预加载来优化性能,并通过投影技术减少不必要的数据加载。最后,文章强调了分页查询对于提升应用性能和用户体验的重要性。
441 0
|
机器学习/深度学习 JSON Kubernetes
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
一篇文章讲明白k8s网络插件flannel模式剖析:vxlan、host
677 0
|
JavaScript 前端开发
TypeScript 可以编译成纯 JavaScript,并且可以在任何浏览器上运行,具体应用案例解析
TypeScript 可以编译成纯 JavaScript,并且可以在任何浏览器上运行,具体应用案例解析
325 1
|
JavaScript Oracle 前端开发
小满Vue3第三十六章(Vue如何开发移动端)
如果你用的vite 是 ts 他这个插件并没有提供声明文件我已经帮大家写好了声明文件(良心)
726 0
小满Vue3第三十六章(Vue如何开发移动端)
|
机器学习/深度学习 数据采集 算法
高分SCI必备:使用R语言和机器学习算法解析心脏病中的变量重要性
心脏病是全球范围内主要的致死因素之一[1],给人们的生活和健康带来了巨大的挑战。为了预测和诊断心脏病,研究人员使用了各种机器学习算法,并通过分析变量重要性来理解特征对心脏病的影响。
1396 0