据说ss命令可以代替nestat命令

作者: 程序猿编码 | 来源:发表于2020-04-28 23:49 被阅读0次

    ss是Socket Statistics的缩写。ss命令用来显示处于活动状态的套接字信息。它可以显示和netstat类似的内容。可以显示类似的内容是不是可以看做代替netstat呢?

    在Linux CentOS7 中ss命令是iproute软件包的一部分,默认已经安装。

    为什么使用ss

    netstat从proc文件系统获取所需要的信息。当服务器的socket连接数量变得非常大时,执行速度都会很慢。当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。

    天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。

    当然这些都不是我们关注的重点,下面我讲解如何使用ss命令查看各种信息。具体使用语法如下:

    语法:

    ss(选项)
    

    选项:

    -h:显示帮助信息;
    -V:显示指令版本信息;
    -n:不解析服务名称,以数字方式显示;
    -a:显示所有的套接字;
    -l:显示处于监听状态的套接字;
    -o:显示计时器信息;
    -m:显示套接字的内存使用情况;
    -p:显示使用套接字的进程信息;
    -i:显示内部的TCP信息;
    -4:只显示ipv4的套接字;
    -6:只显示ipv6的套接字;
    -t:只显示tcp套接字;
    -u:只显示udp套接字;
    -d:只显示DCCP套接字;
    -w:仅显示RAW套接字;
    -x:仅显示UNIX域套接字。
    

    列出已建立的连接

    默认情况下,如果我们运行ss命令而没有指定其他选项,它将显示所有已建立连接的打开的非侦听套接字的列表,例如TCP,UDP或UNIX套接字。

    查看TCP/UDP连接

    使用-t(TCP)参数查看TCP连接,而使用-u(UDP)参数查看UDP socket,我们还可以使用-l选项专门列出当前正在侦听连接的套接字,而不是列出所有的套接字。

    在后面的例子中,你会看到我将结合多种选择,以快速过滤掉,从而达到我们的目的。

    显示进程

    查看到某个连接后,怎么知道是哪个进程的连接呢?我们可以用-p选项打印出拥有套接字的进程或PID号。

    ss -pl
    

    拖动滚动条到最后可以看到,-p参数显示了这条连接的进程信息,可以看到,该进程是gnome-shell,进程id为2237,并且这条连接的文件描述符为22。

    users:((“gnome-shell”,pid=2237,fd=22))
    

    查看TCP相关定时器信息

    我们知道在TCP中,有很多定时器,和netstat一样,可以使用-o参数显示定时器相关信息:

    例如上面显示的keepalive定时器剩余时间:

    timer:(keepalive,63min,0)
    

    显示统计信息

    我们可以使用-s选项快速查看统计数据。

    这使我们能够快速看到已建立连接的总数,及各种类型的套接字的计数和IPv4或IPv6的使用情况。

    基于状态的过滤器

    我们可以指定一个套接字的状态,只打印这个状态下的套接字。例如,我们可以指定包括已建立:

    established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, closed-wait, last-ack监听和关闭等状态。

    以下示例显示了所有建立的TCP连接。

    根据端口号进行过滤

    可以通过过滤还可以列出小于(lt),大于(gt),等于(eq),不等于(ne),小于或等于(le),或大于或等于(ge)的所有端口。

    例如,以下命令显示端口号为200或以下的所有侦听端口:

    为了进行比较,可以执行相反的操作,并查看大于200的所有端口:

    查看socket详细信息

    如果想要查看连接更加详细信息呢?比如收到多少数据?上一个ACK是什么时候?mss是多大?拥塞窗口大小是多少?这些信息在分析理解TCP的时候非常有帮助,而查看这些信息只需要使用-i(information)参数即可:

    根据IP或端口过滤socket信息

    你可以使用grep命令来过滤出你需要的信息,但是ss本身提供一些参数用来过滤信息。例如,可以通过ifconfig命令查看本地ip为192.168.43.229的连接:

    src后面跟本地ip:port,而也可以使用dst根据远端ip来过滤信息。

    总结

    本文介绍了ss命令一些实用的用法。如果你想使用ss命令快速检查有关套接字的各种信息,建议你查阅ss的相关帮助手册。

    参考:Linux命令大全

    公众号:程序猿编码

    欢迎关注公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:

    百度网盘

    相关文章

      网友评论

        本文标题:据说ss命令可以代替nestat命令

        本文链接:https://www.haomeiwen.com/subject/dkfwwhtx.html