Где хранится сетевая очередь в linux

Обновлено: 08.07.2024

Для доступа к сетевым картам в Linux используются так называемые интерфейсы. Интерфейсы это не файлы устройств и их нет в каталоге /dev. Интерфейсы создаются динамически и не всегда связаны с сетевыми картами. Например интерфейс ppp0 - это интерфейс VPNа, организованного по протоколу PPTP, а интерфейс lo это виртуальная сетевая карта с адресом localhost (127.0.0.1). В Linux имена интерфейсов традиционно состоят из мнемонического типа интерфейса и его порядкового номера. Карты ethernet доступны через интерфейсы eth0, eth1 и т.д. В системах, использующих systemd способ именования другой - интерфейсы имеют имена вида enp2s0 (en -Ethernet, p - PCI, 2 - номер на шине) Список всех интерфейсов можно посмотреть командой ifconfig -a или ip link .

Привязка интерфейса к карте

При наличии нескольких сетевых карт возникает вопрос о порядке их нумерации. В CentOS 6 эта задача возложена на подсистему обнаружения и конфигурации устройств - udev. В системах с systemd правила именования встроены в udev, но могот быть переопределены, как написано ниже.

Видно, что нумерация опирается на аппаратный (MAC) адрес карты. Если в компьютере заменить карту, то интерфейс eth0 станет недоступным, а новая карта получит имя eth1. Если есть желание вручную назначить имена картам, то можно отредактировать этот файл, выставив желаемые соответствия между MAC адресами именами интерфейсов (возможно потребуется перезагрузка).

ifcfg

Классическая утилита конфигурации сетевых интерфейсов ifcfg

route

Настройка таблицы маршрутизации route

В современных дистрибутивах линукса на смену ifconfig и route приходит универсальная утилита ip

Адреса серверов DNS и имя локального домена вписываются в файл /etc/resolv.conf

Для просмотра доступных сетевых интерфейсов используется команда ip link

ArchLinux использует для настройки сети systemd/netctl . Для конфигурации используются файлы профилей, которые хранятся в /etc/netctl/ . В данном каталоге есть подкаталог examples/ из которого можно копировать файлы с образцами профилей в /etc/netctl/ . Например:

Содержимое enp1s0-work после редактирования

Базовые команды netctl

Просмотр доступных интерфейсов - ifcfg -a

Файл конфигурации интерфейсов - /etc/network/interfaces . auto - говорит о том, что интерфейс надо конфигурировать при старте системы.

После смены настроек в /etc/network/interfaces , необходимо отключить и снова включить интерфейс.

Общие настройки сети

Файл /etc/sysconfig/network используется стартовыми скриптами и содержит ключевые параметры - нужна ли сеть, нужно ли конфигурировать IP v6, имя компьютера. Сюда можно вписать шлюз по умолчанию, но CentOS 6 ориентируется на динамическое подкючение к сетям через WiFi и вписывает его в конфигурацию подходящего интерфейса.

Конфигурация интерфейса

Файлы в каталоге /etc/sysconfig/network-scripts с именами вида ifcfg-eth0

Интерфейс, получающий адрес по DHCP

Дополнительный IP адрес на интерфейсе eth1

Инициализация VLAN на eth1

Настройка DNS

Файл /etc/resolv.conf

Ручная настройка имен хостов файл /etc/hosts

Настройка брандмауэра

Файл /etc/sysconfig/system-config-firewall правила для настройки программой system-config-firewall

Файл /etc/sysconfig/iptables текущие правила, сохраненные на случай перезагрузки.

После ручного изменения правил их можно сохранить командой service iptables save

Узкие места сетевой подсистемы Linux. Тюнинг сети в Linux. Настройка производительности сети в модели NAPI и с прерываниями.

Создано 22.11.2016 11:53

Узкие места сетевой подсистемы Linux. Тюнинг сети в Linux. Настройка производительности сети в модели NAPI и с прерываниями.

Кольцевой буфер

Кольцевые буферы, совместно используются драйвером устройства и сетевой картой. TX – есть передача данных, а RX – получение данных в кольцевом буфере. Как следует из названия, переполнение буфера просто перезаписывает существующие данные. Есть два способа переместить данные от сетевой карты до ядра: аппаратные прерывания и программные прерывания, названные SoftIRQs.

Кольцевой буфер RX используется, чтобы сохранить входящие пакеты, пока они не могут быть обработаны драйвером устройства. Драйвер устройства опустошает буфер RX, обычно через SoftIRQs, который помещает входящие пакеты в структуру данных ядра, названную sk_buff или «skb», чтобы начать свой путь через ядро и до приложения, которому принадлежит соответствующий сокет. Кольцевой буфер TX используется для хранения исходящих пакетов, которые предназначенные для отправки по проводам.

Эти кольцевые буферы находятся у основания стека и являются критическим моментом, в который может произойти удаление (drop) пакетов, что негативно влияет на производительность сети.

Прерывания и обработчики прерываний

Прерывания от аппаратных средств известны как прерывания «top-half».

