网络常识一:常用工具

作为后端开发,特别是网络游戏后端开发,经常需要处理各种现网问题,其中有不少是网络相关的。

下面列举的工具主要是在 linux 下的,诊断线上服务器问题的时候,往往是分秒必争,所以这些工具都要用得很熟练,才能不耽误事。


1. 工具


1.1 netstat

netstat 可以说是最常用的网络工具了,它的作用就是查看网络状态,tcp、udp、unix socket 都可以。一般是结合 grep 命令来筛选结果。具体如何使用,可以 man 一下: man netstat

linux 下的基础语法是:

usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}netstat [-vWnNcaeol] [<Socket> ...]netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }-n, --numeric            don't resolve names-l, --listening          display listening server sockets-a, --all                display all sockets (default: connected)-p, --programs           display PID/Program name for sockets        <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}{-x|--unix} --ax25 --ipx --netrom<AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet

经常会用的选项:

  • -a 指定所有类型的连接,-t 指定 tcp 连接,-u 指定 udp 连接。
  • -n 禁用解析,这个选项通常要带上,否则会把 ip 地址解析成主机名,反而看不到什么有用的
  • -p 显示进程信息,这个选项通常也要带上
  • -l 只显示 listen 的信息,如果只能查看监听信息,就用这个

linux 例子:

命令作用
netstat -anp | grep 80查看端口号为 80 的所有连接信息
netstat -tnp | grep 80查看端口号为 80 的 tcp 连接信息
netstat -l查看所有的 listen

netstat 在 windows 下也有相应的实现,不过命令参数与 linux 下略有不同,而且过滤结果也不能使用 grep,得使用 find。

windows 例子:

命令作用
netstat -ano | find "80"查看端口号为 80 的所有连接信息
netstat -ano | find "LISTEN"查看所有的 listen

1.2 lsof

lsof 意为 list open files,可以显示被打开的文件以及打开这些文件的进程。unix 一切皆文件,socket 也是文件,所以通过显示文件信息,足以窥探系统的一些运行状态。

如果足够熟练,lsof 可以替代 netstat 和 ps 这两个工具。

1.2.1 lsof 基本要点

  • 没有任何选项时,lsof 会列出所有活跃进程的所有打开文件。

  • 有多个选项,默认执行 “或” 运算,比如同时传递 -i (获取网络信息) -p (获取进程信息),会获得两者的结果。

  • 使用 -a 可以对结果进行 “与” 运算。

关于 “或” 和 “与”,举个例子,想要获得进程 pid 为 191812 的 tcp 连接信息,需要这样写:lsof -p 191812 -i tcp -a,不能只写成 lsof -p 191812 -i tcp。如果没加 ‘-a’,结果将变成进程 pid 为 191812 的所有打开文件以及所有 tcp 连接信息的总和。

1.2.2 lsof 获取网络信息

先列举一些网络相关的用法,基础语法是:

lsof -i [46][protocol][@hostname|hostaddr][:service|port]

要注意,这串东西 [46][protocol][@hostname|hostaddr][:service|port] 是根据需要填的,但要挨在一起,中间不要有空格。 比如 4tcp:9999 或者 tcp@127.0.0.1 或者 4tcp@127.0.0.1:9999

一些例子:

命令作用
lsof -i显示所有网络连接
lsof -i 6仅显示 ipv6 连接
lsof -i tcp仅显示所有 tcp 连接
lsof -i udp仅显示所有 udp 连接
lsof -i :9999显示端口为 9999 的连接
lsof -i :1000,2000显示端口号为 1000 或 2000 的连接
lsof -i :1000-9999显示端口范围从 1000 到 9999 的连接
lsof -i 4tcp@127.0.0.1:9999显示ipv4,tcp协议,连接信息为 127.0.0.1 9999 的连接
lsof -i -s tcp:established显示已经建立的 tcp 连接
lsof -i -s tcp:listen显示等待连接 (listen) 的 tcp 端口

1.2.3 lsof 文件和目录

查看正在使用指定文件和目录的用户或进程。

lsof 文件路径 可以找出打开这个文件的资源信息,比如 lsof /root/a.txt

特别的,如果是用 vim 打开了文件,比如:root/a.txt,则通过 lsof /root/.a.txt.swp 可以找出来。通过 a.txt 是找不到的,因为 vim 打开的是一个 .swp 后缀的临时文件。

1.2.4 lsof 命令、进程、用户

