Linux之ss命令

ss是Socket Statistics的縮寫。顧名思義,ss命令能夠用來獲取socket統計信息,它能夠顯示和netstat相似的內容。但ss的優點在於它可以顯示更多更詳細的有關TCP和鏈接狀態的信息,並且比netstat更快速更高效。html

當服務器的socket鏈接數量變得很是大時,不管是使用netstat命令仍是直接cat /proc/net/tcp,執行速度都會很慢。linux

ss快的祕訣在於,它利用到了TCP協議棧中tcp_diag。tcp_diag是一個用於分析統計的模塊,能夠得到Linux內核中第一手的信息,這就確保了ss的快捷高效。固然,若是你的系統中沒有tcp_diag,ss也能夠正常運行,只是效率會變得稍慢。(但仍然比netstat要快。)segmentfault

ss命令用於顯示socket狀態. 他能夠顯示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等統計. 它比其餘工具展現等多tcp和state信息. 它是一個很是實用、快速、有效的跟蹤IP鏈接和sockets的新工具.SS命令能夠提供以下信息

命令格式

ss [參數]
ss [參數] [過濾

命令功能

比 netstat 好用的socket統計信息,iproute2 包附帶的另外一個工具,容許你查詢 socket 的有關統計信息

命令參數

  • -h, --help 幫助信息
  • -V, --version 程序版本信息
  • -n, --numeric 不解析服務名稱
  • -r, --resolve 解析主機名
  • -a, --all 顯示全部套接字(sockets)
  • -l, --listening 顯示監聽狀態的套接字(sockets)
  • -o, --options 顯示計時器信息
  • -e, --extended 顯示詳細的套接字(sockets)信息
  • -m, --memory 顯示套接字(socket)的內存使用狀況
  • -p, --processes 顯示使用套接字(socket)的進程
  • -i, --info 顯示 TCP內部信息
  • -s, --summary 顯示套接字(socket)使用概況
  • -4, --ipv4 僅顯示IPv4的套接字(sockets)
  • -6, --ipv6 僅顯示IPv6的套接字(sockets)
  • -0, --packet 顯示 PACKET 套接字(socket)
  • -t, --tcp 僅顯示 TCP套接字(sockets)
  • -u, --udp 僅顯示 UCP套接字(sockets)
  • -d, --dccp 僅顯示 DCCP套接字(sockets)
  • -w, --raw 僅顯示 RAW套接字(sockets)
  • -x, --unix 僅顯示 Unix套接字(sockets)
  • -f, --family=FAMILY 顯示 FAMILY類型的套接字(sockets),FAMILY可選,支持 unix, inet, inet6, link, netlink
  • -A, --query=QUERY, --socket=QUERY QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
  • -D, --diag=FILE 將原始TCP套接字(sockets)信息轉儲到文件
  • -F, --filter=FILE 從文件中讀取過濾器信息 FILTER := [ state TCP-STATE ] [ EXPRESSION ]

顯示TCP鏈接

> ss -a -t

image-20210320223316903

顯示UDP連接

> ss -a -u

image-20210320223432189

顯示Sokets摘要

> ss -s

image-20210320223526216

列出當前的established, closed, orphaned and waiting TCP sockets

顯示本地打開的全部端口

> ss -ln

image-20210320223746369

查看進程使用的socket

> ss -pl

image-20210320223928253

找出打開套接字/端口應用程序

> ss -nlp | grep 3306

image-20210320224213577

顯示全部狀態爲established的SMTP鏈接

> ss -o state established '( dport = :smtp or sport = :smtp )'

顯示全部狀態爲Established的HTTP鏈接

> ss -o state established '( dport = :http or sport = :http )'

用TCP 狀態過濾Sockets

> ss -4 state FILTER-NAME-HERE 
> ss -6 state FILTER-NAME-HERE
FILTER-NAME-HERE能夠是下面的任何一個
  • listen:偵聽來自遠方的TCP端口的鏈接請求
  • syn-sent:再發送鏈接請求後等待匹配的鏈接請求(客戶端)
  • syn-recv:再收到和發送一個鏈接請求後等待對方對鏈接請求的確認(服務器)
  • established:表明一個打開的鏈接
  • fin-wait-1:等待遠程TCP鏈接中斷請求,或先前的鏈接中斷請求的確認
  • fin-wait-2:從遠程TCP等待鏈接中斷請求
  • close-wait:等待從本地用戶發來的鏈接中斷請求
  • closing:等待遠程TCP對鏈接中斷的確認
  • last-ack:等待原來的發向遠程TCP的鏈接中斷請求的確認
  • time-wait:等待足夠的時間以確保遠程TCP接收到鏈接中斷請求的確認
  • closed:沒有任何鏈接狀態
  • all : 全部以上狀態
  • connected : 除了listen and closed的全部狀態
  • synchronized :全部已鏈接的狀態除了syn-sent
  • bucket : 顯示狀態爲maintained as minisockets,如:time-wait和syn-recv.
  • big : 和bucket相反.

匹配遠程地址和端口號

> ss dst ADDRESS_PATTERN
> ss dst 192.168.1.1
> ss dst 192.168.21.1:http 
> ss dst 192.168.21.1:smtp 
> ss dst 192.168.21.1:443

將本地或者遠程端口和一個數比較

> ss  sport = :http 
> ss  dport = :http 
> ss  dport \> :1024 
> ss  sport \> :1024 
> ss sport \< :32000 
> ss  sport eq :22 
> ss  dport != :22 
> ss  state connected sport = :http 
> ss \( sport = :http or sport = :https \) 
> ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
ss dport OP PORT 遠程端口和一個數比較;ss sport OP PORT 本地端口和一個數比較。
  • OP 能夠表明如下任意一個:
  • <= or le : 小於或等於端口號
  • >= or ge : 大於或等於端口號
  • == or eq : 等於端口號
  • != or ne : 不等於端口號
  • < or gt : 小於端口號
  • > or lt : 大於端口號

ss 和 netstat 效率對比

  • time netstat -at
  • time ss
> time netstat -at
real    0m10.849s
user    0m0.013s
sys    0m0.008s
> time ss
real    0m0.008s
user    0m0.004s
sys    0m0.004s
用time 命令分別獲取經過netstat和ss命令獲取程序和概要佔用資源所使用的時間。在服務器鏈接數比較多的時候,netstat的效率徹底無法和ss比。

原文連接:https://rumenz.com/rumenbiji/...
微信公衆號:入門小站服務器

相關文章
相關標籤/搜索