Сетевые карты, как правило, работают с кольцевыми буферами (DMA ring buffer) организованными в памяти, разделяемой с процессором. Каждый входящий пакет размещается в следующем доступном буфере кольца. (DMA - Direct Memory Access (Прямой доступ к памяти) — режим обмена данными между устройствами или же между устройством и основной памятью, в котором центральный процессор (ЦП) не участвует). После этого требуется сообщить системе о появлении нового пакета и передать данные дальше, в специально выделенный буфер (Linux выделяет такие буферы для каждого пакета). Для этой цели в Linux используется механизм прерываний: прерывание генерируется всякий раз, когда новый пакет поступает в систему. Чаще используется отложенные прерывания (см. в статье Linux, принципы работы с сетевой подсистемой ). В ядро Linux начиная с версии ядра 2.6 был добавлен так называемый NAPI (New API), в котором метод прерываний сочетается с методом опроса. Сначала сетевая карта работает в режиме прерываний, но как только пакет поступает на сетевой интерфейс, она регистрирует себя в poll-списке и отключает прерывания. Система периодически проверяет список на наличие новых устройств и забирает пакеты для дальнейшей обработки. Как только пакеты обработаны, карта будет удалена из списка, а прерывания включатся снова.

Жесткие прерывания можно увидеть в /proc/interrupts, где у каждой очереди есть vector прерывания в 1-м столбце. Каждой очереди RX и TX присвоен уникальный vector, который сообщает обработчику прерываний, относительно какого NIC/queue пришло прерывание. Столбцы представляют количество входящих прерываний:

CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7

45: 28324194 0 0 0 0 0 0 0 PCI-MSI-edge eth1

SoftIRQs

Иизвестны как прерывания «bottom-half», запросы программного прерывания (SoftIRQs), являются подпрограммами ядра, которые планируется запустить в то время, когда другие задачи не должны быть прерваны. Цель SoftIRQ состоит в извлечении данных из кольцевых буферов. Эти подпрограммы, выполненные в форме процессов ksoftirqd/cpu-number и, вызывают специфичные для драйвера функции кода.

После перемещения данных от драйвера к ядру, трафик двигатется вверх к сокету приложения.

SoftIRQs можно контролировать следующим образом. Каждый столбец есть ЦП:

NAPI Polling

Поиск узкого места

Отбрасывание пакетов и переполнени границ (packet drops и overruns) обычно происходит, когда буфер RX сетевой карты не может достаточно быстро опустошиться ядром. Когда скорость, с которой данные поступают из сети превышает скорость, с которой ядро забирает на обработку пакеты, сетевая карта начинает отбрасывать входящие пакеты, т.к. буфер NIC (сетевой карты) полон, и увеличивает счетчик удаления.Соответствующий счетчик можно увидеть в ethtool статистике. Основные критерии здесь - прерывания и SoftIRQs.

Для примера вывод статистики ethtool:

Существуют различные инструменты, доступные для поиска проблемной области. Следует исследовать:

• Уровень встроенного ПО адаптера

- Следим за статистикой ethtool -S ethX

• Уровень драйвера адаптера

• Ядро Linux, IRQs или SoftIRQs

- Проверяем /proc/interrupts и /proc/net/softnet_stat

• Уровни протокола IP, TCP, UDP

- Используем netstat -s и смотрим счетчики ошибок

Вот некоторые типичные примеры узких мест:

  • Прерывания (IRQs) неправильно сбалансированы. В некоторых случаях служба irqbalance может работать неправильно или не работает вообще. Проверьте /proc/interrupts и удостоверьтесь, что прерывания распределены на разные ядра ЦП. Обратитесь к irqbalance руководству, или вручную сбалансируйте IRQs. В следующем примере прерывания становятся обработанными только одним процессором:

CPU0 CPU1 CPU2 CPU3 CPU4 CPU5

105: 1430000 0 0 0 0 0 IR-PCI-MSI-edge eth2-rx-0

106: 1200000 0 0 0 0 0 IR-PCI-MSI-edge eth2-rx-1

107: 1399999 0 0 0 0 0 IR-PCI-MSI-edge eth2-rx-2

108: 1350000 0 0 0 0 0 IR-PCI-MSI-edge eth2-rx-3

109: 80000 0 0 0 0 0 IR-PCI-MSI-edge eth2-tx

  • Посмотрите, увеличивается ли какая-либо из колонок помимо 1-й колонки в /proc/net/softnet_stat. В следующем примере счетчик большой для CPU0, и budget должен быть увеличен:

0073d76b 00000000 000049ae 00000000 00000000 00000000 00000000 00000000 00000000 00000000

000000d2 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

0000015c 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

  • SoftIRQs не может получать достаточное количество процессорного времени для опроса адаптера. Используйте инструменты, такие как sar, mpstat или top, чтобы определить, что отнимает много процессорного времени.
  • Используйте ethtool -S ethX, чтобы проверить определенный адаптер:
  • Увеличение приемного буфера сокета приложения или использование буфера автоподстройки.
  • Использование большого/малого TCP или UDP размера пакетов.

Настройка производительности

SoftIRQ

Если выполнение программных прерываний не выполняются достаточно долго, то темп роста входящих данных может превысить возможность ядра опустошить буфер. В результате буферы NIC переполнятся, и трафик будет потерян. Иногда, необходимо увеличить длительность работы SoftIRQs (программных прерываний) с CPU. За это отвечает netdev_budget. Значение по умолчанию 300. Параметр заставит процесс SoftIRQ обработать 300 пакетов от NIC перед тем как отпустить CPU:

