zoukankan      html  css  js  c++  java
  • linux包之iproute之ss命令

    概述

    [root@localhost ~]# rpm -qa|grep iproute
    iproute-2.6.32-31.el6.x86_64

    当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。
    天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。(但仍然比 netstat要快。)

    ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。
    但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。当我们打开的socket数量很多时,netstat就会变得慢了。

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

    当服务器维持3万个socket连接,Admin需要计算具体的连接数量时,不同情况的耗时如下:
    netstat -at | wc 耗时 15.60 秒
    ss -atr | wc 耗时 5.40 秒(未利用tcp_diag)
    ss -atr | wc 耗时 0.47 秒(利用tcp_diag)

    对比统计服务器并发连接数
    time netstat -ant | grep EST | wc -l
    time ss -o state established | wc -l

    net-tools是一套标准的Unix网络工具,用于配置网络接口、设置路由表信息、管理ARP表、显示和统计各类网络信息等等,但是遗憾的是,这个工具自2001年起便不再更新和维护了。
    netstat命令是net-tools工具集中的一员:
    iproute,这是一套可以支持IPv4/IPv6网络的用于管理TCP/UDP/IP网络的工具集,这套工具由Stephen Hemminger负责维护和升级,目前的大版本号是2。
    ss命令是iproute工具集中的一员:

    从某种意义上说,iproute工具集几乎可以替代掉net-tools工具集,具体的替代方案是这样的:

    用途 net-tool(被淘汰)  iproute2
    接口 ifconfig        ip addr, ip link
    路由表 route        ip route
    邻居 arp          ip neigh
    VLAN vconfig        ip link
    隧道 iptunnel        ip tunnel
    组播 ipmaddr        ip maddr
    统计 netstat        ss

    解释

    ss的选项既不多也不复杂,除去非功能性选项(-h/-v)外,ss共有22个选项。
    每一个选项都是既支持短选项(如-s),也支持长选项(如–summary)。
    我们不会在这里一一介绍,因为这样既枯燥又乏味,而且不出三分钟,你就会昏昏欲睡了。所以,我们会从实际需求和实际问题出发,这样效果会好些。

    样例

    ss列出本地哪个进程连接到x server
    # ss -x src '/tmp/.X11-unix/*' -p

    $ ss -s

    本地打开的端口:
    $ ss -l
    $ ss -ln
    $ ss -lp

    TCP,UDP,RAW,UNIX sockets:
    $ ss -t -a
    $ ss -u -a
    $ ss -w -a
    $ ss -x -a

    ss dst 1.85.49.230 -n
    ss src 192.168.2.10:10001 -n

    $ ss -lp src :80 想看当前机器的80端口被谁占用了:
    $ lsof -i :80 也可以看到是谁占用了80
    $ ss sport = :http
    $ ss dport > :1024
    $ ss sport < :32000
    $ ss sport eq :22
    $ ss dport != :22
    $ ss state connected sport = :http
    $ ss ( sport = :http or sport = :https )
    $ ss -o state fin-wait-1 ( sport = :http or sport = :https ) dst 192.168.1/24
    多个子表达式之间可以组合,跟tcpdump一样,可以用or and not来组合。但括号要用转义符号表示。
    遇到 "(" 等符号需要转义,要么使用 "" 要么使用 "'"。

    我们可以根据socket的状态来进行过滤,也可通过端口与ip地址进行过滤。也就是我们在命令格式里面看到的STATE-FILTER与ADDRESS-FILTER。
    $ ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]

    首先看看STATE-FILTER,STATE-FILTER可用的过滤条件有:

    LISTEN:侦听来自远方的TCP端口的连接请求
    SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
    SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
    ESTABLISHED:代表一个打开的连接
    FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
    FIN-WAIT-2:从远程TCP等待连接中断请求
    CLOSE-WAIT:等待从本地用户发来的连接中断请求
    CLOSING:等待远程TCP对连接中断的确认
    LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
    TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
    CLOSED:没有任何连接状态

    state 后面可以接下面这些参数:
    established
    syn-sent
    syn-recv
    fin-wait-1
    fin-wait-2
    time-wait
    closed
    close-wait
    last-ack
    listen
    closing
    all : All of the above states
    connected : All the states except for listen and closed
    synchronized : All the connected states except for syn-sent
    bucket : Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
    big : Opposite to bucket state.

    再看看ADDRESS-FILTER,ADDRESS-FILTER用于过滤端口与地址。而且可以进行表达式组合。可用的子表达式有:
    1. dst ADDRESS_PATTERN
    2. src ADDRESS_PATTERN
    3. dport RELOP PORT
    4. sport RELOP PORT
    5. autobound
    其中ADDRESS_PATTERN为ip地址与端口匹配,ip:port,可以用*代替。RELOP为<= >=或==。

  • 相关阅读:
    TSQL与PL/SQL的比较
    春天预防生病
    PyG(pytorchgeometric)安装
    TensorFlow 安装与环境配置(anaconda下)
    古诗今语
    多标签分类和多分类
    RequestsDependencyWarning: urllib3 (1.26.7) or chardet (2.3.0)/charset_normalizer (2.0.4) doesn't match a supported version!
    Anacoda 安装pytorch
    所有的业务系统都是在做数据的维护和读取
    解决ORA04091行触发器中访问变异表的难题
  • 原文地址:https://www.cnblogs.com/createyuan/p/3713855.html
Copyright © 2011-2022 走看看