1.ss命令简介
•ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中 tcp_diag。tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。
2.ss与netstat
•在最新的Linux系统里面,netstat的部分命令已经被更为强大的ss取代了,netstat已过时。ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
•上图为stackoverflow社区里一片文章对这两个命令的评论,下图为ss和netstat监控的区别,ss是获取的socket的信息,而netstat是通过解析/proc/net/下面的文件来获取信息包括Sockets,TCP/UDP,IP,Ethernet信息
3.ss命令探索
•使用ss --help查看netstat常用命令
•ss -tnl 查看主机监听的端口
•ss -tlr 解析IP和端口号
•ss -s 查看概要信息
•ss -at获取tcp socket ss -au获取udp socket
•通过 dst/src/dport/sprot 语法来过滤连接的来源端口和目标端口
显示大于等于50的端口
•显示状态为established的ssh连接
•time命令分别获取通过netstat和ss命令获取程序和占用资源所用时间
可以看出ss的效率比netstat高出不少
4.总结
•ss命令性能出色且功能丰富,可以用来替代 netsate 命令成为我们日常查看 socket 相关信息的利器。其实抛弃 netstate 命令已经是大势所趋,有的 Linux 版本默认已经不再内置 netstate 而是内置了 ss 命令。
•当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接•cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,当服务器维持的连接达到上万个的时候,使用netstat等于浪费生命,而用ss才是节省时间。
•而ss快的秘诀在于它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux内核中第一手的信息,这就确保了ss的快捷高效。当然,如果系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢(但仍然比netstat要快)。