ss - еще одна утилита для исследования сокетов
СИНТАКСИС
ss [опции] [ ФИЛЬТР ]
ОПИСАНИЕ
ss используется для вывода статистики сокетов. Она позволяет отображать информацию, аналогичную netstat. Она может
отображать больше информации о TCP и состоянии, чем другие инструменты.
ОПЦИИ
Когда ни одна опция не используется, ss отображает список открытых не слушающих сокетов (например, TCP/UNIX/UDP), которые имеют установленные соединения.
-h, --help
Показать сводку опций.
-V, --version
Вывести информацию о версии.
-H, --no-header
Подавить строку заголовка.
-Q, --no-queues
Подавить столбцы отправки и приема.
-O, --oneline
Печатать данные каждого сокета в одной строке.
-n, --numeric
Не пытаться разрешать имена служб. Показывать точные значения пропускной способности, а не удобочитаемые.
-r, --resolve
Пытаться разрешить числовые адреса/порты.
-a, --all
Отображать как слушающие, так и не слушающие (для TCP это означает установленные соединения) сокеты.
-l, --listening
Отображать только слушающие сокеты (по умолчанию они опущены).
-B, --bound-inactive
Отображать только TCP-сокеты, которые связаны, но неактивны (не находятся в состоянии прослушивания, подключения и т. д.) (по умолчанию они опущены).
-o, --options
Показать информацию о таймерах. Для протокола TCP формат вывода выглядит следующим образом:
timer:(<имя_таймера>,<время_завершения>,<количество_повторов>)
<имя_таймера>
имя таймера, существует пять типов имен таймеров:
on: означает один из этих таймеров: таймер повторной передачи TCP, таймер ранней повторной передачи TCP и таймер зондирования потери пакетов.
keepalive: таймер удержания TCP в активном состоянии.
timewait: таймер стадии timewait.
persist: таймер зондирования нулевого окна.
unknown: ни один из вышеперечисленных таймеров.
<время_завершения>
сколько времени таймер истечет.
<количество_повторов>
сколько раз произошла повторная передача.
-e, --extended
Показать подробную информацию о сокете. Формат вывода выглядит следующим образом:
uid:<идентификатор_пользователя> ino:<номер_inode> sk:<cookie>
<идентификатор_пользователя>
идентификатор пользователя, которому принадлежит сокет.
<номер_inode>
номер inode сокета в VFS.
<cookie>
уникальный идентификатор сокета.
-m, --memory
Показать использование памяти сокетом. Формат вывода выглядит следующим образом:
skmem:(r<выделенная_память_для_приема>,rb<буфер_приема>,t<выделенная_память_для_отправки>,tb<буфер_отправки>,
f<выделенная_память_для_кэша>,w<очередь_памяти_для_отправки>,o<оптимальная_память>,
bl<бэклог>,d<память_сокет_для_сброса>)
<выделенная_память_для_приема>
память, выделенная для приема пакетов.
<буфер_приема>
общая память, которую можно выделить для приема пакетов.
<выделенная_память_для_отправки>
память, используемая для отправки пакетов (которые были отправлены в слой 3).
<буфер_отправки>
общая память, которую можно выделить для отправки пакетов.
<выделенная_память_для_кэша>
память, выделенная сокетом в качестве кэша, но пока не используемая для приема/отправки
пакетов. Если требуется память для отправки/приема пакетов, память в этом кэше будет
использована до выделения дополнительной памяти.
<wmem_queued>
Память, выделенная для отправки пакета (который еще не был отправлен на уровень 3).
<opt_mem>
Память, используемая для хранения параметров сокета, например, ключа для TCP MD5-подписи.
<back_log>
Память, используемая для очереди `sk_backlog`. В контексте процесса, если процесс принимает пакеты, и получен новый пакет, он помещается в очередь `sk_backlog`, чтобы его мог немедленно обработать процесс.
<sock_drop>
Количество пакетов, отброшенных до их мультиплексирования в сокет.
-p, --processes
Показать процессы, использующие сокет.
-T, --threads
Показать потоки, использующие сокет. Предполагает использование опции -p.
-i, --info
Показать внутреннюю информацию TCP. Могут появиться следующие поля:
ts Показать строку "ts", если установлен параметр timestamp.
sack Показать строку "sack", если установлен параметр sack.
ecn Показать строку "ecn", если установлен параметр explicit congestion notification.
ecnseen
Показать строку "ecnseen", если обнаружен флаг `saw ecn` в полученных пакетах.
fastopen
Показать строку "fastopen", если установлен параметр fastopen.
cong_alg
Имя алгоритма управления перегрузками, алгоритм управления перегрузками по умолчанию - "cubic".
wscale:<snd_wscale>:<rcv_wscale>
Если используется параметр window scale, это поле показывает коэффициент масштабирования отправки и коэффициент масштабирования приема.
rto:<icsk_rto>
Значение таймера повторной передачи TCP, единицы измерения - миллисекунды.
backoff:<icsk_backoff>
Используется для экспоненциальной повторной передачи, фактическое значение таймера повторной передачи равно `icsk_rto << icsk_backoff`.
rtt:<rtt>/<rttvar>
`rtt` - среднее время кругового обмена, `rttvar` - среднее отклонение `rtt`, единицы измерения - миллисекунды.
ato:<ato>
Таймер подтверждения, единицы измерения - миллисекунды, используется для режима отложенного подтверждения.
mss:<mss>
Максимальный размер сегмента.
cwnd:<cwnd>
Размер окна перегрузки.
pmtu:<pmtu>
Значение MTU пути.
ssthresh:<ssthresh>
Порог медленного старта окна перегрузки TCP.
bytes_acked:<bytes_acked>
Количество байтов, для которых получено подтверждение.
bytes_received:<bytes_received>
Количество полученных байтов.
segs_out:<segs_out>
Количество отправленных сегментов.
segs_in:<segs_in>
Количество полученных сегментов.
send <send_bps>bps
Исходящая скорость в битах в секунду.
lastsnd:<lastsnd>
Время, прошедшее с момента отправки последнего пакета, единицы измерения - миллисекунды.
lastrcv:<lastrcv>
Время, прошедшее с момента получения последнего пакета, единицы измерения - миллисекунды.
lastack:<lastack>
Время, прошедшее с момента получения последнего подтверждения, единицы измерения - миллисекунды.
pacing_rate <pacing_rate>bps/<max_pacing_rate>bps
Текущая и максимальная скорость формирования пакетов.
rcv_space:<rcv_space>
Вспомогательная переменная для автоматической настройки TCP-буфера приема сокета.
tcp-ulp-mptcp flags:[MmBbJjecv] token:<rem_token(rem_id)/loc_token(loc_id)> seq:<sn> sfseq:<ssn> ssnoff:<off> maplen:<maplen>
Информация о подпотоке MPTCP.
--tos Показать информацию ToS и приоритета. Могут появиться следующие поля:
tos Байт IPv4 Type-of-Service.
tclass Байт IPv6 Traffic Class.
class_id
Идентификатор класса, заданный net_cls cgroup. Если класс равен нулю, это показывает приоритет, заданный SO_PRIORITY.
--cgroup
Показать информацию cgroup. Могут появиться следующие поля:
cgroup Путь к cgroup v2. Этот путь указан относительно точки монтирования иерархии.
--tipcinfo
Отображает внутреннюю информацию о сокетах TIPC.
-K, --kill
Пытается принудительно закрыть сокеты. Этот параметр отображает сокеты, которые успешно
закрыты, и молча пропускает сокеты, которые не поддерживаются для закрытия ядром. Поддерживает
только IPv4 и IPv6 сокеты.
-s, --summary
Выводит сводную статистику. Этот параметр не анализирует списки сокетов, получая сводную
информацию из различных источников. Это полезно, когда количество сокетов настолько велико,
что анализ /proc/net/tcp становится затруднительным.
-E, --events
Непрерывно отображает сокеты по мере их уничтожения.
-Z, --context
Аналогично параметру -p, но также показывает контекст безопасности процесса. Если используется
параметр -T, также показывает контекст безопасности потока.
Для сокетов netlink(7) контекст инициирующего процесса отображается следующим образом:
Если указан допустимый PID, отображается контекст процесса.
Если назначение — ядро (pid = 0), отображается начальный контекст ядра.
Если ядро или пользователь netlink выделили уникальный идентификатор, контекст отображается как "недоступен". Обычно это указывает на то, что процесс имеет более одного активного сокета netlink.
-z, --contexts
Аналогично параметру -Z, но также отображает контекст сокета. Контекст сокета берется из
связанного inode и не является фактическим контекстом сокета, хранящимся в ядре. Обычно сокеты
маркируются контекстом создающего процесса, однако отображаемый контекст будет отражать любые
правила перехода ролей, типов и/или диапазонов, применяемые политикой, и, следовательно, является
полезной справкой.
-N NSNAME, --net=NSNAME
Переключается в указанное пространство имен сети.
-b, --bpf
Отображает классические фильтры BPF сокетов (только администраторы имеют право получать эту информацию).
-4, --ipv4
Отображает только IPv4 сокеты (псевдоним для -f inet).
-6, --ipv6
Отображает только IPv6 сокеты (псевдоним для -f inet6).
-0, --packet
Отображает пакетные сокеты (псевдоним для -f link).
-t, --tcp
Отображает TCP сокеты.
-u, --udp
Отображает UDP сокеты.
-d, --dccp
Отображает DCCP сокеты.
-w, --raw
Отображает RAW сокеты.
-x, --unix
Отображает Unix-сокеты (псевдоним для -f unix).
-S, --sctp
Отображает SCTP сокеты.
--tipc Отображает TIPC сокеты (псевдоним для -f tipc).
--vsock
Отображает vsock сокеты (псевдоним для -f vsock).
--xdp Отображает XDP сокеты (псевдоним для -f xdp).
-M, --mptcp
Отображает MPTCP сокеты.
--inet-sockopt
Отображает параметры сокетов inet.
-f FAMILY, --family=FAMILY
Отображает сокеты типа FAMILY. В настоящее время поддерживаются следующие семейства: unix,
inet, inet6, link, netlink, vsock, tipc, xdp.
-A QUERY, --query=QUERY, --socket=QUERY
Список таблиц сокетов для вывода, разделенных запятыми. Следующие идентификаторы
распознаются: all, inet, tcp, udp, raw, unix, packet, netlink, unix_dgram, unix_stream, unix_seqpacket, packet_raw, packet_dgram, dccp, sctp, tipc, vsock_stream, vsock_dgram, xdp, mptcp.
Любой элемент в списке может быть опционально предварен восклицательным знаком (!) для исключения
данной таблицы сокетов из вывода.
-D FILE, --diag=FILE
Не отображать ничего, а просто выводить необработанную информацию о TCP-сокетах в FILE после применения фильтров. Если FILE равен -, используется стандартный вывод.
-F FILE, --filter=FILE
Читать информацию о фильтре из FILE. Каждая строка FILE интерпретируется как отдельная команда в командной строке. Если FILE равен -, используется стандартный ввод.
--bpf-maps
Отображать в удобочитаемом формате все локальные для сокета данные BPF для каждого сокета.
--bpf-map-id=MAP_ID
Отображать в удобочитаемом формате локальные для сокета данные BPF для указанного идентификатора карты. Можно использовать несколько раз.
FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
Пожалуйста, обратитесь к официальной документации для получения подробной информации о фильтрах.
STATE-FILTER
STATE-FILTER позволяет создавать произвольные наборы состояний для сопоставления. Его синтаксис — последовательность
ключевых слов state и exclude, за которыми следует идентификатор состояния.
Доступные идентификаторы:
All — все стандартные TCP-состояния: established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, timewait, closed, close-wait, last-ack, listening и closing.
all — все состояния
connected — все состояния, кроме listening и closed
synchronized — все состояния connected, кроме syn-sent
bucket — состояния, которые поддерживаются в виде мини-сокетов, то есть time-wait и syn-recv
big — противоположность bucket
bound-inactive — сокеты, которые привязаны, но в противном случае неактивны (не прослушивают, не устанавливают соединение и т. д.)
EXPRESSION
EXPRESSION позволяет фильтровать на основе определенных критериев. EXPRESSION состоит из серии предикатов, объединенных логическими операторами. Возможные операторы в порядке возрастания
приоритета: or (или | или ||), and (или & или &&) и not (или !). Если между последовательными
предикатами нет оператора, предполагается неявный оператор and. Подвыражения могут быть сгруппированы с помощью "(" и ")".
Поддерживаются следующие предикаты:
{dst|src} [=] HOST
Проверяет, соответствует ли назначение или источник HOST. Подробности см. в разделе СИНТАКСИС HOST.
{dport|sport} [OP] [FAMILY:]:PORT
Сравнивает порт назначения или источник с PORT. OP может быть любым из "<", "<=", "=", "!=", ">=" и ">". Соблюдаются обычные арифметические правила. FAMILY и PORT, как описано в разделе СИНТАКСИС HOST ниже.
dev [=|!=] DEVICE
Сопоставление на основе устройства, которое использует соединение. DEVICE может быть именем устройства или индексом интерфейса.
fwmark [=|!=] MASK
Сопоставление на основе значения fwmark для соединения. Это может быть конкретное значение метки или значение метки, за которым следует "/" и битовая маска, определяющая, какие биты использовать для сравнения. Например, "fwmark = 0x01/0x03" будет соответствовать, если два младших значащих бита fwmark равны 0x01.
cgroup [=|!=] PATH
Сопоставление, если соединение является частью cgroup по данному пути.
autobound
Сопоставление, если порт или путь исходного адреса были назначены автоматически (а не явно указаны).
Большинство операторов имеют псевдонимы. Если оператор не указан, предполагается "=", каждая из следующих групп операторов эквивалентна:
= == eq
!= ne neq
> gt
< lt
>= ge geq
<= le leq
! not
| || or
& && and
СИНТАКСИС ХОСТА
Общий синтаксис хоста: [СЕМЬЯ:]АДРЕС[:ПОРТ].
СЕМЬЯ должна быть одной из семей, поддерживаемых опцией -f. Если она не указана, используется
семья, указанная в опции -f, а если и она не указана, предполагается либо inet, либо inet6.
Обратите внимание, что все условия хоста в выражении должны быть либо одной и той же семьи, либо только inet и inet6. Если есть какая-либо другая комбинация семей, результаты, скорее всего, будут неожиданными.
Форма АДРЕСА и ПОРТА зависит от используемой семьи. "*" можно использовать в качестве подстановочного знака для адреса или порта. Подробности для каждой семьи следующие:
unix АДРЕС является шаблоном glob (см. fnmatch(3)), который будет сравниваться без учета регистра с
адресом unix-сокета. Поддерживаются как имена путей, так и абстрактные имена. Unix-адреса не поддерживают порт, и "\*" не может использоваться в качестве подстановочного знака.
link АДРЕС является именем протокола Ethernet, соответствующего без учета регистра. ПОРТ является либо именем устройства, либо индексом устройства для нужного сетевого интерфейса, как показано в
выводе команды ip link.
netlink
АДРЕС является описателем семейства netlink. Возможные значения можно найти в
/etc/iproute2/nl_protos. ПОРТ является идентификатором порта сокета, который обычно совпадает с
идентификатором процесса-владельца. Значение "kernel" можно использовать для представления ядра (идентификатор порта 0).
vsock АДРЕС является целым числом, представляющим CID-адрес, а ПОРТ — портом.
inet и inet6
АДРЕС является IP-адресом (либо v4, либо v6, в зависимости от семьи) или именем хоста DNS, который разрешается в IP-адрес требуемой версии. IPv6-адрес должен быть заключен в "["
и "]", чтобы однозначно определить разделитель порта. Адрес также может иметь префикс
длины в нотации CIDR (косая черта, за которой следует длина префикса в битах). ПОРТ является либо числовым портом сокета, либо именем службы для соответствующего порта.
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
ss -t -a
Отображение всех TCP-сокетов.
ss -t -a -Z
Отображение всех TCP-сокетов с контекстами безопасности SELinux процесса.
ss -u -a
Отображение всех UDP-сокетов.
ss -o state established '( dport = :ssh or sport = :ssh )'
Отображение всех установленных SSH-соединений.
ss -x src /tmp/.X11-unix/*
Найти все локальные процессы, подключенные к X-серверу.
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24
Отображение всех TCP-сокетов в состоянии FIN-WAIT-1 для нашего Apache в сети 193.233.7/24 и просмотр их таймеров.
ss -a -A 'all,!tcp'
Отображение сокетов во всех состояниях из всех таблиц сокетов, кроме TCP.
СМОТРИТЕ ТАКЖЕ
ip(8), RFC 793 - https://tools.ietf.org/rfc/rfc793.txt (состояния TCP)
АВТОР
ss был написан Алексеем Кузнецовым, <_>.
Эта страница руководства была написана Михаэлем Прокопом <_> для проекта Debian (но может использоваться и другими).