一,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)