Это значение может быть удвоено, если 3-й столбец в /proc/net/softnet_stat увеличивается, что указывает, на то, что SoftIRQ не получил достаточно процессорного времени. Маленькие инкременты нормальны и не требуют настройки.

0073d76b 00000000 000049ae 00000000 00000000 00000000 00000000 00000000 00000000 00000000

000000d2 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

0000015c 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

0000002a 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

IRQ Balance

Балансировщик прерываний - это сервис, который может автоматически сбалансировать прерывания между ядрами процессора, основанного на реальном времени состояния системы.

Прерывания также можно раскидать по ядрам вручную.

Чтобы это сделать нужно выполнить команду echo N > /proc/irq/X/smp_affinity, где N - маска процессора (определяет какому процессору достанется прерывание), а X - номер прерывания, виден в первом столбце вывода /proc/interrupts. Чтобы определить маску процессора, нужно возвести 2 в степень cpu_N (номер процессора) и перевести в шестнадцатиричную систему. При помощи bc вычисляется так: echo "obase=16; $[2 ** $cpu_N]" | bc. Например:

Для того, чтобы при старте системы прерывания сами настраивались, можно сделать скрипт и настроить его запуск /etc/rc.d/rc.local.

Ethernet flow control

Паузы фреймов - управление потоком уровня Ethernet между адаптером и портом коммутатора. Адаптер передаст “кадры паузы”, когда RX или буферы TX станут полными. Коммутатор остановит поток данных в течение определенного промежутка времени в порядке миллисекунд. Этого времени обычно достаточно, чтобы позволить ядру опустошить интерфейсные буферы, таким образом предотвращая переполнение буфера и последующие пакетные отбрасывания или переполнения. В идеале, коммутатор буферизует входящие данные в течение такой паузы.

Однако, важно понимать, что этот уровень контроля потока только между коммутатором и адаптером. Если пакеты отброшены, более высокие уровни, такие как TCP или приложение в случае UDP и/или многоадресно переданы, должен инициировать восстановление.

Важно! Фреймы паузы и flow control (управление потоком) должны быть включены и на NIC и на порте коммутатора.

Pause parameters for eth3:

Pause parameters for eth3:

Interrupt Coalescence (отложенные прерывания)

Отложенные прерывания рассказывают нам о количестве трафика, который будет получать сетевой интерфейс, или времи, которое проходит после приема трафика, перед выдачей жесткого прерывания. Слишком ранние прерывания или слишком частые приводят к снижению производительности системы, так как ядро останавливается (или «перебивает») запущенное задание для обработки запроса прерывания от аппаратного обеспечения. Слишком поздее прерывание может привести к тому, что пакеты достаточно долго не будут обработаны ядром с сетевой карты. Большие объемы трафика могут переписать предыдущие пакеты трафика, т.е. потеря пакетов.

Самые современные NIC и драйверы поддерживают IC, и многие позволяют драйверу автоматически модерировать количество прерываний, сгенерированных аппаратными средствами. Настройки IC обычно включают два основных компонента, время и количество пакетов. Время в мкс - сколько NIC будет ожидать прежде, чем прервать ядро, а число пакетов – сколько пакетов будет ждать в приемном буфере прежде чем сработает прерывание. Отложенные прерывания NIC можно посмотреть, используя команду ethtool -c ethX и настроить через ethtool -C ethX. Адаптивный режим позволяет карте автомодерировать IC. В адаптивном режиме, драйвер инспектирует трафик и ядро настраивает прерывания на лету, предотвращая потерю пакетов.

Coalesce parameters for eth3:

Adaptive RX: on TX: off

Следующая команда выключает адаптивный IC, и говорит адаптеру о прерывании ядра

сразу после приема любого трафика:

Очередь адаптера (The Adapter Queue)

Netdev_max_backlog - очередь в ядре Linux, где трафик хранится после получения от сетевого адаптера, но перед обработкой с помощью стеков протоколов (IP, TCP, и т.д.). Для каждого ядра процессора существует одна очередь. Очередь может расти автоматически до максимального значения, указанного в netdev_max_backlog. Функция ядра netif_receive_skb () находит соответствующий ЦП для пакета и ставит пакеты в очереди того ЦП. Если очередь для этого процессора будет полна и уже в максимальном размере, пакеты будут отброшены. Для того, чтобы тюнить это место необходимо убедиться что оно реально нужно. В /proc/net/softnet_stat в втором столбце есть счетчик, который увеличивается когда очередь переполняется. Каждая строка файла softnet_stat представляет собой ядро процессора, начиная с CPU0.

1-й столбец - количество кадров, полученных с помощью обработчика прерывания.

2-й столбец - количество фреймов, отброшенных из-за превышения netdev_max_backlog..

3-й столбец - число раз ksoftirqd исчерпал netdev_budget или процессорное время, когда нужно было еще поработать.

0073d76b 00000000 000049ae 00000000 00000000 00000000 00000000 00000000 00000000 00000000

000000d2 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

0000015c 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

0000002a 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

В текущем выводе netdev_max_backlog не нуждается в тюнинге, т.к. очередь не переполняется и нет потерь соответственно. Если же наблюдаются приащения в второй колонке, тогде увеличиваем значение очереди и снова смотрим в этот файл. Если увеличения этого значения мы видим что скорость приращений в втором столбце уменьшается то можно еще увеличить значение backlog. Повторяем этот процесс пока перестанет расти цифры в столбце 2.

