Команда ss в Linux: подробное руководство по сокетам

Что такое команда ss
Команда ss (socket statistics) показывает информацию о сетевых соединениях и сокетах в удобочитаемом виде. Коротко: ss помогает быстро увидеть, какие службы слушают порты, какие соединения установлены и какие процессы с ними связаны.
Определение в одну строку: ss — инструмент для получения детальной статистики по сокетам и соединениям в Linux.
Важно: ss заменил устаревший netstat — он быстрее и даёт больше деталей.
Когда ss особенно полезен
- Быстрое обнаружение прослушиваемых портов и установленных TCP/UDP-соединений.
- Поиск процесса, удерживающего соединение (PID/имя приложения).
- Фильтрация по состоянию соединения, порту, адресу или интерфейсу.
- Экспорт вывода для логов или дальнейшей обработки.
Важно: для получения PID/имени процесса требуется запуск с правами, дающими доступ к данным процессов (обычно sudo).
Основы использования ss
Базовый синтаксис
ss [опции]Без опций ss по умолчанию выводит список установленных соединений.
ssВ выводе обычно встречаются столбцы:
- Netid — тип сокета (tcp, udp, u_seq, u_str и т. п.).
- State — состояние (ESTAB, LISTEN, UNCONN и пр.).
- Recv-Q — очередь входящих пакетов.
- Send-Q — очередь исходящих пакетов.
- Local address:port — локальный адрес и порт.
- Peer address:port — адрес и порт удалённой стороны.
Показать все сокеты (прослушивающие и непослушивающие)
ss -aПоказать только прослушивающие сокеты
ss -lЗамечание: прослушивающие сокеты часто отображаются в состоянии UNCONN, потому что они ожидают входящих соединений.
Фильтрация по типу сокета (TCP/UDP/Unix)
TCP:
ss -tUDP:
ss -uUnix sockets:
ss -xЧтобы показать все типы вне зависимости от состояния, комбинируйте с -a:
ss -ta
ss -ua
ss -xaФильтрация TCP по состоянию
Фильтр по состоянию помогает быстро найти, например, слушающие или установленные соединения:
ss -t state establishedПоддерживаемые состояния: established, closed, listening, closing, time-wait и др.
Показывать только IPv4 или IPv6
IPv4:
ss -4IPv6:
ss -6Можно комбинировать с фильтрами состояний:
ss -4 state established
ss -6 state establishedФильтрация по порту
ss поддерживает фильтры dport и sport (destination/source port). Пример: найти соединения, где исходный порт 39700 или назначенный порт https:
ss -ta '( dport = :https or sport = :39700)'Комбинируйте с состоянием:
ss -ta state established '( dport = :https or sport = :https )'Показать «сырые» (raw) сокеты
ss -w
ss --rawФильтрация по адресу назначения или интерфейсу
Показать соединения с конкретным адресом:
ss dst 192.0.2.5Можно также фильтровать по устройству/интерфейсу в зависимости от вашей системы.
Показать PID и имя процесса
Чтобы увидеть PID и имя процесса, используя TCP:
sudo ss -t -pЕсли требуется подробная информация о процессе, используйте ps с найденным PID.
Сводная статистика
ss -sВывод показывает общее число соединений, распределение по типам и состояниям.
Сохранение вывода в файл
ss > output.txtИспользование вместе с grep и другими утилитами
Если легко забыть синтаксис ss, можно фильтровать текстовый вывод:
ss -t | grep ESTABКомбинируйте с awk, sed, jq (после преобразования в JSON) или используйте скрипты для автоматизации наблюдения.
Быстрый шпаргалка — Cheat sheet (часто используемые команды)
| Задача | Команда |
|---|---|
| Показать все соединения | ss -a |
| Показать прослушивающие | ss -l |
| Только TCP | ss -t |
| Только UDP | ss -u |
| Показать PID/процесс | sudo ss -t -p |
| Фильтр по порту | ss -ta ‘( dport = :443 )’ |
| IPv4/IPv6 | ss -4 / ss -6 |
| Сводная статистика | ss -s |
| Сырые сокеты | ss -w |
Частые сценарии и готовые команды
- Найти, кто слушает порт 80:
sudo ss -ltnp 'sport = :80'- Показать все установленные соединения и сортировать по локальному порту (пример через awk/sort):
ss -t | awk '{print $5" "$6}' | sort- Найти соединения для конкретного процесса (используйте PID из ps):
ps aux | grep nginx
sudo ss -p | grep nginxКогда ss может дать неверную или неполную картину (когда он «не работает»)
- Недостаточно прав: без sudo опция -p не покажет PID/имя процесса.
- Сетевые неймспейсы: ss по умолчанию смотрит в текущем неймспейсе; контейнеры и network namespaces нужно проверять отдельно.
- Динамично меняющаяся система: при высокой нагрузке вывод может быстро устаревать — используйте периодические снимки или мониторинг.
- ss не заменяет сниффер пакетов: если нужно увидеть содержимое трафика, используйте tcpdump/wireshark.
Альтернативы и когда их использовать
- netstat — устарел, но всё ещё встречается в старых системах; предоставляет похожую информацию, но медленнее.
- lsof -i — показывает файлы и процессы, связанные с сетевыми соединениями; полезно для поиска файлового контекста процесса.
- tcpdump/wireshark — анализ пакетов и инсайты в содержимое трафика.
- iproute2 (ip) — для работы с маршрутами и интерфейсами, дополняет ss.
Выбор: ss для состояния соединений и процессов, tcpdump для пакетного анализа, lsof когда нужен файловый контекст.
Мышление и эвристики при диагностике сети (mental models)
- Слой приложения → транспорт → сеть: ищите проблему сверху вниз. Если порт слушается — смотрите процесс; если соединение установлено, смотрите маршрутизацию; если пакеты не доходят — сниффер.
- «Снимок» vs «поток»: ss даёт снимок в момент времени. Для трендов используйте периодический сбор.
- Разделяй и властвуй: фильтруйте по типу (TCP/UDP), состоянию и порту, затем детализируйте до PID.
Ролевые чеклисты
Администратор (on-call):
- Проверить ss -ta для аномалий в количестве соединений.
- ss -t state time-wait — убедиться, что нет чрезмерного накопления TIME-WAIT.
- sudo ss -t -p — найти процессы с большим количеством соединений.
- Сохранить вывод и прикрепить к тикету.
Разработчик сервиса:
- Проверить ss -ltnp для подтверждения, что сервис слушает правильный интерфейс/порт.
- При отказе сервиса — сверить порт и PID с systemd/journalctl.
SRE/Инженер по сетям:
- Сравнить ss -s с нормой для обнаружения всплеска входящих соединений.
- Использовать ss в сочетании с tcpdump для подтверждения проблем на сетевом уровне.
Мини-методология для расследования сетевой проблемы
- Снимок текущих соединений: ss -a > before.txt
- Фильтрация подозрительных соединений: ss -ta state established ‘( dport = :https )’
- Найти процесс: sudo ss -p и ps -fp
- При необходимости — снять трафик: sudo tcpdump -i any port 443 -w capture.pcap
- Сравнить с предыдущими снимками и метриками Prometheus/системного мониторинга.
Решающее дерево для выбора команды (Mermaid)
flowchart TD
A[Проблема с сетью?] --> B{Нужно увидеть содержимое пакетов?}
B -- Да --> C[tcpdump или wireshark]
B -- Нет --> D{Нужно PID процесса?}
D -- Да --> E[ss -t -p]
D -- Нет --> F{Нужно прослушивающие порты?}
F -- Да --> G[ss -l]
F -- Нет --> H[ss -a / ss -s]Краткий словарь терминов
- Сокет — абстракция конца канала связи, используемая для сетевого ввода/вывода.
- LISTEN — сокет ожидает входящих соединений.
- ESTAB — соединение установлено.
- Recv-Q / Send-Q — очереди входящих/исходящих пакетов.
Советы по безопасности и приватности
- Запуск ss с -p раскрывает имена процессов и PID — предоставляйте доступ к этим данным только доверенным администраторам.
- Не выкладывайте сохранённые дампы ss с внутренними IP/портами и PID в публичные баг-трекеры.
Советы по использованию в локализованных системах
- Команды ss одинаковы для всех локалей; локализация касается только вывода инструментов, которые переводят системные юниты. Используйте однородные форматы логов для автоматизации.
Частые ошибки и как их исправить
- “Не вижу PID” — запустите с sudo.
- “Не вижу соединений контейнера” — выполните ss внутри контейнера или в нужном network namespace.
- “Вывод слишком большой” — применяйте фильтры по типу, порту и состоянию.
Примеры тест-кейсов и приёмка
Критерии приёмки при проверке сервиса, слушающего порт:
- Сервис должен отображаться в ss -ltnp на ожидаемом порту.
- Должен быть корректный PID и имя процесса.
- Порт должен быть доступен с локального хоста (telnet/ip test) и с нужных сетей.
Заключение
ss — основной инструмент для анализа сетевых соединений в современных дистрибутивах Linux. Он быстрый, детализированный и гибко фильтруется. В связке с tcpdump, ps и системными логами ss даёт мощный арсенал для диагностирования сетевых проблем.
Итоговые рекомендации:
- Всегда запускать сложные проверки с sudo.
- Начинайте с широкого снимка (ss -a / ss -s), затем сужайте фильтры.
- Сохраняйте выводы для последующего анализа и автоматизации.
Ключевые выводы
- ss заменил netstat и предоставляет более детальную и быструю информацию.
- Используйте флаги -t/-u/-x/-l/-a/-p/-s для получения нужных сведений.
- Для глубокого анализа комбинируйте ss с tcpdump, lsof и ps.