通过 -c 选项可以找出使用指定命令的进程,比如:lsof -c 'sshd' 找出命令为 sshd 的进程打开的所有文件。

如果要配合其实工具使用,可以指定 -t 选项,只打印进程 id 出来。

通过 -p 选项可以找出指定 pid 的进程,比如 lsof -p 2341 找出 pid 为 2341 的进程打开的所有文件。

通过 -u 选项可以找出指定用户打开的文件,比如 lsof -u root 可以找出 root 用户打开的所有文件。

1.2.5 lsof 各列的意义

各列的意义[2],如下:

COMMAND:进程的名称PID:进程标识符PPID:父进程标识符(需要指定-R参数)USER:进程所有者PGID:进程所属组FD:文件描述符,应用程序通过文件描述符识别该文件。如 cwd、txt 等TYPE:文件类型,如DIR、REG等,常见的文件类型REG :常规文件,即普通文件DIR :目录CHR :字符类型BLK :块设备类型UNIX:UNIX 域套接字FIFO:先进先出 (FIFO) 队列IPv4:网际协议 (IP) 套接字DEVICE:指定磁盘的名称SIZE:文件的大小NODE:索引节点(文件在磁盘上的标识)NAME:打开文件的确切名称

FD 的详细信息[2][3],如下:

数字:文件的描述符 id,其中有3个是特别的:0 表示标准输出,1 表示标准输入,2 表示标准错误
cwd :current work dirctory,即应用程序的当前工作目录
txt :program text (code and data),即程序代码
lnn :library references (AIX)
er  :FD information error (see NAME column)
jld :jail directory (FreeBSD)
ltx :shared library text (code and data)
mxx :hex memory-mapped type number xx
m86 :DOS Merge mapped file
mem :memory-mapped file
mmap:memory-mapped device
pd  :parent directory
rtd :root directory
tr  :kernel trace file (OpenBSD)
v86 :VP/ix mapped file一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等,如下: u    :表示该文件被打开并处于读取/写入模式
r    :表示该文件被打开并处于只读模式
w    :表示该文件被打开并处于
space:表示该文件的状态模式为unknow,且没有锁定
-    :表示该文件的状态模式为unknow,且被锁定同时在文件状态模式后面,还跟着相关的锁,如下:  N    :for a Solaris NFS lock of unknown type;
r    :for read lock on part of the file;
R    :for a read lock on the entire file;
w    :for a write lock on part of the file;(文件的部分写锁)
W    :for a write lock on the entire file;(整个文件的写锁)
u    :for a read and write lock of any length;
U    :for a lock of unknown type;
x    :for an SCO OpenServer Xenix lock on part of the file;
X    :for an SCO OpenServer Xenix lock on the entire file;
space:if there is no lock.

1.3 nc

nc 即 netcat,nc 太有用了,它支持 tcp、udp,它可以作为客户端,也可以作为服务端,非常全能。下面举一些使用场景。

一、测试端口是否可以连通

这应该是使用最频繁的用途了。

nc -v 127.0.0.1 9999

-v 可以打印出连接的详情。