Backlog изменить можно такой командой:

Adapter RX and TX Buffer

Буфер адаптера по умолчанию обычно установлен в меньшем размере, чем максимальный. Часто, увеличить размер буфера приема RX вполне достаточно, чтобы предотвратить потери пакетов, так как это может приводит к тому, что у ядра будет немного больше времени, чтобы опустошить буфер. В результате, это может предотвратить возможные потери пакетов.

Буферы можно посмотреть так:

Ring parameters for eth3:

Current hardware settings:

Тут видим что кольцевой буфер RX входящих пакетов равен 1024 дескрипторам в оперативной памяти, и можно увеличить до 8192.

Очередь передачи (Adapter Transmit Queue Length)

Длина очереди передачи определяет количество пакетов, которые могут быть поставлены в очередь перед передачей. Значение по умолчанию 1000 - обычно достаточно для сегодняшней скорости до 10 Гбит/с или даже 40 Гбит/с сетей. Однако, если число ошибок передачи увеличиваются на адаптере, то значение можно удвоить. Используйте ip -slink, чтобы увидеть, если есть какие-то потери на очереди TX для адаптера.

Увеличить длину очереди можно так:

TCP Window Scaling (масштабирование окна TCP)

Масштабирование Окна TCP включено по умолчанию:

TCP буфер

После того, как сетевой трафик обрабатывается от сетевого адаптера, предпринимается попытка приема трафика непосредственно в приложение. Если это не представляется возможным, данные ставятся в очередь на буфер сокета приложения. Есть 3 структуры очереди в сокете:

sk_rmem_alloc – очередь получения

sk_wmem_alloc – очередь передачи

sk_omem_alloc - out-of-order queue

Существует также sk_rcvbuf переменная, которая является пределом, измеренный в байтах, что сокет может получить. В этом случае sk_rcvbuf = 125336.

Из приведенного выше вывода можно вычислить, что очередь получения почти полна. Когда sk_rmem_alloc > sk_rcvbuf то буфер начинает рушится, т.е. наблюдаются потери пакетов. Выполните следующую команду, чтобы определить, происодит это или нет:

17671 packets pruned from receive queue because of socket buffer overrun

18671 packets pruned from receive queue because of socket buffer overrun

Если счетчик обрезки пакетов растет, то требуется тюнинг.

tcp_rmem: У настраиваемой памяти сокета есть три значения, описывающих минимальное, значение по умолчанию и максимальное значения в байтах. Чтобы просмотреть эти настройки и увеличить:

4096 87380 4194304

TCP Listen Backlog: отвечает за размер очереди одновременно ожидающих подключений к сокету, то есть инициированных (SYN - SYN, ACK - ACK), но еще не принятых сервером (established).

Параметр ядра net.core.somaxconn - максимальное число открытых сокетов, ждущих соединения. Изменяем:

UDP Buffer Tuning: UDP является гораздо менее сложным, чем протокол TCP. Поскольку UDP не содержит надежности сеанса, он не несет ответственности за повторную передачу потерянных пакетов. Там не существует понятия размера окна и потерянные данные не восстанавливается протоколом. Единственная доступная настройка включает в себя увеличение размера приемного буфера. Если netstat -us показывает “packet receive errors” , попробуйте увеличить число буферов для приема. Буферы UDP могут быть настроены таким образом:

Иногда бывает необходимо посмотреть какие сетевые подключения Linux открыты, какие IP адреса используются или какие порты прослушиваются. Раньше для таких целей использовалась утилита netstat. Её, без сомнения, знают все системные администраторы и специалисты по безопасности. Но она больше не поставляется по умолчанию в новых дистрибутивах. Вместо неё используется новая утилита под названием ss.

Netstat сканирует директорию /proc для получения необходимой информации, но в новых версиях ядра была реализована специальная подсистема для мониторинга сети в Linux. Её и использует ss, с помощью этой утилиты вы можете получить больше информации о сетевых подключениях и работает она гораздо быстрее.

Как вы уже поняли в этой статье мы рассмотрим мониторинг сетевых подключений в Linux с помощью утилиты из пакета iproute - ss linux. Начнем, как обычно, с синтаксиса и основных опций.

Общая информация

Как уже было сказано работает утилита ss в Linux на основе подсистемы ядра. Синтаксис очень простой - сама команда и ее опции:

$ ss опции [ фильтр_состояния] [фильтр_адреса]

Для удобства вывод команды ss можно фильтровать с помощью grep:

$ ss опции | grep шаблон

Опции указывает различные параметры отображения и фильтрации информации. Фильтры по состоянию и адресу очень интересная вещь, они позволяют выполнять мониторинг сетевых подключений в Linux, только тех что нужно. Например, только открытых, закрытых или находящихся на этапе подключения. Подробнее мы рассмотрим это в конце статьи.

Опции утилиты ss

