一,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/
說明:作者:劉宏締 郵箱: 371125307@qq.com
二,查看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)
