Linux入门系统菜鸟

在Linux中的使用ss命令查看网络套接字/网络连接 简述ss与netstat的区别

ss命令是iproute2包的一部分(用于控制TCP/IP网络和流量的工具)。iproute2的目标是替代先前用于配置网络接口、路由表和管理ARP表的标准Unix网络工具套装(通常称之为“net-tools”)。ss工具用于导出套接字统计,它可以显示与netstat类似的信息,且可以显示更多的TCP和状态信息。因为它直接从内核空间获取信息,所以会更快。ss的操作和netstat很像,所以这让它可以很容易就可以取代netstat。netstat属于net-tools工具集,ss属于ipoute2工具集。

在Linux中的使用ss命令查看网络套接字/网络连接 简述ss与netstat的区别

ss命令与netstat的区别

从上面这个图来看,netstat和ss都是网络相关的监控,netstat在协议栈中每一层都可以做监控统计:TCP、路由表、网络接口、协议等,但是在Linux中,netstat已经不为推荐,取而代之的是ss。

另外,netstat属于net-tools工具集,ss属于ipoute2工具集。替换方案如下:

在Linux中的使用ss命令查看网络套接字/网络连接 简述ss与netstat的区别

ss比netstat快的主要原因是,netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多。

当服务器的socket连接数量非常大时(如上万个),无论是使用netstat命令还是直接cat /proc/net/tcp执行速度都会很慢,相比之下ss可以节省很多时间。ss快的秘诀在于,它利用了TCP协议栈中tcp_diag,这是一个用于分析统计的模块,可以获得Linux内核中的第一手信息。如果系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍微慢但仍然比netstat要快。

 

ss的使用与常见选项

ss和netstat很像,默认它会显示已经建立连接的开放的非监听TCP套接字列表。并且你可以用下面的选项过滤输出:

  • -n – 不尝试解析服务名。
  • -r – 尝试解析数字的地址/端口。
  • -a – 显示所有套接字。
  • -l – 显示监听套接字。
  • -p – 显示使用该套接字的进程。
  • -s – 打印统计数据
  • -t – 只显示TCP套接字。
  • -u – 只显示UDP套接字。
  • -d – 只显示DCCP套接字
  • -w – 只显示RAW套接字。
  • -x – 只显示Unix域套接字
  • -f FAMILY – 显示FAMILY套接字的类型。目前支持下面这些族:unix、inet、inet6、link、netlink。
  • -A QUERY – 指定要列出的套接字列表,通过逗号分隔。可以识别下面的标识符:all、inet、tcp、udp、raw、unix、packet、netlink、unixdgram、unixstream、packetraw、packetdgram。
  • -o STATUS – 列出指定状态的套接字

ss 命令示例

1. 显示所有的的TCP端口和使用它们的进程:

  1. # ss tnap

在Linux中的使用ss命令查看网络套接字/网络连接 简述ss与netstat的区别

2. 你可以使用-4 标志来显示IPv4链接,-6标志来显示IPv6链接,比如:

  1. # ss tnap6

在Linux中的使用ss命令查看网络套接字/网络连接 简述ss与netstat的区别

3. 跟上面的行为一样,你只需用u代替t就会显示所有开放的UDP端口。

  1. # ss unap

在Linux中的使用ss命令查看网络套接字/网络连接 简述ss与netstat的区别

4. 你可以使用-s标志来打印各种有用的统计数据:

  1. # ss s

在Linux中的使用ss命令查看网络套接字/网络连接 简述ss与netstat的区别

5. 你可以使用-o标志来检查所有不同状态下的链接,比如显示所有已经建立的连接。

  1. # ss tn o state established p

在Linux中的使用ss命令查看网络套接字/网络连接 简述ss与netstat的区别

(END)


文章参考自: https://linux.cn/article-4372-1.html 以及 https://blog.csdn.net/hustsselbj/