Для сетевых подключений в Linux с помощью утилиты ss можно использовать такие опции:

  • -V - Version показать версию утилиты.
  • -n - Numeric не определять имена служб.
  • -r - Resolve определять сетевые имена адресов с помощью DNS.
  • -a - All отобразить все сокеты (открытые соединения).
  • -l - Listening показать только прослушиваемые сокеты.
  • -o - Options показать информацию таймера.
  • -e - Extended выводить расширенную информацию о сокете.
  • -p - Processes, показать процессы, использующие сокет.
  • -i - Internal, посмотреть внутреннюю информацию TCP.
  • -s - Summary, статистика использования сокета.
  • -D - экспортировать текущее состояние TCP сокетов в файл.
  • -F - работать с информацией, взятой из файла.

Кроме того, можно вывести сокеты только нужного протокола:

  • -4, --ipv4 - только сокеты протокола IP версии 4.
  • -6 --ipv6 - только сокеты протокола IP версии 6.
  • -0, --packet - только PACKET сокеты.
  • -t, --tcp - TCP сокеты.
  • -u, --udp - UDP сокеты.
  • -d, --dhcp - DHCP сокеты.
  • -r, --raw - RAW сокеты.
  • -x, --unix - UNIX сокеты.

Для фильтрации протоколов можно использовать не только эти опции, но и универсальную опцию -f, передав ей в параметре название протокола. Здесь собраны самые основные опции, если вам нужно больше информации - смотрите справку команды.

Примеры использования

А теперь давайте рассмотрим примеры использования утилиты ss Linux. Возможно, из описания опций вы мало что поняли, но с примерами все встанет на свои места.

Мониторинг сетевых подключений

Сначала смотрим все сетевые подключения:


Посмотрим только TCP соединения:


Теперь только Unix:


Для отображения UDP сокетов используйте опцию u. По умолчанию будут показаны только подключенные соединения. Если хотите получить все, нужно использовать опцию a. Поскольку UDP, это протокол без постоянного соединения, то без опции -a мы ничего не увидим:


По умолчанию утилита не пытается определять имена хостов через dns, но можно ее попросить делать это опцией -r:

Обратная опция -n, не будет выполняться не только dns резолвинг, но и определение протоколов портов, зато мониторинг сети в Linux работать будет быстрее:


Теперь просмотрим только прослушиваемые tcp сокеты.


Здесь мы видим только имена служб, это не всегда удобно, указав опцию n, мы получим номера портов. Так же само можно посмотреть прослушиваемые udp сокеты:


Также мы можем попытаться узнать название и PID процесса, использующего сокет:


Просмотр статистики статистики сетевых подключений

Для просмотра статистики по использованию сетевых подключений наберите:


С помощью опции -о можно посмотреть информацию о таймере и состоянии подключения.


Фильтрация по протоколу

Мы можем отображать только нужный нам протокол. Например только ipv4:

sudo ss -tl -f inet4


Так же само можно отобразить только соединения ipv6:


Фильтрация по состоянию соединения

В синтаксисе команды мы описали два дополнительных параметра. Фильтрация состояния и фильтрация по адресу. Рассмотрим теперь как ими пользоваться. Сокет TCP может находиться в одном из нескольких состояний. Например, так утилита ss linux выведет только подключенные сокеты.

ss -t4 state established


Или сокеты в состоянии ожидания:

sudo ss -t4 state time-wait


В параметр state можно передать одно из следующих значений:

  • established
  • syn-sent
  • syn-recv
  • fin-wait-1
  • fin-wait-2
  • time-wait
  • closed
  • close-wait
  • last-ack
  • closing
  • all - все состояния
  • connected - все кроме прослушиваемых и закрытых
  • synchronized - все кроме syn-sent
  • bucket - time-wait и syn-recv
  • big - все кроме bucket

Не все состояния подключений можно увидеть просто выполнив команду. Например, syn-sent и syn-recv вряд ли получиться словить, потому что соединения находятся в этом состоянии очень короткое время. Для их отображения удобно использовать команду watch:

watch -n 1 "ss -t4 state syn-sent"

После запуска команды откройте любой сайт в браузере. Вы увидите как появится одно или несколько соединений на несколько секунд.

Фильтрация по адресу и номеру порта

Кроме фильтрации по состоянию, tcp сокеты можно фильтровать по адресам или портам соединений.

Например, отберем все сетевые подключения linux с портом источником или приемником ssh, то есть все входящие и исходящие соединения ssh:

ss -at '( dport = :ssh or sport = :ssh )'


Или сокеты с портом назначения 80 или 443:

ss -nt '( dst :443 or dst :80 )'

Такой синтаксис тоже будет работать:

ss -nt dst :443 or dst :80

Еще несколько примеров фильтрации:

Фильтрация по адресу:

ss -nt dst 74.125.236.178

Фильтрация по адресу и подсети:

ss -nt dst 74.125.236.178/16

И по адресу и порту:

ss -nt dst 74.125.236.178:80

Если вы хотите фильтровать сетевые соединения по порту, перед портом ставьте двоеточие:

ss -nt dport = :80

Можно использовать такие операторы сравнения:

Выводы

Вот и всё. Основную информацию о том, как выполнять мониторинг сети в Linux с помощью утилиты ss рассмотрели. Если вам нужно больше информации и примеров смотрите документацию по утилитам набора iproute.

Изображение пользователя Mike.

Раз говорят, что эта тема будет актуальной, то воспользовавшись гуглем скопипащу сюда то, что каждый мог бы найти и сам.

