Using ss (Socket Statistics) COMMAND on Linux
netstat 명령어를 대체하는 ss (Socket Statistics) 소개
ss 는 Socket Statistics 의 약자이며, netstat 명령어를 대체 하는 linux 명령어 입니다. CentOS 7 버전부터는 netstat 대신 기본적으로 ss 가 내장되어 있습니다.
이전 버전의 리눅스에 익숙해져 있는 사용자들은 ss 사용이 낯설게 느껴질 수 있습니다. 여전히 netstat 패키지 설치를 지원하기 때문에 그냥 설치하여 사용해도 되지만 netstat 대신 ss 를 써야 하는 이유는 크게 아래와 같습니다.
- netstat 의 맨 페이지를 보시면 This program is obsolete. Replacement for netstat is ss 라고 명시되어 있습니다.
- netstat 는 /proc/net/tcp 아래 파일들을 읽어와 정보를 출력해 줍니다. 즉, 파일을 읽는다는 뜻입니다.
- ss 는 NETLINK 라이브러리를 이용하여 커널에서 정보를 읽고 출력해 주기 때문에 파일을 읽는 netstat 보다 빠릅니다.
아래는 ss 명령어의 Usage 입니다.
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 ]
간단하게 ss 명령어를 사용해 보겠습니다.
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
이 외에도 ss 명령어에 존재하는 옵션 및 필터들의 조합으로 많은 정보를 확인할 수 있습니다. 자세한 내용은 ss(8) – Linux manual page (man7.org) 페이지를 참고 해 주시면 됩니다.
