轉(zhuǎn)載自 https://blog.csdn.net/weixin_42816196/article/details/86580834
原作者:坑人螺絲釘 2019-01-21 18:00:44 3914 收藏 10
分類專欄: 基礎(chǔ)知識(shí) 運(yùn)維服務(wù)
從下面這個(gè)圖來(lái)看坚冀,netstat和ss都是網(wǎng)絡(luò)相關(guān)的監(jiān)控瞄崇,netstat在協(xié)議棧中每一層都可以做監(jiān)控統(tǒng)計(jì):TCP、路由表件已、網(wǎng)絡(luò)接口嚣潜、協(xié)議等更舞,但是在Linux中掠剑,netstat已經(jīng)不為推薦竟痰,取而代之的是ss尚胞。
1. netstat參數(shù)和使用
常用參數(shù)-anplt
-a 顯示所有活動(dòng)的連接以及本機(jī)偵聽(tīng)的TCP济炎、UDP端口
-l 顯示監(jiān)聽(tīng)的server port
-n 直接使用IP地址,不通過(guò)域名服務(wù)器
-p 正在使用Socket的程序PID和程序名稱
-r 顯示路由表
-t 顯示TCP傳輸協(xié)議的連線狀況
-u 顯示UDP傳輸協(xié)議的連線狀況
-w 顯示RAW傳輸協(xié)議的連線狀況
[root@king ~]# netstat -anutlp | grep 80
tcp6 0 0 :::80 :::* LISTEN 8218/httpd
在Linux下辐真,raw格式的數(shù)據(jù)通承肷校可以通過(guò)/proc/net/dev獲得。在Windows平臺(tái)侍咱,netstat信息可以通過(guò)IP Helper API的GetTcpTable和GetUdpTable函數(shù)獲得耐床。
2. ss(socket statistics)參數(shù)和使用
常用參數(shù)和netstat類似,如-anp
-a顯示所有的sockets
-l顯示正在監(jiān)聽(tīng)的
-n顯示數(shù)字IP和端口楔脯,不通過(guò)域名服務(wù)器
-p顯示使用socket的對(duì)應(yīng)的程序
-t只顯示TCP sockets
-u只顯示UDP sockets
-4 -6 只顯示v4或v6V版本的sockets
-s打印出統(tǒng)計(jì)信息撩轰。這個(gè)選項(xiàng)不解析從各種源獲得的socket。對(duì)于解析/proc/net/top大量的sockets計(jì)數(shù)時(shí)很有效
-0 顯示PACKET sockets
-w 只顯示RAW sockets
-x只顯示UNIX域sockets
-r嘗試進(jìn)行域名解析昧廷,地址/端口
[root@king ~]# ss -anutlp | grep 80
tcp LISTEN 0 128 :::80 :::* users:(("httpd",pid=8223,fd=4),("httpd",pid=8222,fd=4),("httpd",pid=8221,fd=4),("httpd",pid=8220,fd=4),("httpd",pid=8219,fd=4),("httpd",pid=8218,fd=4))
# 統(tǒng)計(jì)信息
[root@king ~]# ss -s
Total: 599 (kernel 1020)
TCP: 9 (estab 1, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 1020 - -
RAW 1 0 1
UDP 6 3 3
TCP 8 4 4
INET 15 7 8
FRAG 0 0 0
3. 原理對(duì)比
ss比netstat快的主要原因是堪嫂,netstat是遍歷/proc下面每個(gè)PID目錄,ss直接讀/proc/net下面的統(tǒng)計(jì)信息木柬。所以ss執(zhí)行的時(shí)候消耗資源以及消耗的時(shí)間都比netstat少很多皆串。
當(dāng)服務(wù)器的socket連接數(shù)量非常大時(shí)(如上萬(wàn)個(gè)),無(wú)論是使用netstat命令還是直接cat /proc/net/tcp執(zhí)行速度都會(huì)很慢眉枕,相比之下ss可以節(jié)省很多時(shí)間恶复。ss快的秘訣在于怜森,它利用了TCP協(xié)議棧中tcp_diag,這是一個(gè)用于分析統(tǒng)計(jì)的模塊谤牡,可以獲得Linux內(nèi)核中的第一手信息副硅。如果系統(tǒng)中沒(méi)有tcp_diag,ss也可以正常運(yùn)行翅萤,只是效率會(huì)變得稍微慢但仍然比netstat要快恐疲。
根據(jù)博客http://www.cnblogs.com/wangkangluo1/archive/2012/05/15/2500844.html的測(cè)試
同樣的大量socket連接情況下,netstat和ss獲取同樣的統(tǒng)計(jì)數(shù)據(jù)時(shí)的耗時(shí)套么,ss明顯比netstat少很多流纹。我們也可以簡(jiǎn)單測(cè)試一下在少數(shù)socket情況下(基本無(wú)差別):
time netstat -atn以及time ss -atn對(duì)比
[root@king ~]# time ss -aut
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:sunrpc *:*
udp UNCONN 0 0 *:entrust-ash *:*
udp UNCONN 0 0 127.0.0.1:323 *:*
udp UNCONN 0 0 :::sunrpc :::*
udp UNCONN 0 0 :::entrust-ash :::*
udp UNCONN 0 0 ::1:323 :::*
tcp LISTEN 0 128 *:sunrpc *:*
tcp LISTEN 0 128 *:ssh *:*
tcp LISTEN 0 100 127.0.0.1:smtp *:*
tcp ESTAB 0 52 192.168.159.11:ssh 192.168.159.1:59869
tcp LISTEN 0 128 :::sunrpc :::*
tcp LISTEN 0 128 :::http :::*
tcp LISTEN 0 128 :::ssh :::*
tcp LISTEN 0 100 ::1:smtp :::*
real 0m0.007s
user 0m0.003s
sys 0m0.003s
[root@king ~]# time netstat -aut
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 52 king:ssh 192.168.159.1:59869 ESTABLISHED
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
tcp6 0 0 [::]:http [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:*
udp 0 0 0.0.0.0:entrust-ash 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp6 0 0 [::]:sunrpc [::]:*
udp6 0 0 [::]:entrust-ash [::]:*
udp6 0 0 localhost:323 [::]:*
real 0m5.242s
user 0m0.015s
sys 0m0.012s
netstat屬于net-tools工具集,ss屬于ipoute工具集违诗。替換方案如下:
————————————————
版權(quán)聲明:本文為CSDN博主「坑人螺絲釘」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議疮蹦,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明诸迟。
原文鏈接:https://blog.csdn.net/weixin_42816196/article/details/86580834