- Корневая файловая система специфична для каждой машины (обычно она хранится на локальном диске, хотя это мог бы быть ramdisk или сетевой диск) и содержит файлы, которые являются необходимыми для загрузки системы. Содержимого корневой файловой системы достаточно для загрузки в однопользовательском режиме. Именно эта файловая система используется при загрузке до тех пор, пока не будут смонтированы другие файловые системы. Она также содержит инструментальные средства для ремонта поврежденной системы и для восстановления потерянных файлов из резервных копий.

- Файловая система /usr содержит все команды, библиотеки, man-страницы, исходные тексты и другие неизменяемые файлы, необходимые для нормальной работы системы. Никакие файлы в /usr не должны быть специфическими для любой конкретной машины, и при этом они не должны измениться при нормальном использовании. Это позволяет файлам быть разделенными по сети, что может быть практично, так как это сохраняет дисковое пространство (могут легко иметься сотни мегабайт в /usr) и упрощает администрирование (только машина, на которой хранится /usr, должна быть изменена при модификации прикладной программы, а не каждая машина отдельно). Даже если файловая система находится на локальном диске, она может быть установлена только для чтения, что уменьшит возможность искажения в случае отказа.

- Файловая система /var содержит файлы, которые изменяются в ходе работы системы. Например, там лежат каталоги буферов для почты, новостей, печати и т.п., файлы протоколов, форматированных man-страниц и временные файлы.

- Файловая система /home содержит все домашние каталоги пользователей системы, то есть, все реальные данные системы. Отделение пользовательских каталогов от системы упрощает резервирование данных. Если пользователей много, эта файловая система может быть разделена на несколько (например, /home/students и /home/teacher).

Хотя различные части выше были названы файловыми системами, это не значит, что они фактически находятся на отдельных дисках. Они могут храниться на одном диске, если речь идето небольшом сервере или личном однопользовательском компьютере. Дерево каталогов может быть также разделено по-другому, в зависимости от того, насколько большие диски использованы, и как распределено место на них для различных целей, тем не менее, важно, чтобы все стандартные имена работали; даже если, скажем, /var и /usr фактически на том же самом разделе, имена /usr/lib/libc.a и /var/log/messages должны работать, например, перемещая файлы из /var в /usr/var, и делая /var ссылкой на /usr/var.

Структура файловой системы в Unix группирует файлы по их назначению, то есть, все команды находятся в одном месте, все файлы данных в другом, документация в третьем и так далее. Альтернативный вариант группировал файлы согласно программе, которой они принадлежат, то есть, все Emacs-файлы были бы в одном каталоге, весь TeX в другом, и так далее. Проблема с последним подходом состоит в том, что это делает трудным совместно использовать файлы (каталог программ часто содержит статические, общие, изменяющиеся и личные файлы), и иногда даже находить файлы, например, man-страницы в огромном числе мест, благодаря чему поиск их программой просмотра сильно осложняется.

Корневая файловая система

Файловая система root должна быть небольших размеров, так как она содержит важные файлы и команды. Чем меньше объем файловой системы и чем реже она подлежит изменениям, тем меньше вероятность ее повреждения. Если система root повреждена, то обычно это означает, что начальная загрузка компьютера невозможна (кроме отдельных методов, например при помощи дискет).

Файловая система дистрибутива имеет архитектуру классической файловой системы ОС Linux с единым корневым каталогом, обозначаемым символом обратной косой черты ("слэш") — /.

Ниже приведено описание основных каталогов верхнего уровня.

/bin - В этом каталоге хранятся основные команды, необходимые пользователю для работы в системе. Например, такие как командные оболочки и команды файловой системы (ls, cp и т.д.). Каталог /bin обычно не изменяется после установки. Если изменяется, то обычно лишь при обновлениях пакетов программ, предоставленных разработчиками операционной системы.

/boot - В этом каталоге хранятся файлы, используемые загрузчиком ОС — LInux LOader (LILO). Этот каталог так же практически не изменяется после установки.

/dev - В этом каталоге размещены описания устройств системы. В Linux всё рассматривается, как файл, даже различные устройства, такие как последовательные порты, жёсткие диски и сканеры. Для получения доступа к определённому устройству, необходимо чтобы существовал специальный файл, называемый device node. Все эти файлы находятся в каталоге /dev. Аналогично устроено большинство UNIX-подобных операционных систем.

/etc - Этот каталог содержит файлы настроек: всё, от конфигурационных файлов системы X Window, базы данных пользователей и до стартовых сценариев.

/home - В этом каталоге размещены домашние каталоги пользователей. Linux является многопользовательской системой и каждому пользователю присваивается имя и уникальный каталог для персональных файлов. Этот каталог называется "home" (домашним) каталогом пользователя.

/lib - В этом каталоге находятся системные библиотеки, необходимые для основных программ: библиотека C, динамический загрузчик, библиотека ncurses, модули ядра и другое.

/lib/modules - Подгружаемые модули для ядра (например, сетевые драйверы или поддержка дополнительных файловых систем).

/lost+found - В этом каталоге сохраняются восстановленные части файловой системы. При загрузке системы происходит проверка файловых систем на наличие ошибок. Для исправления ошибок файловой системы запускается программа fsck.

/mnt - Этот каталог предоставляется как временная точка монтирования для жёстких дисков, дискет, компакт-дисков или отключаемых устройств.

