Отслеживание состояния сети в Linux – команда netstat

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

Синтаксис и опции netstat

Синтаксис команды

netstat [опции]

-a Показывать состояние всех сокетов;
-o Показывать таймен
-i Показывает состояние сетевых интерфейсов
-n Показывать ip адрес, а не сетевое имя
-r Показать таблицы маршрутизации. При использовании с опцией -s показывает статистику маршрутизации.
-s Показать статистическую информацию по протоколам. При использовании с опцией -r показывает статистику маршрутизации.
-f семейство_адресов Ограничить показ статистики или адресов управляющих блоков только указанным семейством_адресов, в качестве которого можно указывать:inet Для семейства адресов AF_INET, или unix Для семейства адресов AF_UNIX.
-I интерфейс Показывать информацию о конкретном интерфейсе.
-p Отобразить идентификатор/название процесса, создавшего сокет (-p, —programs display PID/Program name for sockets)

Ключи можно комбинировать. Самая распространенная команда использования netstat это:

netstat -nap

Эта команда выводит довольно большой список. Поэтому для получения нужной информации используйте grep. Например для получения всех портов которые слушаются в системе.

netstat -nap | grep LISTEN

Контроль сетевых соединений

Используя опцию -i можно получить данные о состоянии сетевых интерфейсов системы, а также основных счётчиков трафика. Вывод предоставляется в виде наглядной таблицы с соответствующими столбцами. Формат самой таблицы зависит от используемой системы. К примеру, в Ubuntu, да и вообще в Debian-ориентированных системах он будет примерно таким:

$ netstat -i
Таблица интерфейсов ядра
Iface MTU  RX-OK RX-ERR    RX-DRP    RX-OVR    TX-OK TX-ERR    TX-DRP
eno1 1500 1876 127       0         0         9253 223       0
lo   6553 6529 0         0         0         6529 0         0

В данном выводе видно, как ведёт себя интерфейс eno1, через который осуществляется соединение в сеть, а также что происходит с интерфейсом обратной связи lo. В столбцах RX/TX приводится статистика по трафику с указанием количества пакетов, в том числе и пакетов с ошибками. В частности, показатель RX свидетельствует о количестве пакетов, полученных интерфейсом, TX – о количестве пропущенных через этот интерфейс пакетов с момента загрузки системы или первичной активации (задействования) интерфейса.

Количество ошибок (RX-ERR, TX-ERR) как правило, не должно быть больше 1% (в некоторых случаях 5%) от общего числа пакетов. Если ошибок больше, то следует проанализировать этот параметр на других компьютерах. Большое количество ошибок в сети (на других компьютерах) свидетельствует о неполадках в окружении сети. На отдельном компьютере излишнее их (ошибок) количество говорит о неполадках с сетевым интерфейсом (сетевая карта) или с самим соединением (кабели, совместимость оборудования).

Посмотреть сетевые соединения

Если дать команду netstat без параметров, то будет выведен список процессов (демонов), для которых установлены сетевые соединения. Если нужно также получить информацию о процессах, которые активных соединений не имеют, но слушают порты, нужно использовать ключ -a:

$ netstat -а
Active    Internet  connections     (servers and established)
Proto     Recv-Q    Send-Q    Local Address   ForeignAddress  State
tcp       0         0         *:ldap          *:*             LISTEN
tcp       0         0         *:mysql         *:*             LISTEN
tcp       0         0         *:imaps         *:*             LISTEN
tcp       0         0         bull:ssh        dhcp:4208       ESTABL
tcp       0         0         bull:imaps      nubark:54195    ESTABL
tcp       0         0         bull:http       dhcp:2563       ESTABL
tcp       0         0         bull:imaps      dhcp-18hw:2851  ESTABL

