網絡常識一:常用工具

作為后端開發,特別是網絡游戲后端開發,經常需要處理各種現網問題,其中有不少是網絡相關的。

下面列舉的工具主要是在 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.pswp.cn/web/12951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12951.shtml
英文地址,請注明出處:http://en.pswp.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;雙向同時傳輸 帶通調制 模擬信號…