/opt - В этом каталоге размещаются дополнительные пакеты программ. Особенность Linux в том, что все пакеты программ, устанавливаются в этот каталог, например /opt/<программный пакет>. В последствии если этот пакет больше не будет нужен, то достаточно всего лишь удалить соответствующий каталог. В дистрибутивах SlackWare некоторые программы изначально поставляются в каталоге /opt (например, KDE - в /opt/kde).

/proc - Это специальный каталог не входящий в файловую систему. Каталог /proc представляет собой виртуальную файловую систему, которая предоставляет доступ к информации ядра. Различная информация, которую ядро может сообщить пользователям, находится в "файлах" каталога /proc. Например, в файле /proc/modules находится список загруженных модулей ядра. А в файле /proc/cpuinfo — информация о процессоре компьютера.

/root - Это домашний каталог администратора, вместо /home/root. Это потому, что каталог /home может находиться в разделе, отличном от корневого (/) и если по какой-то причине /home не может быть подключён, то пользователь root вынужден будет войти в систему, чтобы решить проблему. И если его домашний каталог на другом диске, то это усложнит вход в систему.

/sbin - В этом каталоге хранятся основные программы, выполняемые пользователем root а так же программы, выполняемые в процессе загрузки. Обычные пользователи не могут пользоваться этими программами.

/tmp - Временное хранилище данных. Все пользователи имеют права чтения и записи в этом каталоге.

/usr - Это один из самых больших каталогов в системе. Практически всё остальное расположено здесь. Программы, документация, исходный код ядра и система X Window. Именно в этот каталог, чаще всего, устанавливаются программы.

/var - В этом каталоге хранятся системные лог-файлы, кэш-файлы и файлы-замки программ. Это каталог для часто меняющихся данных.

Каталог /etc - В этом каталоге содержится довольно много различных конфигурационных файлов. Некоторые из них рассмотрены ниже. Здесь также располагаются файлы, используемые для конфигурирования сети.

/etc/rc.d - Командные файлы, выполняемые при запуске системы или при смене ее уровня выполнения.

/etc/passwd - База данных пользователей, в которой содержится информация об имени пользователя, его настоящем имени, личном каталоге, зашифрованный пароль и другие данные. Формат этого файла рассмотрен в man-руководстве к команде passwd.

/etc/fdprm - Таблица параметров флоппи-дисковода, определяющая формат записи. Устанавливается программой setfdprm.

/etc/fstab - Список файловых систем, автоматически монтируемых во время запуска системы командой mount -a (она запускается из командного файла /etc/rc.d/rc.S). Здесь также содержится информация о swaр-областях, автоматически устанавливаемых командой swapon -a.

/etc/group - Подобен файлу /etc/рasswd, только здесь содержится информация о группах, а не о пользователях.

/etc/inittab - Конфигурационный файл демона init.

/etc/issue - Выводится программой getty перед приглашением login. Обычно здесь содержится краткое описание системы.

/etc/magic - Конфигурационный файл команды file. Содержит описания различных форматов файлов, опираясь на которые эта команда определяет тип файла. Также см. руководства к magic и file.

/etc/mtab - Список смонтированных на данный момент файловых систем. Изначально устанавливается командными файлами при запуске, а затем автоматически модифицируется командой mount. Используется при необходимости получения доступа к смонтированным файловым системам (например, командой df).

/etc/shadow - Теневая база данных пользователей. При этом информация из файла /etc/рasswd перемещается в /etc/shadow, который недоступен для чтению никому, кроме пользователя root. Это усложняет взлом системы.

/etc/login.defs - Конфигурационный файл команды login.

/etc/printcap - То же, что и /etc/termcap, только используется при работе с принтером.

/etc/profile - Этот командный файл выполняется оболочкой Bourne Shell при запуске системы, что позволяет изменять системные установки для всех пользователей.

/etc/securetty - Определяет терминалы, с которых может подключаться к системе пользователь root. Обычно это только виртуальные консоли, что усложняет взлом системы через модем или сеть.

/etc/shells - Список рабочих оболочек. Команда chsh позволяет менять рабочую оболочку только на оболочки, находящиеся в этом файле. Процесс ftрd, предоставляющий работу с FTР, проверяет наличие оболочки пользователя в файле /etc/shells и не позволяет пользователю подключится к системе, пока ее имя не будет найдено в этом файле.

/etc/termcap - База данных совместимости терминалов. Здесь находятся escape-последовательности для различных типов терминалов, что позволяет работать программам на разных типах терминалов.

Каталог /dev - В этом каталоге находятся файлы устройств. Названия этих файлов соответствуют специальным положениям, рассмотренным в списке устройств (Device list). Файлы устройств создаются во время установки системы, а затем с помощью скрипта /dev/MAKEDEV. Файл /dev/MAKEDEV.local используется при создании локальных файлов устройств или ссылок (т.е. тех, что не соответствуют стандарту MAKEDEV).

Каталог /usr - Обычно файловая система /usr достаточно большая по объему, так как многие программы установлены именно здесь. Вся информация в каталоге /usr помещается туда во время установки системы. Отдельно устанавливаемые пакеты программ и другие файлы размещаются в каталоге /usr/local. Некоторые подкаталоги системы /usr рассмотрены ниже (для более подробной информации см. описание стандарта FSSTND).

