Полезная команда и утилита одновременно, которая называется netstat, позволяет просматривать информацию о соединениях системы по протоколам UDP и TCP.

Команду можно запустить так, чтобы она выполнялась каждые n секунд и позволяла получать следующую информацию в табличном формате:

  • Название протокола (TCP или UDP)
  • Локальный адрес IP и номер порта, которые используются соединением через сокет
  • Удаленный адрес IP (адрес назначения) и номер порта, который используется соединением через сокет
  • Состояние соединения (Ожидающее (Listening)), Установленное (Established)) и т.д.)

Изучение состояния портов соединения между двумя системами позволяет исключить протокол TCP/IP, как одну из причин проблемы. Для полного понимания информации, предоставляемой этой командой, необходимо понять принципы установки соединения в протоколе TCP/IP. Вот основные этапы процесса установки соединения TCP/IP:

1. При попытке установить соединение клиент отправляет сообщение SYN серверу.

2. Сервер отвечает собственным сообщением SYN и подтверждением (ACK).

3. После этого клиент отправляет сообщение ACK обратно на сервер, завершая процесс установки соединения.

Процесс разрыва соединения состоит из следующих этапов:

1. Клиент сообщает "Я закончил", отправляя сообщение FIN серверу. На этом этапе клиент только принимает данные от сервера, но сам ничего не отправляет.

2. После этого сервер отправляет сообщение ACK и отправляет собственное сообщение FIN клиенту.

3. После этого клиент отправляет сообщение ACK серверу, подтверждая запрос сервера FIN.

4. При получении сообщения ACK от клиента сервер закрывает соединение.

Понимание этапов процесса установки и разрыва соединения позволяет более прозрачно интерпретировать состояния соединений в выводе команды netstat. Соединения в списке могут находиться в следующих состояниях.

  • CLOSE_WAIT — указывает на пассивную фазу закрытия соединения, которая начинается после получения сервером сообщения FIN от клиента.
  • CLOSED — соединение прервано и закрыто сервером.
  • ESTABLISHED — клиент установил соединение с сервером, получив от сервера сообщение SYN.
  • FIN_WAIT_1 — клиент инициировал закрытие соединения (отправил сообщение FIN).
  • FIN_WAIT_2 — клиент получил сообщения ACK и FIN от сервера.
  • LAST_ACK — сервер отправил сообщение FIN клиенту.
  • LISTEN — сервер готов принимать входящие соединения.
  • SYN_RECEIVED — сервер получил сообщение SYN от клиента и отправил ему ответ.
  • TIMED_WAIT — клиент отправил сообщение FIN серверу и ожидает ответа на это сообщение.
  • YN_SEND — указанное соединение активно и открыто.

Теперь все, что необходимо знать о команде netstat, это синтаксис ее вызова:

netstat [-a] [-e] [-n] [-o] [-p <протокол>] [-r] [-s] [интервал]

Параметры команды netstat приводятся далее.

Параметры команды netstat

Параметр

Использование

-a

Отображает все соединения и ожидающие порты

-e

Отображает статистику Ethernet

-n

Показывает адреса и порты в цифровом формате (адреса IP вместо имен интерфейсов

-o

Отображает идентификатор процесса-владельца для каждого соединения

-p <протокол>

Показывает соединения для указанного протокола. Можно выбрать один из таких протоколов: TCP, TCPv6, UDP и UDPv6. При указании параметра -s можно указывать IP, IPv6, ICMP и ICMPv6.

-r

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

-s

Отображает статистику для каждого протокола в отдельности; по умолчанию статистика отображается для протоколов TCP, TCPv6, UDP и UDPv6, IP, IPv6, ICMP и ICMPv6. Подмножество протоколов может быть указано с помощью параметра -p.

интервал

Интервал в секундах, за который команда обновляет свой вывод. При указании интервала команду можно прервать комбинацией клавиш <Ctrl+C>.