Утилита ss для анализа сетевой статистики в Linux

Утилита ss (socket stat) – это инструмент командной строки, который отслеживает соединения сокетов и отображает статистику сокетов системы Linux. Она может отображать статистику для сокетов TCP, сокетов UDP, сокетов DCCP, сокетов RAW, сокетов домена Unix и многого другого. Ss позволяет отображать информацию, аналогичную netstat, при этом отображает больше информации о TCP и состоянии, чем другие инструменты.

Команда ss работает так же, как и любые другие утилиты командной строки Linux. Если взглянуть на страницу справки по ss (вызвать её можно командой man ss), можно заметить, что тут присутствует гораздо меньше ключей командной строки, чем у netstat. Однако это не говорит о скудных возможностях ss. На самом деле, ss весьма мощный инструмент, который пришел на замену устаревшему netstat.

Часто используемые ключи для ss, обратите внимание ниже приведен пример команды netstat и ключи у обоих утилит одинаковые и соответственно они и выведут похожую информацию:

ss -tulpn
netstat -tulpn

Если запустить ss без аргументов командной строки или опций, она выведет полный список работающих соединений.

# ss -s
Total: 3363 (kernel 3693)
TCP:   809 (estab 467, closed 120, orphaned 0, synrecv 0, timewait 118/0), ports 664
 
Transport Total     IP        IPv6
*	  3693      -         -        
RAW	  0         0         0        
UDP	  1735      1735      0        
TCP	  689       688       1        
INET	  2424      2423      1        
FRAG	  0         0         0   

Опция -t позволяет просматривать сведения по TCP-соединениям, опция -u предназначена для вывода данных по UDP-соединениям, опция -x выводит данные по соединениям Unix. По умолчанию использование опций -t, -u или -x выведет лишь данные по установленным соединениям. Если нужно отобрать соединения, ожидающие подключений, понадобится добавить к вызову команды опцию -a

ss -t показывает активные TCP-соединения.
ss -u показывает активные UDP-соединения.
ss -tlp показывает TCP-соединения и их ассоциированные процессы.
ss -ulp показывает UDP-соединения и их ассоциированные процессы.
ss -s показывает общую статистику по типам сокетов.
  • Вывести все TCP соединения
# ss -t -a
  • Вывести все UDP соединения
# ss -u -a
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port   
UNCONN     0      0           10.161.85.55:49408                    *:*       
UNCONN     0      0           10.161.85.55:48768                    *:*       
UNCONN     276    0           10.161.85.55:21888                    *:*       
  • Узнать, кто занял порт, можно одной из следующих команд (ключ p вывод Pid процесса на порту):
# ss -p state listening '( sport = :443 )'
# ss -tlp '( sport = :443 )'
# ss -p state listening '( sport = :http or sport = :https )'
  • Показать все установленные SMTP-соединения
# ss -o state established '( dport = :smtp or sport = :smtp )'
  • Показать все установленные HTTP-соединения:
# ss -o state established '( dport = :https or sport = :https )'
  • Вывести все сокеты TCP в состоянии FIN-WAIT-1. Перечислите все сокеты TCP в состоянии -FIN-WAIT-1 для нашего httpd в сеть 202.54.1/24 и посмотрите на их таймеры:
# ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 202.54.1/24

Что означают состояния сокетов, смотрите в статье Сокеты TCP и их состояния, ниже пример для TIME_WAIT (сокет закрыт, но ожидает пакеты, ещё находящиеся в сети для обработки):

ss -o state time-wait '( sport = :http or sport = :https )'
PQ VPS сервера в 28+ странах.