Данный вывод включает в себя также и информацию о системных сокетах UNIX и UDP. Как видно, в представленном отчёте зафиксировано входящее SSH-соединение, два входящих соединения IMAPS, одно входящее HTTP-соединение, а также несколько портов, которые «слушают» (LISTEN) другие соединения. Адреса в данном выводе представлены в формате имя_хоста:служба, где в качестве службы может выступать порт. В колонках Recv-Q и Send-Q отображается количество запросов в очередях на приём и отправку на данном узле/компьютере. Следует также отметить, что факт установки соединения проверяется только для протокола TCP. Кроме описанных состояний соединений имеются также и некоторые другие:

  • TIME_WAIT – ожидание на завершение соединения;
  • SYN_SENT – попытка некоторого процесса установить соединение с недоступным ресурсом или сервером;
  • SYN_WAIT – состояние, при котором данный узел не может обработать все поступающие запросы. Зачастую это может свидетельствовать об ограничении возможностей системного ядра, либо о попытках намеренно вызвать перегрузку на сервере.

Идентификация сетевых процессов

Для того, чтобы однозначно иметь представление о конкретных процессах или демонах, слушающих соединения (порты) в системе, следует воспользоваться ключами -l и -p. Первый  позволяет выводить, собственно, только слушающие порты, второй — для идентификации процесса/демона, например:

$ sudo netstat -lp
Активные соединения с интернетом (only servers)
Proto Recv-Q Send-Q Local Address   ForeignAddress State  PID/Program name
tcp        0      0 localhost:mysql 0.0.0.0:*      LISTEN 1154/mysqld
tcp6       0      0 [::]:http       [::]:*         LISTEN 1201/apache2

Как можно видеть, в данном выводе веб-сервер (один из его процессов) прослушивает по протоколу tcp6 все HTTP-соединения. Демон MySQL прослушивает локальный порт mysql по протоколу tcp. Для того, чтобы иметь возможность видеть номера самих портов, а также IP-адреса хостов, следует к команде netstat -lp добавить ключ n. Стоит также отметить, что для получения полной информации о слушающих процессах нужно запускать команду netstat от имени суперпользователя. Если не используется опция -n и не работает служба DNS, то netstat будет выполняться очень медленно.

Получение статистики для различных сетевых протоколов

Команда netstat позволяет видеть статистические данные по использованию всех доступных в системе протоколов. Для этого нужно использовать ключ -s:

$ netstat -s
Ip:
671349985 total packets received
0 forwarded
345 incoming packets discarded
667912993 incoming packets delivered
589623972 requests sent out
60 dropped because of missing route
203 fragments dropped after timeout
Icmp:
242023 ICMP messages received
912 input ICMP message failed.
ICMP input histogram:
destination unreachable: 72120
timeout in transit: 573
echo requests: 17135
echo replies: 152195
66049 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 48914
echo replies: 17135
Tcp:
4442780 active connections openings
1023086 passive connection openings
50399 failed connection attempts
0 connection resets received
44 connections established
666674854 segments received
585111784 segments send out
107368 segments retransmited
86 bad segments received.
3047240 resets sent
Udp:
4395827 packets received
31586 packets to unknown port received.
0 packet receive errors
4289260 packets sent

Как видно, выводимая статистика отображается с разбивкой по разделам для каждого протокола. Здесь содержатся очень полезные сведения для анализа и поиска неполадок в работе сети.

Также для команды netstat есть ещё один полезный ключ, позволяющий выводить обновлённые данные с интервалом в одну секунду. Этот ключ работает не в каждой связке с другими опциями. Однако, отслеживание интерфейсов в режиме реального времени с этим ключом очень удобно, например команда netstat -i -a -c будет выводить статистику по использованию всех интерфейсов в системе, в том числе и отключенных (ключ -a) автоматически каждую секунду — ключ -c.

Информацию о таблице маршрутизации позволяет получить ключ -r:

$ netstat -r -n
Таблица маршрутизации ядра протокола IP
Destination Gateway Genmask       Flags MSS Window irtt Iface
192.168.1.0 0.0.0.0 255.255.255.0 U     0   0      0    eno1
192.168.2.0 0.0.0.0 255.255.255.0 U     0   0      0    eno0
127.0.0.0   0.0.0.0 255.0.0.0     U     0   0      0    lo

Все рассмотренные ключи предоставляют исчерпывающие возможности для получения информации об использовании сети в подавляющем большинстве случаев. Однако, команда netstat располагает кроме рассмотренных, куда более внушительным арсеналом опций, ознакомиться с которыми можно с помощью команды man netstat.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: