Linux/Window查網(wǎng)絡(luò)連接/端口/套接字信息的方法大全
Linux/Window如何查網(wǎng)絡(luò)連接/端口/套接字信息?最核心使用的是netstat命令,運(yùn)維/開發(fā)必用,我會(huì)把它的核心用法、所有高頻參數(shù)、實(shí)用組合命令、和ss命令的區(qū)別全部講透,內(nèi)容條理清晰,看完就能直接用
一、netstat 核心作用
netstat = network statistics(網(wǎng)絡(luò)統(tǒng)計(jì)),命令的核心功能:
查詢操作系統(tǒng)中所有的網(wǎng)絡(luò)連接、監(jiān)聽的端口、路由表、網(wǎng)絡(luò)接口狀態(tài)、套接字信息,能清晰看到「本機(jī)和哪些IP建立了連接、哪個(gè)進(jìn)程占用了哪個(gè)端口、哪些端口正在對(duì)外提供服務(wù)」。
適用系統(tǒng):Linux、macOS、Windows全兼容,核心參數(shù)用法基本一致,少量參數(shù)有差異(下文會(huì)標(biāo)注)。
核心定位:排查端口占用、網(wǎng)絡(luò)連接異常、服務(wù)是否啟動(dòng)、是否有異常外聯(lián)的首選命令。
二、netstat 語法格式
netstat [選項(xiàng)參數(shù)]
參數(shù)可以單字母使用(如-t),也可以組合使用(如-tulnp,最常用組合,強(qiáng)烈推薦背下來),參數(shù)之間無順序要求。
三、netstat 高頻核心參數(shù)(必記,按用途分類,好理解)
第一類:按「協(xié)議類型」篩選(只查TCP/UDP連接)
這類參數(shù)用來過濾只顯示指定協(xié)議的網(wǎng)絡(luò)連接,是最基礎(chǔ)的篩選,必用:
-t:只列出 TCP 協(xié)議 的所有連接/監(jiān)聽端口(TCP是可靠傳輸,絕大多數(shù)服務(wù)用TCP:http/https/ssh/mysql等)-u:只列出 UDP 協(xié)議 的所有連接/監(jiān)聽端口(UDP是無連接傳輸:dns/廣播/視頻流等)-w:只列出 RAW原始套接字 相關(guān)連接(極少用,一般不用記)
第二類:按「連接狀態(tài)」篩選(最核心,重中之重)
-l :全稱 listening → 只顯示「正在監(jiān)聽」的端口/套接字
核心意義:一臺(tái)服務(wù)器的「服務(wù)端口」(如nginx的80、ssh的22、mysql的3306)啟動(dòng)后,都會(huì)處于LISTEN監(jiān)聽狀態(tài),等待客戶端連接。執(zhí)行netstat -l就能看到本機(jī)所有對(duì)外提供服務(wù)的端口,排查「服務(wù)是否啟動(dòng)成功」首選。
第三類:實(shí)用補(bǔ)充參數(shù)(必加,提升查詢價(jià)值)
-n :全稱 numeric → 以「數(shù)字形式」顯示所有信息,不做域名/主機(jī)名解析
? 核心作用:
- 速度極快:不加
-n時(shí),netstat會(huì)嘗試把IP解析成域名、把端口號(hào)解析成服務(wù)名(如80→http),耗時(shí)很長(zhǎng); - 結(jié)果準(zhǔn)確:避免解析失敗導(dǎo)致的亂碼/錯(cuò)誤,生產(chǎn)環(huán)境必加
-n,這是鐵律! - 格式統(tǒng)一:IP就是IP、端口就是端口,方便后續(xù)篩選/查看。
-p :全稱 program → 顯示每個(gè)網(wǎng)絡(luò)連接對(duì)應(yīng)的「進(jìn)程PID」和「進(jìn)程名稱」
核心意義:這是netstat最核心的參數(shù)之一!能直接告訴你「哪個(gè)進(jìn)程占用了哪個(gè)端口」,比如查到端口8080被占用,用-p就能精準(zhǔn)定位到是java進(jìn)程還是tomcat進(jìn)程,排查「端口占用」的核心參數(shù)。
注意:Linux系統(tǒng)中,普通用戶執(zhí)行-p可能看不到完整進(jìn)程信息,需要加sudo(如sudo netstat -tulnp)才能查看所有進(jìn)程的PID和名稱,Windows無此限制。
-a :全稱 all → 顯示「所有」的網(wǎng)絡(luò)連接狀態(tài),包含:監(jiān)聽狀態(tài)(LISTEN)、已建立連接(ESTABLISHED)、等待連接(CLOSE_WAIT/TIME_WAIT)、關(guān)閉狀態(tài)等,不加-a默認(rèn)只顯示已建立的連接。
四、netstat 「最常用的4個(gè)組合命令」(重中之重,背下來?。?/h2>
所有參數(shù)的核心價(jià)值都在組合使用,這4個(gè)命令覆蓋了99%的日常使用場(chǎng)景,優(yōu)先級(jí)從高到低排序,按需使用即可,全部都是生產(chǎn)環(huán)境高頻用法:
組合1:netstat -tulnp【????? 封神級(jí),最最常用,沒有之一!】
含義拆解
-t(TCP) + -u(UDP) + -l(監(jiān)聽中) + -n(數(shù)字顯示) + -p(顯示進(jìn)程PID/名稱)
核心作用
查詢本機(jī)上「所有正在監(jiān)聽的TCP/UDP端口」+「對(duì)應(yīng)的進(jìn)程信息」
適用場(chǎng)景
? 檢查服務(wù)是否啟動(dòng)(如:nginx的80端口、mysql的3306、redis的6379是否處于LISTEN狀態(tài))
? 快速查看本機(jī)所有對(duì)外提供的服務(wù)端口,以及端口被哪個(gè)進(jìn)程占用
? 排查「端口被占用」的問題(比如啟動(dòng)tomcat提示8080被占用,執(zhí)行這個(gè)命令直接定位占用進(jìn)程)
典型輸出示例
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5678/nginx tcp6 0 0 :::3306 :::* LISTEN 9102/mysqld udp 0 0 0.0.0.0:53 0.0.0.0:* 7890/named
輸出字段說明(從左到右):協(xié)議 → 接收隊(duì)列 → 發(fā)送隊(duì)列 → 本機(jī)IP:端口 → 遠(yuǎn)程IP:端口 → 狀態(tài) → PID/進(jìn)程名
組合2:netstat -anpt【???? 高頻,查TCP所有連接】
含義拆解
-a(所有連接) + -n(數(shù)字顯示) + -p(進(jìn)程信息) + -t(TCP協(xié)議)
核心作用
查詢本機(jī)「所有TCP協(xié)議的網(wǎng)絡(luò)連接」,包含:監(jiān)聽狀態(tài)(LISTEN)、已建立連接(ESTABLISHED)、TIME_WAIT/CLOSE_WAIT等所有狀態(tài),同時(shí)顯示每個(gè)連接對(duì)應(yīng)的進(jìn)程PID/名稱。
適用場(chǎng)景
? 排查TCP連接異常(如:大量TIME_WAIT連接堆積、有異常的遠(yuǎn)程IP連接本機(jī))
? 查看本機(jī)和哪些遠(yuǎn)程IP建立了TCP連接(比如:本機(jī)的java程序是否連接了指定的mysql服務(wù)器)
組合3:netstat -anpu【??? 高頻,查UDP所有連接】
含義拆解
-a(所有連接) + -n(數(shù)字顯示) + -p(進(jìn)程信息) + -u(UDP協(xié)議)
核心作用
查詢本機(jī)「所有UDP協(xié)議的連接/監(jiān)聽端口」及對(duì)應(yīng)進(jìn)程
適用場(chǎng)景
UDP是無連接協(xié)議,沒有「已建立連接」的狀態(tài),主要用來查看UDP的監(jiān)聽端口(如DNS的53端口、DHCP的67/68端口)。
組合4:netstat -ant【??? 快速查詢,無進(jìn)程信息】
含義拆解
-a(所有) + -n(數(shù)字) + -t(TCP)
核心作用
快速查詢本機(jī)所有TCP連接狀態(tài),不顯示進(jìn)程信息
適用場(chǎng)景
? 不需要知道進(jìn)程信息,只想快速看TCP連接情況,執(zhí)行速度最快,適合服務(wù)器負(fù)載高時(shí)使用。
五、和你上一條命令聯(lián)動(dòng):netstat+grep組合篩選(超實(shí)用!)
和ps -ef | grep xxx的邏輯完全一致,netstat的查詢結(jié)果也可以通過 管道符| + grep 進(jìn)行精準(zhǔn)篩選,這是生產(chǎn)環(huán)境的必殺技,解決「精準(zhǔn)查詢某一個(gè)端口/進(jìn)程/狀態(tài)」的需求,推薦幾個(gè)高頻篩選寫法,全部背下來:
場(chǎng)景1:查詢「指定端口」是否被占用/監(jiān)聽(最常用)
比如查 8080 端口、3306 端口:
# 查8080端口的所有相關(guān)連接/監(jiān)聽狀態(tài) + 進(jìn)程信息 netstat -tulnp | grep 8080 # 查3306端口(mysql)是否在監(jiān)聽 netstat -tulnp | grep 3306
場(chǎng)景2:查詢「指定進(jìn)程」占用的所有端口
比如查 nginx、java、mysql 進(jìn)程對(duì)應(yīng)的端口:
netstat -tulnp | grep nginx netstat -tulnp | grep java netstat -tulnp | grep mysql
場(chǎng)景3:查詢「指定連接狀態(tài)」的所有連接
比如排查是否有大量TIME_WAIT或ESTABLISHED連接堆積:
# 查看所有已建立的TCP連接 netstat -ant | grep ESTABLISHED # 查看所有TIME_WAIT狀態(tài)的TCP連接(這類連接過多會(huì)占用端口資源) netstat -ant | grep TIME_WAIT
六、netstat 輸出中「常見的連接狀態(tài)」解釋(運(yùn)維必懂)
執(zhí)行netstat -anpt會(huì)看到很多STATE(狀態(tài))列的值,這些狀態(tài)是TCP協(xié)議的核心,掌握后能排查絕大多數(shù)網(wǎng)絡(luò)連接異常,記住高頻的5個(gè)即可:
- LISTEN :監(jiān)聽狀態(tài) → 本機(jī)的端口正在等待客戶端連接(服務(wù)已啟動(dòng),正常狀態(tài))
- ESTABLISHED :已建立連接 → 本機(jī)和遠(yuǎn)程主機(jī)的連接已經(jīng)成功建立,正在傳輸數(shù)據(jù)(正常的業(yè)務(wù)連接)
- TIME_WAIT :等待關(guān)閉 → 連接已經(jīng)斷開,系統(tǒng)會(huì)保留該連接一段時(shí)間(默認(rèn)60秒),防止丟包,少量屬于正常,大量則會(huì)占用端口資源
- CLOSE_WAIT :被動(dòng)關(guān)閉 → 對(duì)方已經(jīng)斷開連接,但本機(jī)的程序沒有主動(dòng)關(guān)閉連接,出現(xiàn)大量該狀態(tài)=程序有bug(未釋放連接)
- SYN_RECV :等待同步 → 正在建立TCP三次握手的中間狀態(tài),少量正常,大量則可能是SYN洪水攻擊
七、重要補(bǔ)充:netstatvsss命令(必知)
為什么很多人說「netstat 過時(shí)了」?
netstat 是傳統(tǒng)的網(wǎng)絡(luò)查詢命令,而Linux系統(tǒng)在2.6.25內(nèi)核之后,推出了一個(gè)全新的、性能更強(qiáng)的命令 ss(socket statistics),二者的關(guān)系是:
ss 是 netstat 的「升級(jí)版+替代版」,功能完全覆蓋netstat,且執(zhí)行速度更快、占用資源更少、支持的參數(shù)更多。
核心區(qū)別
- 性能差異:當(dāng)服務(wù)器的網(wǎng)絡(luò)連接非常多(比如幾萬/幾十萬連接)時(shí),
netstat會(huì)非常慢(因?yàn)樗鼜?code>/proc/net/tcp讀取數(shù)據(jù),解析耗時(shí)),而ss直接讀取內(nèi)核的tcp_hashinfo,速度提升百倍以上。 - 功能差異:
ss支持更多高級(jí)篩選(如按連接數(shù)、按端口范圍),能顯示更多內(nèi)核級(jí)的網(wǎng)絡(luò)信息。 - 兼容性:
netstat在部分精簡(jiǎn)版Linux系統(tǒng)(如Alpine)中默認(rèn)未安裝,而ss是默認(rèn)自帶的。
無縫替換:ss對(duì)應(yīng)netstat的核心寫法
ss 的參數(shù)和netstat 高度相似,學(xué)會(huì)netstat后,ss 幾乎零成本上手,推薦的替換寫法(生產(chǎn)環(huán)境優(yōu)先用ss):
# netstat -tulnp 等價(jià)替換(推薦,速度超快) ss -tulnp # netstat -anpt 等價(jià)替換 ss -anpt # 篩選指定端口 ss -tulnp | grep 8080
總結(jié):該用哪個(gè)?
? 日常學(xué)習(xí)/Windows系統(tǒng):放心用 netstat,兼容性無敵,語法簡(jiǎn)單;
? Linux生產(chǎn)環(huán)境/高并發(fā)服務(wù)器:優(yōu)先用 ss,性能碾壓,功能更強(qiáng);
? 面試必答:ss 是 netstat 的替代命令,性能更好,推薦使用。
八、Windows系統(tǒng)中的 netstat 用法(補(bǔ)充)
netstat在Windows中完全通用,只是有2個(gè)小差異,用法幾乎一致,Windows用戶也能直接用:
- Windows中
netstat沒有-p參數(shù),而是用-o參數(shù)來顯示進(jìn)程PID; - Windows中查看端口對(duì)應(yīng)的進(jìn)程名稱,需要結(jié)合任務(wù)管理器(詳細(xì)信息→PID列)。
Windows 高頻寫法
# 查看所有監(jiān)聽的TCP/UDP端口 + PID netstat -tulno # 查指定端口(如8080) netstat -tulno | findstr 8080
九、全文核心知識(shí)點(diǎn)總結(jié)(濃縮精華,方便記憶)
netstat是網(wǎng)絡(luò)狀態(tài)查詢命令,查端口、連接、進(jìn)程占用,Linux/Windows通用;- 核心參數(shù):
-t(TCP)、-u(UDP)、-l(監(jiān)聽)、-n(數(shù)字顯示,必加)、-p(進(jìn)程PID)、-a(所有連接); - 封神組合:
netstat -tulnp→ 查所有監(jiān)聽端口+進(jìn)程,必背; - 精準(zhǔn)篩選:
netstat -tulnp | grep 端口/進(jìn)程名→ 精準(zhǔn)查詢,生產(chǎn)環(huán)境必殺技; - 替代命令:
ss是netstat的升級(jí)版,性能更強(qiáng),參數(shù)幾乎一致,ss -tulnp無縫替換; - 核心狀態(tài):LISTEN(監(jiān)聽)、ESTABLISHED(已連接)、TIME_WAIT(等待關(guān)閉)。
希望這份詳解能幫你徹底掌握netstat命令,它和ps、grep一起,是Linux運(yùn)維/開發(fā)的三大基礎(chǔ)命令,掌握后能解決絕大多數(shù)進(jìn)程和網(wǎng)絡(luò)的排查問題 ?!
以上就是Linux/Window如何查網(wǎng)絡(luò)連接/端口/套接字信息的方法大全的詳細(xì)內(nèi)容,更多關(guān)于Linux/Window查網(wǎng)絡(luò)連接/端口/套接字信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解如何設(shè)置CentOS 7開機(jī)自動(dòng)獲取IP地址
本例中以CentOS 7舉例說明如何設(shè)置Linux開機(jī)自動(dòng)獲取IP地址和設(shè)置固定IP地址。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
Ubuntu/Linux 有關(guān)權(quán)限修改的命令解析
這篇文章主要介紹了Ubuntu/Linux 有關(guān)權(quán)限修改的命令的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11
Apache運(yùn)行模式之standalone和inetd模式介紹
這篇文章主要介紹了Apache運(yùn)行模式之standalone和inetd模式介紹,本文講解了ServerType這個(gè)配置參數(shù),ServerType這個(gè)配置選項(xiàng)指定如何運(yùn)行Apache,需要的朋友可以參考下2015-06-06
詳解安裝Ubuntu Linux系統(tǒng)時(shí)硬盤分區(qū)最合理的方法
這篇文章主要介紹了詳解安裝Ubuntu Linux系統(tǒng)時(shí)硬盤分區(qū)最合理的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
CentOS7.2 忘記root密碼及重置root密碼的簡(jiǎn)單處理方法
這篇文章主要介紹了CentOS7.2 忘記root密碼的簡(jiǎn)單處理方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-08-08

