1)netstat參數和使用
常用參數-anplt
-a 顯示所有活動的連接以及本機偵聽的TCP、UDP端口
-l 顯示監聽的server port
-n 直接使用IP地址,不通過域名服務器
-p 正在使用Socket的程序PID和程序名稱
-r 顯示路由表
-t 顯示TCP傳輸協議的連線狀況
-u 顯示UDP傳輸協議的連線狀況
-w 顯示RAW傳輸協議的連線狀況
在Linux下,raw格式的數據通常可以通過/proc/net/dev獲得。在Windows平臺,netstat信息可以通過IP Helper API的GetTcpTable和GetUdpTable函數獲得。
2)ss(socket statistics)參數和使用
常用參數和netstat類似,如-anp
-a顯示所有的sockets
-l顯示正在監聽的
-n顯示數字IP和端口,不通過域名服務器
-p顯示使用socket的對應的程序
-t只顯示TCP sockets
-u只顯示UDP sockets
-4 -6 只顯示v4或v6V版本的sockets
-s打印出統計信息。這個選項不解析從各種源獲得的socket。對於解析/proc/net/top大量的sockets計數時很有效
-0 顯示PACKET sockets
-w 只顯示RAW sockets
-x只顯示UNIX域sockets
-r嘗試進行域名解析,地址/端口
統計信息:
ss還可以使用IP地址篩選如ss src xxxxIP:port,以及使用端口篩選ss dport OP PORT,OP支持的運算符有le ge eq ne lt gt。
3)原理對比
ss比netstat快的主要原因是,netstat是遍歷/proc下面每個PID目錄,ss直接讀/proc/net下面的統計信息。所以ss執行的時候消耗資源以及消耗的時間都比netstat少很多。
當服務器的socket連接數量非常大時(如上萬個),無論是使用netstat命令還是直接cat /proc/net/tcp執行速度都會很慢,相比之下ss可以節省很多時間。ss快的祕訣在於,它利用了TCP協議棧中tcp_diag,這是一個用於分析統計的模塊,可以獲得Linux內核中的第一手信息。如果系統中沒有tcp_diag,ss也可以正常運行,只是效率會變得稍微慢但仍然比netstat要快。
同樣的大量socket連接情況下,netstat和ss獲取同樣的統計數據時的耗時,ss明顯比netstat少很多。我們也可以簡單測試一下在少數socket情況下(基本無差別):
time netstat -atn以及time ss -atn對比
netstat屬於net-tools工具集,ss屬於ipoute工具集。替換方案如下: