Using ss COMMAND on Linux

ss 커맨드는 Socket Statistics 의 약자이며, netstat 명령어를 대체 하는 명령어이다.

CentOS7 부터는 netstat 대신 기본적으로 ss 커맨드가 내장되어 있고, CentOS6 에 익숙해져 있는 사용자들은 netstat 커맨드에 익숙해져 있어 ss 커맨드가 낯설게 느껴질 수 있다.

netstat 대신 ss 를 써야 하는 이유는 크게 아래와 같다.

1. netstat 의 맨 페이지에서도 [This program is obsolete. Replacement for netstat is ss] 라고 명시되어 있다.
2. netstat 의 경우 /proc/net/tcp 아래 파일들을 읽어와 정보를 뿌려준다. 즉 파일을 읽는다는 뜻이다.
3. ss 의 경우 NETLINK 라이브러리를 이용하여 커널에서 정보를 읽고 뿌려준다. 당연히 파일을 읽는 netstat 보다 빠르다.

기본적인 사용법은 아래와 같다.

Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help		this message
   -V, --version	output version information
   -n, --numeric	don't resolve service names
   -r, --resolve       resolve host names
   -a, --all		display all sockets
   -l, --listening	display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes	show process using socket
   -i, --info		show internal TCP information
   -s, --summary	show socket usage summary

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet	display PACKET sockets
   -t, --tcp		display only TCP sockets
   -u, --udp		display only UDP sockets
   -d, --dccp		display only DCCP sockets
   -w, --raw		display only RAW sockets
   -x, --unix		display only Unix domain sockets
   -f, --family=FAMILY display sockets of type FAMILY

   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE	Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

활용 Tip.

Established 확인

[root@172-16-11-5 /]# ss | head -n 2
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port   
ESTAB      0      64          172.16.11.5:ssh             172.16.20.2:51877

TCP 확인

[root@172-16-11-5 /]# ss -lt
State      Recv-Q Send-Q     Local Address:Port                 Peer Address:Port
LISTEN     0      100            127.0.0.1:smtp                            *:*
LISTEN     0      128                    *:zabbix-agent                    *:*
LISTEN     0      128                    *:zabbix-trapper                  *:*
LISTEN     0      128                    *:10061                           *:*
LISTEN     0      128                    *:http                            *:*
LISTEN     0      128                    *:ssh                             *:*
LISTEN     0      100                  ::1:smtp                           :::*
LISTEN     0      128                   :::mysql                          :::*
LISTEN     0      128                   :::ssh                            :::*

UDP 확인

[root@172-16-11-5 /]# ss -ul
State      Recv-Q Send-Q              Local Address:Port            Peer Address:Port   
UNCONN     0      0                   172.16.11.249:domain               *:*       
UNCONN     0      0                   127.0.0.1:domain                   *:*

IPv4 소켓 확인

[root@172-16-11-5 /]# ss -l4
Netid  State      Recv-Q Send-Q        Local Address:Port             Peer Address:Port                
tcp    LISTEN     0      100              127.0.0.1:smtp                      *:*                    
tcp    LISTEN     0      128                      *:zabbix-agent              *:*                    
tcp    LISTEN     0      128                      *:zabbix-trapper            *:*                    
tcp    LISTEN     0      128                      *:10061                     *:*                    
tcp    LISTEN     0      128                      *:http                      *:*                    
tcp    LISTEN     0      128                      *:ssh                       *:*

소켓별 메모리

[root@172-16-11-5 /]# ss -ltm
State      Recv-Q Send-Q                      Local Address:Port                 Peer Address:Port                
LISTEN     0      100                             127.0.0.1:smtp                        *:*
     skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0,d0)
LISTEN     0      128                                     *:zabbix-agent                *:*
     skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0,d0)
LISTEN     0      128                                     *:zabbix-trapper              *:*
     skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0,d0)
LISTEN     0      128                                     *:10061                       *:*
     skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0,d0)
LISTEN     0      128                                     *:http                        *:*
     skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0,d0)
LISTEN     0      128                                     *:ssh                         *:*
     skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0,d0)
LISTEN     0      100                                   ::1:smtp                        :::*
     skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0,d0)
LISTEN     0      128                                    :::mysql                       :::*
     skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0,d0)
LISTEN     0      128                                    :::ssh                         :::*
     skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0,d0)

소켓별 통계 (내가 가장 자주 쓰는 것중 하나이다)

[root@172-16-11-5 /]# ss -s
Total: 1002 (kernel 1650)
TCP:   220 (estab 4, closed 203, orphaned 0, synrecv 0, timewait 203/0), ports 0

Transport Total     IP        IPv6
*	  1650      -         -        
RAW	  1         0         1        
UDP	  0         0         0        
TCP	  17        14        3        
INET	  18        14        4        
FRAG	  0         0         0

위 예제 말고도 옵션 및 필터 조합으로 많은 정보를 확인할 수 있다.

You may also like...