Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Команда netstat

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

Отображение таблицы маршрутизации

При вызове netstat с параметром -r, он показывает таблицу маршрутизации ядра, подготовленную с помощью route. На vstout он выдаст:
# netstat -nr
Kernel IP routing table
Destination   Gateway      Genmask         Flags  MSS Window  irtt Iface
127.0.0.1     *            255.255.255.255 UH       0 0          0 lo
172.16.1.0    *            255.255.255.0   U        0 0          0 eth0
172.16.2.0    172.16.1.1   255.255.255.0   UG       0 0          0 eth0

Опйия -n заставляет netstat печатать IP-адреса вместо имен хостов и сетей. Это особенно полезно, когда вы хотите избежать поисков адреса по сети (например, через DNS или NIS-сервер).

Вторая колонка вывода netstat показывает маршрутизационную запись gateway. Если шлюз не используется, печатается звездочка. Третья колонка показывает сетевую маску (Genmask) маршрута. Когда дается IP-адрес, чтобы найти подходящий маршрут для него, ядро просматривает все записи таблицы маршрутизации, берет побитовое AND адреса и genmask и лишь затем сравнивает результат с целью маршрута.

<PЧетвертая колонка показывает различные флаги, которые описывают маршрут:
G

маршрут использует шлюз (gateway).

U

интерфейс, который нужно использовать, работает.

H

только отдельный хост может быть достигнут через данный маршрут (не сеть!). Например, для записи loopback 127.0.0.1 .

D

устанавливается, если запись таблицы была произведена по приходу перенаправляемого сообщения ICMP (см. раздел Internet Control Message Protocol главы 2), или если запись таблицы была создана демоном динамической маршрутизации, наподобие gated.

M

устанавливается, если запись таблицы была изменена перенапавляемым сообщением ICMP.

!

путь неверен (закрыт), все пакеты будут отброшены.

Еще три колонки показывают MSS, Window и irtt, применяемые для соединений TCP через этот маршрут. MSS (Maximum Segment Size) определяет максимальный размер пакета для этого маршрута. Window задает максимальное количество данных, которое система примет в одном пакете с удаленного компьютера. irtt означает "initial round trip time". TCP протокол гарантирует, что данные будут надежно доставлены между компьютерами, повторно передавая пакеты, если они были потеряны. При этом ведется счетчик времени: сколько можно ждать, пока пакет дойдет до машины назначения, и оттуда придет подтверждение. Если время вышло, пакет будет послан еще раз. Этот процесс называется round-trip time. initial round-trip time задает значение, которое используется при установке подключения. Для большинства сетей подходит значение по умолчанию, но для некоторых медленных сетей (особенно ряд типов пакетного радио) время слишком короткое, что вызывает ненужные повторы. Параметр irtt может быть установлен, используя команду route. По умолчанию в этом поле ноль.

Последнее поле показывает, к какому сетевому интерфейсу относится маршрут.

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

Когда netstat вызывается с параметром -i, он показывает статистику для сетевых интерфейсов. Если, кроме того, дается опция -a, он будет печатать все интерфейсы, представленные в ядре, а не только те, которые были отконфигурированы в настоящее время. На vstout вывод netstat будет напоминать это:
# netstat -i
Kernel Interface table
Iface MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags
lo      0   0   3185      0      0      0   3185      0      0      0 BLRU
eth0 1500   0 972633     17     20    120 628711    217      0      0 BRU

Поля MTU и Met показывают текущий MTU и метрическое значение для этого интерфейса. Колонки RX и TX показывают сколько пакетов были получены или переданы без ошибок (RX-OK /TX-OK), повредились (RX-ERR /TX-ERR), сколько было потеряно (RX-DRP/TX-DRP) и сколько было потеряно из-за переполнения (RX-OVR/ TX-OVR).

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

B

Установлен широковещательный адрес.

L

Этот интерфейс задает устройство loopback.

M

Интерфайс получает все пакеты (режим promiscuous).

O

ARP выключен для этого интерфейса.

P

Это соединение point-to-point.

R

Интерфейс работает.

U

Интерфейс активен.

Отображение соединений

netstat поддерживает множество опций для отображения активных и пассивных соединений. Опции -t, -u, -w и -x показывают активные TCP, UDP, RAW или UNIX соединения. Если вы зададите параметр -a, сокеты, которые ждут соединения (то есть, слушают сеть), также показываются. Это даст вам список всех серверов, которые в настоящее время работают в вашей системе.

Вызов netstat -ta на vlager даст:
$ netstat -ta
Active Internet Connections
Proto Recv-Q Send-Q Local Address    Foreign Address    (State)
tcp        0      0 *:domain         *:*                LISTEN
tcp        0      0 *:time           *:*                LISTEN
tcp        0      0 *:smtp           *:*                LISTEN
tcp        0      0 vlager:smtp      vstout:1040        ESTABLISHED
tcp        0      0 *:telnet         *:*                LISTEN
tcp        0      0 localhost:1046   vbardolino:telnet  ESTABLISHED
tcp        0      0 *:chargen        *:*                LISTEN
tcp        0      0 *:daytime        *:*                LISTEN
tcp        0      0 *:discard        *:*                LISTEN
tcp        0      0 *:echo           *:*                LISTEN
tcp        0      0 *:shell          *:*                LISTEN
tcp        0      0 *:login          *:*                LISTEN

Видно, что больше всего серверов просто ждут соединения. Однако, четвертая строка говорит о SMTP-соединении с vstout, а шестая сообщает о telnet-соединении с vbardolino.

При использовании параметра -a будут отображаться все сокеты всех семейств сразу.