Компьютерные сети
ICMP, Ping и Traceroute
«Интернет не работает» - и начинаются гадания. Кабель? Роутер? Провайдер? DNS? С правильными инструментами проблема находится за минуту. Ping и traceroute - стетоскоп для сети.
- **Мониторинг:** Системы вроде Nagios пингуют серверы каждые N секунд
- **SLA:** Провайдеры измеряют latency и packet loss для гарантий качества
- **Геймеры:** Высокий ping = лаги в онлайн-играх
Предварительные знания
Протокол ICMP
**ICMP** (Internet Control Message Protocol) - служебный протокол L3 для диагностики и сообщений об ошибках. Он не передаёт данные пользователя, а помогает сети работать: «хост недоступен», «TTL истёк», «сеть перегружена».
ICMP-сообщения генерируются автоматически роутерами и хостами. Когда пакет не может быть доставлен - отправитель получает ICMP с объяснением причины.
**Безопасность:** Многие firewall блокируют ICMP, особенно входящий. Это скрывает информацию о сети от атакующих, но усложняет диагностику.
Для чего используется ICMP?
Ping: проверка доступности
**Ping** - утилита, которая отправляет ICMP Echo Request и ждёт Echo Reply. Если ответ пришёл - хост жив и доступен. Показывает время отклика (RTT - Round Trip Time).
**Типичные значения RTT:** • Локальная сеть: <1 ms • Город: 5-20 ms • Другой континент: 100-200 ms • Спутник: 500-700 ms
Ping до сервера показывает time=150ms. Что это значит?
Traceroute: карта маршрута
**Traceroute** показывает каждый роутер на пути к цели. Использует трюк с TTL: отправляет пакеты с TTL=1, 2, 3... Каждый роутер, где TTL истекает, отправляет ICMP Time Exceeded - так мы узнаём его IP.
**Совет:** Если видите высокий latency на одном хопе, но следующие нормальные - проблема не там. Роутер мог медленно ответить на ICMP, но быстро форвардить трафик.
Traceroute показывает * * * на 4-м хопе. Что это значит?
TTL: Time To Live
**TTL** (Time To Live) - поле в IP-заголовке, которое ограничивает время жизни пакета. Каждый роутер уменьшает TTL на 1. При TTL=0 пакет уничтожается - защита от бесконечных петель.
**Определение ОС по TTL:** Если ping показывает ttl=127, сервер скорее всего Windows (128-1). ttl=63 - вероятно Linux (64-1). Это называется OS fingerprinting.
Ping до сервера показывает ttl=52. Какая ОС на сервере вероятнее?
Практическая диагностика
Когда что-то не работает, диагностика идёт от простого к сложному: локальная сеть → gateway → интернет → конкретный сервер.
**Правило:** Если ping 8.8.8.8 работает, но ping google.com нет - проблема в DNS. Если traceroute обрывается на каком-то хопе - проблема там или дальше.
Если ping не работает, сервер мёртв
Сервер может блокировать ICMP, но работать нормально
Многие серверы отключают ответы на ping из соображений безопасности. Проверяйте через nc -zv host port или curl.
ping 8.8.8.8 работает, ping google.com - нет. В чём проблема?
Ключевые идеи
- **ICMP** - служебный протокол для диагностики и ошибок (L3)
- **Ping** - проверка доступности + измерение RTT
- **Traceroute** - показывает каждый хоп на пути (использует TTL)
- **TTL** - защита от петель, уменьшается на каждом роутере
- **Диагностика:** localhost → gateway → 8.8.8.8 → целевой хост
Связанные темы
ICMP и диагностика связаны с:
- ARP — Диагностика L2-связности
- DNS — Если ping IP работает, а имя нет - проблема DNS
- Firewall — Почему ICMP часто блокируется
Вопросы для размышления
- Почему ping localhost (127.0.0.1) работает даже без сетевого подключения?
- Как traceroute может показать путь, если firewall блокирует ICMP?
- Почему latency до сервера в Австралии будет выше, чем до сервера в Европе?