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) 페이지를 참고 해 주시면 됩니다.