一,ss所屬的包:
[root@blog ~]# whereis ss
ss: /usr/sbin/ss /usr/share/man/man8/ss.8.gz
[root@blog ~]# rpm -qf /usr/sbin/ss
iproute-4.18.0-15.el8.x86_64
通常預設已安裝到系統,如果找不到ss指令時,可以用yum來安裝
[root@blog ~]# yum install iproute
說明:劉宏締的架構森林是一個專注架構的部落格,位址:https://www.cnblogs.com/architectforest
對應的源碼可以通路這裡擷取: https://github.com/liuhongdi/
說明:作者:劉宏締 郵箱: [email protected]
二,檢視ss的版本和幫助:
1,檢視版本
[root@centos8 liuhongdi]# ss --version
ss utility, iproute2-ss180813
2,檢視幫助
[root@centos8 liuhongdi]# ss --help
三,ss的用途:
ss是Socket Statistics的縮寫。
ss指令作用:可以用來擷取socket統計資訊,它可以顯示和netstat類似的内容。
ss的優勢:能夠顯示更多更詳細的有關TCP和連接配接狀态的資訊,
而且比netstat更快速更高效
四,ss常用參數的含義:
# -l 表示隻顯示監聽套接字
# -t 表示隻顯示 TCP 套接字
# -u display only UDP sockets,隻顯示udp套接字
# -n 表示顯示數字位址和端口(而不是名字)
# -p 表示顯示程序資訊
# -s summary,用來顯示 Sockets 摘要
#
-o, --options : 指定過濾用的選項:通常是與網絡計時器相關的資訊:狀态等
五,例子一:檢視處于監聽狀态的端口
# -l 表示隻顯示監聽套接字
# -t 表示隻顯示 TCP 套接字
# -n 表示顯示數字位址和端口(而不是名字)
# -p 表示顯示程序資訊
[root@centos8 liuhongdi]# ss -ltnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:5355 0.0.0.0:* users:(("systemd-resolve",pid=1960,fd=13))
LISTEN 0 128 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=1003,fd=4),("systemd",pid=1,fd=39))
LISTEN 0 32 192.168.122.1:53 0.0.0.0:* users:(("dnsmasq",pid=2548,fd=6))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1241,fd=5))
LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=1253,fd=10))
LISTEN 0 128 [::]:5355 [::]:* users:(("systemd-resolve",pid=1960,fd=15))
LISTEN 0 128 [::]:111 [::]:* users:(("rpcbind",pid=1003,fd=6),("systemd",pid=1,fd=41))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1241,fd=7))
LISTEN 0 5 [::1]:631 [::]:* users:(("cupsd",pid=1253,fd=9))
說明:
netstat 和 ss 的輸出也是類似的,都展示了
輸出字段的說明:
State:套接字的狀态
Recv-Q:接收隊列
Send-Q: 發送隊列
Local Address:Port 本地位址/端口
Peer Address:Port:遠端位址
程序 PID/程序名稱
資料的說明:
1,接收隊列(Recv-Q)和發送隊列(Send-Q)通常應該是 0。
如果值不是 0 時,說明有網絡包的堆積發生。
2, 在不同套接字狀态下,它們的含義不同。
套接字處于連接配接狀态(Established):
Recv-Q 表示套接字緩沖還沒有被應用程式取走的位元組數(即接收隊列長度)。
Send-Q 表示還沒有被遠端主機确認的位元組數(即發送隊列長度)。
套接字處于監聽狀态(Listening):
Recv-Q 表示全連接配接隊列的長度。
Send-Q 表示全連接配接隊列的最大長度
3,什麼是全連接配接?
伺服器收到了用戶端的 ACK,完成了 TCP 三次握手,
然後就會把這個連接配接挪到全連接配接隊列中
這些全連接配接中的套接字,還需要被 accept() 系統調用取走,伺服器才可以開始真正處理用戶端的請求。
什麼是半連接配接隊列?
半連接配接是指還沒有完成 TCP 三次握手的連接配接,連接配接隻進行了一半。
伺服器收到了用戶端的 SYN 包後,就會把這個連接配接放到半連接配接隊列中,
然後再向用戶端發送 SYN+ACK 包
六,例子二:用ss觀察 TCP 連接配接數
[root@centos8 liuhongdi]# ss -s
Total: 1153
TCP: 10 (estab 0, closed 1, orphaned 0, timewait 0)
Transport Total IP IPv6
RAW 1 0 1
UDP 14 9 5
TCP 9 5 4
INET 24 14 10
FRAG 0 0 0
說明:
estab:#已連接配接
closed:#已關閉
orphaned: #孤兒套接字
timewait: #處于關閉連接配接時等待狀态
備注:什麼是TIME_WAIT狀态?
主動關閉方在發送四次揮手的最後一個ACK後會變為TIME_WAIT狀态,持續時間為2MSL(Linux中一個MSL是30秒,是不可配置的)
七,例子三:ss使用選項:
1,顯示所有狀态是established(連接配接已建立)的套接字
[root@centos8 liuhongdi]# ss -o state \'established\'
說明:狀态的取值:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listen
closing
all : 所有以上狀态
connected : 除了listen and closed的所有狀态
synchronized :所有已連接配接的狀态除了syn-sent
bucket : 顯示狀态為maintained as minisockets,如:time-wait和syn-recv.
big : 和bucket相反.
2, 使用src和dst過濾ip
說明:
src 源位址
[root@centos8 liuhongdi]# ss src 192.168.3.14
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.3.14:http 192.168.3.9:53412
tcp ESTAB 0 0 192.168.3.14:http 192.168.3.9:53413
dst 目标位址
[root@centos8 liuhongdi]# ss dst 192.168.3.9
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.3.14:http 192.168.3.9:53412
tcp ESTAB 0 0 192.168.3.14:http 192.168.3.9:53413
還可以指定端口号:
[root@centos8 liuhongdi]# ss src 192.168.3.14:http
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp FIN-WAIT-2 0 0 192.168.3.14:http 192.168.3.9:53412
[root@centos8 liuhongdi]# ss dst 192.168.3.9:53412
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp FIN-WAIT-2 0 0 192.168.3.14:http 192.168.3.9:53412
3,隻指定端口号:
sport 源端口号
[root@centos8 liuhongdi]# ss sport 80
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.3.14:http 192.168.3.9:53482
tcp ESTAB 0 0 192.168.3.14:http 192.168.3.9:53483
dport 目标端口号
[root@centos8 liuhongdi]# ss dport 53482
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.3.14:http 192.168.3.9:53482
八,本地centos的版本:
[root@centos8 conf]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)