连接得上是类似这样提示:“Connection to 127.0.0.1 9999 port [tcp/*] succeeded!”。
连接不上是这样提示:“nc: connect to 127.0.0.1 port 9999 (tcp) failed: Connection refused”。

如果是 udp,则加上 -u 参数:

nc -uv 127.0.0.1 9999

二、监听特定端口

nc -l 9999

这个的意义在于,有时候我们自己的服务端进程无法被远端的客户端连通,需要排除是我们的服务端进程逻辑有问题,还是物理机的网络端口由于硬件或防火墙之类的问题无法连通。

如果是 udp,则加上 -u 参数:

nc -lu 9999

三、传输文件

nc 甚至可以拿来传输文件。

接收端:

nc -l 9999 > recv.txt

发送端:

nc 127.0.0.1 9999 < send.txt

2. 工具的数据来源

2.1 netstat、nstat、ifconfig、ethtool

数据来源[1]:

netstat、nstat 是来自 /proc/net/netstat 和 /proc/net/snmp 的数据;
ifconfig 是读取 /proc/net/dev 下的数据,而后者的数据是从设备在内核的数据结构 net_device 里的结构 rtnl_link_stats64 中获取的;
ethtool 是直接通过 ioctl 下放的方式从同样的结构(net_device 中的 rtnl_link_stats64 )中获取数据;
因此可以认为 ifconfig 和 ethtool 两者看到的网卡相关数据来源是一样的,但是 /proc/net/dev 进行了一定程度的归档,因此 ifconfig 中的 RX dropped = rx_dropped + rx_missed_errors,RX errors = rx_errors。


3. 参考

[1] johnazhang. 关于以ethtool为主的网络指标统计工具之间统计数据关系的研究原创. Available at https://cloud.tencent.com/developer/article/2050526, 2022-07-18.

[2] 琦彦. lsof:获取网络信息、用户操作、进程信息、文件信息. Available at https://blog.csdn.net/fly910905/article/details/88551497, 2019-03-14.

[3] man7. lsof. Available at https://man7.org/linux/man-pages/man8/lsof.8.html.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序在银河麒麟系统下实现开机自启及创建桌面快捷方式

目录 1. 机器环境说明 2. 程序开机自启动设置 2.桌面快捷方式设置 3. 附加说明 1. 机器环境说明 机器安装的银河麒麟操作系统属性如下&#xff1a; 2. 程序开机自启动设置 第1步&#xff1a;编写一个脚本,用于自动化启动&#xff0c;为便于后文描述&#xff0c;该脚本名称…

干货教程【软件篇】| 免费实现游戏加速自由

需要这个游戏加速软件的小伙伴可以关注一下文章底部公众号&#xff0c;回复关键词【zdjs】即可获取。 该软件可以实现免费的游戏加速&#xff0c;实测延迟低体验好&#xff01; 建议看到后赶紧保存下来防止丢失&#xff01; 下面讲一下该软件安装流程~ 通过链接可以得到下面…

2.go语言初始(二)

本篇博客涉及到go 的基础数据类型、 go 语言中的运算符、转义字符、格式化输出、字符串操作 go 语言中的运算符 在 go 语言中&#xff0c;基本数据类型主要包括以下几类&#xff1a;整数类型、浮点数类型、复数类型、布尔类型、字符串类型、字节类型&#xff08;byte&#xf…

Linux进程控制——Linux进程程序替换

前言&#xff1a;Linux进程控制包含了进程终止&#xff0c;进程等待&#xff0c;进程程序替换。走到现在我们也只剩下进程程序替换没介绍了&#xff0c;那么让我们来看看进程程序替换到底是什么&#xff01; 本篇主要内容&#xff1a; 替换原理 替换函数 实现简易shell 我们所创…

【sql】sql中with as 介绍与使用jsqlparser解析sql

文章目录 一. 定义二. 用法三. 解析 一. 定义 with A as (select * from class) 也就是将重复用到的大批量 的SQL语句&#xff0c;放到with as 中&#xff0c;加一个别名&#xff0c;在后面用到的时候就可以直接用。对于大批量的SQL数据&#xff0c;起到优化的作用。 with子句…

Broad Learning System (BLS) 宽度学习系统

宽度学习&#xff08;Broad Learning System, BLS&#xff09;是一种有效的神经网络学习框架&#xff0c;旨在通过扩展网络的宽度而不是深度来提高学习能力和效率。与传统的深度学习相比&#xff0c;宽度学习通过堆叠多层特征节点和增强节点来构建网络&#xff0c;从而避免了深…

oracle 临时表

oracle 临时表 conn scott/tiger --会话内保留行 drop table tmp1; CREATE GLOBAL TEMPORARY TABLE tmp1 ON COMMIT PRESERVE ROWS AS SELECT * FROM emp;SELECT TABLESPACE_NAME,CURRENT_USERS FROM V$SORT_SEGMENT;SELECT * FROM TMP1; INSERT INTO TMP1 SELECT * FROM…

Maven依赖管理项目构建

Maven依赖管理项目构建工具 目录 文章目录 Maven依赖管理项目构建工具目录一、Maven简介1、为什么学习Maven1.1、Maven是一个依赖管理工具1.2、Maven是一个构建工具1.3、结论 2. Maven介绍3. Maven软件工作原理模型图&#xff08;了解&#xff09; 二、Maven安装和配置1. Mave…

PostgreSQL扩展之PGroonga:多语言全文搜索

简介 PGroonga 是一个 PostgreSQL 扩展&#xff0c;它增加了基于 Groonga 的全文搜索索引方法。虽然原生的 PostgreSQL 支持全文索引&#xff0c;但它仅限于基于字母和数字的语言。PGroonga 提供了更广泛的字符支持&#xff0c;使其成为 PostgreSQL 支持的语言的超集&#xff…

(实测验证)Gitee代码托管尝试(一)——克隆/下载

一、登录 Gitee&#xff08;码云&#xff09;代码托管平台&#xff1a; Gitee - 基于 Git 的代码托管和研发协作平台 新建个人账户如下&#xff1a; 二、SSH 公钥设置 1、在git安装目录打开“git-cmd.exe”; 2、通过命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen …

Linux进程概念总结

这里总结下Linux进程概念总结❗ 冯诺依曼&#xff1a; CPU 运算器与控制器RAM 内存&#xff08;存储器&#xff09;Cache 缓存&#xff08;一种技术&#xff09;不属于冯诺依曼体系结构。ROM 磁盘&#xff08;输入输出设备&#xff09;磁盘 既可以从硬盘读取数据也可以向硬盘…

3-3 基于RYU的流量风暴事件原理与响应策略

在传统网络中&#xff0c;存在着一定的广播流量&#xff0c;占据了一部分的网络带宽。同时&#xff0c;在有环的拓扑中&#xff0c;如果不运行某些协议&#xff0c;广播数据还会引起网络风暴&#xff0c;使网络瘫痪。 如有以下的一个网络拓扑结构&#xff08;3_2_topoplus.py) …

零基础学Java第十四天之枚举

枚举 1、理解 枚举&#xff08;Enumeration&#xff0c;通常简写为enum&#xff09;在编程语言中是一种特殊的数据类型&#xff0c;它允许你为变量定义一组命名的常量。这些常量通常表示一组有限的值&#xff0c;比如一周的七天、颜色的集合或者状态的集合等。枚举类型的主要目…

es 分词器(五)之elasticsearch-analysis-jieba 8.7.0

es 分词器&#xff08;五&#xff09;之elasticsearch-analysis-jieba 8.7.0 今天咱们就来讲一下es jieba 8.7.0 分词器的实现&#xff0c;以及8.x其它版本的实现方式&#xff0c;如果想直接使用es 结巴8.x版本&#xff0c;请直接修改pom文件的elasticsearch.version版本号即可…

再谈毕业论文设计投机取巧之IVR自动语音服务系统设计(信息与通信工程专业A+其实不难)

目录 举个IVR例子格局打开&#xff0c;万物皆能IVR - 把《民法典》搬上IVR IVR系统其实可盐可甜。还能可圈可点。 戎马一生&#xff0c;归来依然IVR。 举个IVR例子 以下是IVR系统的一个例子。 当您拨打电话进入IVR系统。 首先检验是否为工作时间。 如是&#xff0c;您将被送入…

基于51单片机的自动浇花器电路

一、系统概述 自动浇水灌溉系统设计方案&#xff0c;以AT89C51单片机为控制核心&#xff0c;采用模块化的设计方法。 组成部分为&#xff1a;5V供电模块、土壤湿度传感器模块、ADC0832模数转换模块、水泵控制模块、按键输入模块、LCD显示模块和声光报警模块&#xff0c;结构如…

垃圾分类管理系统java项目

文章目录 垃圾分类管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;带走&#xff09; 垃圾分类管理系统 一、项目演示 垃圾分类管理系统 二、项目介绍 系统角色&#xff1a;管理员、用户 1、登录、注册功能…

机器人非线性系统反馈线性化与解耦

机器人非线性系统的反馈线性化和解耦是控制理论中的两个重要概念&#xff0c;它们分别用于简化系统分析和设计过程&#xff0c;提高控制系统的性能。 首先&#xff0c;反馈线性化是一种将非线性系统转化为线性系统的技术。在机器人控制中&#xff0c;由于机器人本身是一个强耦…

​python使用selenium进行Web自动化测试​

什么是selenium Selenium 是 ThoughtWorks 提供的一个强大的基于浏览器的 Selenium 是一个用于 Web 应用程序测试的工具&#xff0c;测试直接自动运行在浏览器中&#xff0c;就像真正的用户在手工操作一样。支持的浏览器包括 IE、Chrome 和 Firefox 等。这个工具的主要功能包…

2024042001-计算机网络 - 物理层

计算机网络 - 物理层 计算机网络 - 物理层 通信方式带通调制 通信方式 根据信息在传输线上的传送方向&#xff0c;分为以下三种通信方式&#xff1a; 单工通信&#xff1a;单向传输半双工通信&#xff1a;双向交替传输全双工通信&#xff1a;双向同时传输 带通调制 模拟信号…