Инструменты диагностики сети

Собираем набор команд для диагностики сети и учимся читать их вывод на реальных примерах.

Когда «что-то не работает», эти команды отвечают на вопросы по слоям: жив ли узел, резолвится ли имя, что отвечает сервер, какие соединения открыты.

ping — доступен ли узел

Проверяет, отвечает ли хост, и измеряет задержку (RTT). Первый вопрос диагностики: «сервер вообще жив?».

ping example.com
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=11.8 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=12.1 ms
2 packets transmitted, 2 received, 0% packet loss

0% packet loss и стабильный time — связь хорошая. Большие потери или растущая задержка — проблемы на пути.

traceroute — путь до узла

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

traceroute example.com
1  192.168.1.1     1.2 ms     (ваш роутер)
2  10.0.0.1        5.4 ms     (узел провайдера)
3  172.16.31.1    12.0 ms
4  93.184.216.34  18.7 ms     (цель)

nslookup и dig — что в DNS

Показывают, в какой IP резолвится имя и какие записи есть. Отвечают на вопрос «проблема в DNS или дальше?».

nslookup example.com
dig example.com A      # подробнее: запись типа A
dig example.com MX     # почтовые серверы
;; ANSWER SECTION:
example.com.   3600   IN   A   93.184.216.34

Здесь 3600 — это TTL записи в секундах, A — тип, 93.184.216.34 — адрес.

curl — что отвечает сервер

Главный инструмент для работы с HTTP из терминала. Делает запрос и показывает ответ — без браузера и его кэша.

curl -I https://example.com          # только заголовки ответа
curl -v https://example.com          # подробно: запрос, TLS, ответ
curl -X POST -d '{"a":1}'      -H 'Content-Type: application/json' https://api.example.com/items
HTTP/2 200
content-type: text/html; charset=UTF-8
cache-control: max-age=604800
content-length: 1256

curl -I мгновенно показывает статус и заголовки — удобно проверять редиректы, кэш-политику, тип контента.

netstat / ss — открытые соединения

Показывает, какие соединения и порты сейчас активны на машине. Помогает найти «кто занял порт» и «куда соединён процесс».

netstat -tuln       # слушающие TCP/UDP порты
ss -tuln            # современная замена netstat (Linux)
lsof -i :3000       # какой процесс занял порт 3000
Proto  Local Address    State
tcp    0.0.0.0:443      LISTEN
tcp    0.0.0.0:22       LISTEN
tcp    127.0.0.1:5432   LISTEN

Алгоритм диагностики

  1. ping — узел жив? Нет — проблема сети/узла.
  2. nslookup/dig — имя резолвится в правильный IP? Нет — проблема DNS.
  3. curl -v — сервер отвечает? Какой статус? Проблема с TLS/HTTP?
  4. traceroute — если связь рвётся, на каком участке?
  5. netstat/ss — локально: слушает ли нужный порт нужный процесс?

Итог

  • ping — доступность и задержка; traceroute — путь до узла.
  • nslookup/dig — что отдаёт DNS; curl — что отвечает сервер по HTTP.
  • netstat/ss — какие порты и соединения активны локально.
  • Диагностируй по слоям: сеть → DNS → HTTP → локальные порты.
Проверьте себя
1. Какая команда покажет, в какой IP-адрес резолвится доменное имя?
Aping
Bnetstat
Cnslookup или dig
Dtraceroute
2. Что удобнее всего использовать, чтобы из терминала посмотреть HTTP-ответ сервера и его заголовки?
Aping
Bcurl
Ctraceroute
Dnslookup
3. Зачем нужна команда netstat / ss?
AИзмерить задержку до сайта
BПосмотреть, какие порты слушаются и какие соединения активны на машине
CУзнать IP по имени
DПроверить сертификат
Поддержать проект