netstat、ss對比使用

從下面這個圖來看,netstat和ss都是網絡相關的監控,netstat在協議棧中每一層都可以做監控統計:TCP、路由表、網絡接口、協議等,但是在Linux中,netstat已經不爲推薦,取而代之的是ss。

 

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要快。

根據博客http://www.cnblogs.com/wangkangluo1/archive/2012/05/15/2500844.html的測試

同樣的大量socket連接情況下,netstat和ss獲取同樣的統計數據時的耗時,ss明顯比netstat少很多。我們也可以簡單測試一下在少數socket情況下(基本無差別):

time netstat -atn以及time ss -atn對比

 

netstat屬於net-tools工具集,ss屬於ipoute工具集。替換方案如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章