/usr/X11R6 - Все файлы, используемые системой X Window. Для упрощения установки и администрирования, файлы системы X Window размещаются в отдельной структуре каталогов, которая находится в /usr/X11R6 и идентична структуре /usr.

/usr/bin - Практически все команды, хотя некоторые находятся в /bin или в /usr/local/bin.

/usr/sbin - Команды, используемые при администрировании системы и не предназначенные для размещения в файловой системе root (например, здесь находится большинство программ-серверов).

/usr/man, /usr/info, /usr/doc - Файлы man-руководств, документации GNU Info и другая документация.

/usr/include - Подключаемые файлы библиотек для языка С.

/usr/src - Исходные тексты программ, установленных в системе, в том числе ядра Linux.

/usr/lib - Неизменяемые файлы данных для программ и подсистем, включая некоторые конфигурационные файлы. Имя lib происходит от library (библиотека); первоначально библиотеки подпрограмм для программирования хранились в /usr/lib.

/usr/local - Здесь размещаются отдельно устанавливаемые пакеты программ и другие файлы.

Каталог /var - Эта файловая система содержит файлы, изменяемые при нормально работающей системе. Она специфична для каждого компьютера и не может быть разделена в сети между несколькими машинами.

/var/man/cat* - Временный каталог для форматируемых страниц руководств. Источником этих страниц является каталог /usr/man/man*. Некоторые руководства поставляются в отформатированном виде. Они располагаются в /usr/man/cat*. Остальные руководства перед просмотром должны быть отформатированы. Затем они помещаются в каталог /var/man и при повторном просмотре в форматировании не нуждаются. Каталог /var/man/cat часто очищается, таким же образом, как и прочие временные каталоги.

/var/lib - Файлы, изменяемые при нормальном функционировании системы.

/var/local - Изменяемые данные для программ, установленных в /usr/local (то есть, программы которые были установлены администратором системы). Обратите внимание, что даже в местном масштабе установленные программы должны использовать другие /var каталоги, например, /var/lock.

/var/lock - Файлы-защелки. Многие программы при обращении к какому-либо файлу устройства создают здесь файл-защелку. Другие программы при обращении к какому-либо устройству сначала проверяют наличие файла-защелки в этом каталоге, а затем уже производят доступ к этому устройству.

/var/run - Файлы, информация в которых соответствует действительности только до очередной перезагрузки системы. Например, файл /var/run/utmp содержит информацию о пользователях, подключенных к системе в данный момент.

/var/spool - Каталоги, используемые для хранения почты, новостей, очереди для принтера, а также для других задач. Для каждой задачи существует отдельный каталог в /var/spool, например, почтовые ящики пользователей хранятся в /var/spool/mail.

/var/tmp - Каталог для временных файлов, размер которых достаточно велик или время существования которых больше, чем в /tmp. Хотя администратор системы не должен бы держать очень уж старые файлы в /var/tmp.

Каталог /proc - Файловая система /proc является виртуальной и в действительности она не существует на диске. Ядро создает ее в памяти компьютера. Система /proc предоставляет информацию о системе (изначально только о процессах — отсюда ее название). Некоторые наиболее важные файлы и каталоги рассмотрены ниже. Более подробную информацию о структуре и содержании файловой системы /proc можно найти в man-руководстве к proc.

/proc/1 - Каталог, содержащий информацию о процессе номер 1. Для каждого процесса существует отдельный каталог в /proc, именем которого является его числовой идентификатор.

/proc/cpuinfo - Информация о процессоре, такая как тип процессора, его модель, производительность и др.

/proc/devices - Список драйверов устройств, встроенных в действующее ядро.

/proc/dma - Задействованные в данный момент каналы DMA.

/proc/filesystems - Файловые системы, встроенные в ядро.

/proc/interruрts - Задействованные в данный момент прерывания.

/proc/ioports - Задействованные в данный момент порты ввода/вывода.

/proc/kcore - Отображение физической памяти системы в данный момент. Размер этого файла точно такой же, как и у памяти компьютера, только он не занимает места в самой памяти, а генерируется на лету при доступе к нему программ. Однако при копировании этого файла куда-либо, он не займет места на диске.

/proc/ksyms - Таблица символов ядра.

/proc/loadavg - Ориентировочная загруженность системы.

/proc/meminfo - Информация об использовании памяти, как физической, так и swap-области.

/proc/modules - Список модулей ядра, загруженных в данный момент.

/proc/net - Информация о сетевых протоколах.

/proc/self - Символическая ссылка к каталогу процесса, пытающегося получить информацию из /proc. При попытке двух различных процессов получить какую-либо информацию в /proc, они получают ссылки на различные каталоги. Это облегчает доступ программ к собственному каталогу процесса.

/proc/stat - Различная статистическая информация о работе системы.

/proc/uptime - Время, в течение которого система находится в рабочем состоянии.

/proc/version - Версия ядра.

Хотя многие файлы имеют обычный текстовый формат, некоторые из них имеют собственный. Существует много программ, которые не только преобразуют такие файлы в формат, доступный для чтения, но и предоставляют некоторые функции. Например, программа free считывает файл /proc/meminfo и преобразует значения, указанные в байтах, в килобайты (а также предоставляет некоторую дополнительную информацию).

Читайте также: