Компьютерные сети

9.1 Базовые команды

Протокол ICMP: основа диагностики сетей

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

Аналогия: Если IP — это "почтовая служба", то ICMP — это "служба оповещения о проблемах": "адрес не найден", "время доставки истекло", "маршрут недоступен".

Структура ICMP-сообщения

Формат ICMP-пакета:

  • Type (8 бит) — тип сообщения (например, 8 = Echo Request, 0 = Echo Reply)
  • Code (8 бит) — уточняет тип сообщения (дополнительная информация об ошибке)
  • Checksum (16 бит) — контрольная сумма для проверки целостности
  • Rest of Header (32 бита) — зависит от типа сообщения (может содержать ID, Sequence Number и т.д.)
  • Data — данные сообщения (часто содержит копию заголовка IP-пакета, вызвавшего ошибку)

Типы ICMP-сообщений

Основные типы ICMP (для IPv4):

  • Type 0 — Echo Reply — ответ на ping-запрос. Используется утилитой ping
  • Type 3 — Destination Unreachable — адрес назначения недоступен. Имеет несколько кодов:
    • Code 0 — сеть недоступна (Network Unreachable)
    • Code 1 — хост недоступен (Host Unreachable)
    • Code 2 — протокол недоступен (Protocol Unreachable)
    • Code 3 — порт недоступен (Port Unreachable)
    • Code 4 — требуется фрагментация, но установлен флаг DF (Don't Fragment)
    • Code 13 — административно запрещено (Communication Administratively Prohibited)
  • Type 4 — Source Quench — устарело, использовалось для уменьшения скорости отправки
  • Type 5 — Redirect — перенаправление на другой маршрутизатор
  • Type 8 — Echo Request — запрос ping. Используется утилитой ping
  • Type 11 — Time Exceeded — время жизни пакета истекло. Имеет коды:
    • Code 0 — TTL истекло в пути (используется в traceroute)
    • Code 1 — время сборки фрагментов истекло
  • Type 12 — Parameter Problem — проблема с заголовком IP-пакета
TypeCodeНазваниеОписание
00Echo ReplyОтвет на ping
30Network UnreachableСеть недоступна
31Host UnreachableХост недоступен
33Port UnreachableПорт недоступен
34Fragmentation NeededНужна фрагментация, но DF=1
80Echo RequestЗапрос ping
110TTL ExceededTTL истекло (traceroute)
111Fragment Reassembly Time ExceededВремя сборки фрагментов истекло

Как работает Ping: Echo Request/Reply

Процесс ping:

  1. Отправка Echo Request (Type 8): Утилита ping отправляет ICMP Echo Request с уникальным идентификатором и порядковым номером
  2. Получение Echo Reply (Type 0): Целевой хост отвечает ICMP Echo Reply с теми же идентификатором и номером
  3. Измерение RTT: Ping измеряет время между отправкой запроса и получением ответа (Round Trip Time)
  4. Проверка потерь: Если ответ не приходит, фиксируется потеря пакета
# Использование ping с различными ключами
# Windows
ping 8.8.8.8              # Простой ping (4 пакета)
ping 8.8.8.8 -n 10        # Отправить 10 пакетов
ping 8.8.8.8 -t           # Непрерывный ping (до Ctrl+C)
ping 8.8.8.8 -l 1000      # Размер пакета 1000 байт
ping 8.8.8.8 -i 64        # TTL = 64

# Linux/macOS
ping 8.8.8.8              # Непрерывный ping (до Ctrl+C)
ping 8.8.8.8 -c 10        # Отправить 10 пакетов
ping 8.8.8.8 -s 1000      # Размер пакета 1000 байт
ping 8.8.8.8 -t 64        # TTL = 64
ping 8.8.8.8 -i 0.2       # Интервал 0.2 секунды

Как работает Traceroute: Time Exceeded

Traceroute (tracert в Windows) использует ICMP Type 11 (Time Exceeded) для отслеживания пути пакетов через маршрутизаторы.

Процесс traceroute:

  1. TTL = 1: Отправляется пакет с TTL = 1. Первый маршрутизатор уменьшает TTL до 0 и отправляет ICMP Time Exceeded
  2. TTL = 2: Отправляется пакет с TTL = 2. Второй маршрутизатор отправляет ICMP Time Exceeded
  3. Продолжение: TTL увеличивается до тех пор, пока пакет не достигнет целевого хоста
  4. Целевой хост: Отвечает ICMP Echo Reply (если используется ICMP) или Port Unreachable (если используется UDP)

Различия в реализации:

  • Windows (tracert): Использует ICMP Echo Request
  • Linux/Unix (traceroute): По умолчанию использует UDP (можно переключить на ICMP с ключом -I)
# Использование traceroute
# Windows
tracert 1.1.1.1           # Трассировка маршрута
tracert -h 15 1.1.1.1     # Максимум 15 хопов
tracert -w 1000 1.1.1.1   # Таймаут 1000 мс

# Linux/macOS
traceroute 1.1.1.1        # Трассировка маршрута (UDP)
traceroute -I 1.1.1.1     # Использовать ICMP
traceroute -m 15 1.1.1.1  # Максимум 15 хопов
traceroute -w 1 1.1.1.1   # Таймаут 1 секунда

Path MTU Discovery (PMTUD)

PMTUD использует ICMP Type 3 Code 4 (Fragmentation Needed) для определения максимального размера пакета, который может пройти по пути без фрагментации.

Как работает PMTUD:

  1. Отправка с DF=1: Хост отправляет пакет с флагом Don't Fragment (DF)
  2. Маршрутизатор с меньшим MTU: Если MTU канала меньше размера пакета, маршрутизатор отправляет ICMP Fragmentation Needed с указанием максимального MTU
  3. Корректировка: Отправитель уменьшает размер пакета и повторяет отправку
  4. Оптимизация: Постепенно определяется максимальный размер пакета для данного пути

Проблема с блокировкой ICMP: Некоторые администраторы блокируют весь ICMP-трафик для "безопасности". Это нарушает работу PMTUD и может привести к проблемам с недоступностью сайтов или медленной работой.

Безопасность и ICMP

Рекомендации по фильтрации ICMP:

  • Разрешайте: Echo Request/Reply (Type 0, 8) — для диагностики
  • Разрешайте: Destination Unreachable (Type 3) — критично для PMTUD
  • Разрешайте: Time Exceeded (Type 11) — для traceroute
  • Блокируйте: Redirect (Type 5) — может использоваться для атак
  • Ограничивайте: Rate-limiting для Echo Request — защита от ICMP flood

ICMP в атаках: ICMP может использоваться для:

  • ICMP flood — отправка большого количества Echo Request для перегрузки
  • Smurf attack — отправка Echo Request с подменой адреса источника на адрес жертвы
  • ICMP tunneling — скрытая передача данных внутри ICMP-пакетов

Защита: rate-limiting, фильтрация broadcast ping, мониторинг необычного ICMP-трафика.

Базовые команды диагностики

# Проверка связи
ping 8.8.8.8
tracert 1.1.1.1         # Windows
traceroute 1.1.1.1      # Linux/macOS

# Конфигурация и таблицы
ipconfig /all           # Windows
ifconfig || ip addr     # Linux/macOS
netstat -ano            # Windows
ss -tulpen              # Linux/macOS

# DNS
nslookup example.com    # Windows
dig example.com ANY     # Linux/macOS

Резюме по ICMP

Ключевые моменты:

  • ICMP — протокол для передачи сообщений об ошибках и диагностики сети
  • Основные типы: Echo Request/Reply (ping), Destination Unreachable, Time Exceeded (traceroute)
  • Ping — использует Echo Request (Type 8) и Echo Reply (Type 0)
  • Traceroute — использует Time Exceeded (Type 11) для отслеживания маршрута
  • PMTUD — использует Fragmentation Needed (Type 3 Code 4) для определения MTU
  • Безопасность: Не блокируйте весь ICMP, разрешайте критичные типы с rate-limiting

Цель: ICMP обеспечивает критически важную обратную связь о состоянии сети и является основой большинства утилит диагностики.

Методология диагностики

  • Модель слоёв: поднимайтесь снизу вверх — физика → L2 → L3 → L4 → L7.
  • Разделяй и властвуй: локализуйте границы (клиент/сеть/сервер) и проверяйте каждый участок.
  • Базовые паттерны: нет IP → DHCP/статический; есть IP, но нет DNS → проверить резолв; высокий RTT/потери → трассировка/серии ICMP с повышенной частотой/размером пакета.
  • Traceroute: в Windows — ICMP, в Linux/macOS — обычно UDP/ICMP; фильтрация по пути и асимметрия маршрутов искажают вывод.

Алгоритмы и принципы

  • Гипотезы → проверки: формулируйте простую гипотезу, подтверждайте минимальным набором тестов.
  • Изменение одного параметра: меняйте одну переменную за раз для чистого вывода.
  • Сравнение эталонов: рабочее vs нерабочее место/путь; контрольные трассировки/pcap.
  • Время и корреляция: сопоставляйте симптомы с изменениями/релизами/инцидентами.
  • Документирование: фиксируйте шаги/выводы/команды; уменьшает цикл возврата.

Типовые категории проблем

  • L1/L2: дуплекс/скорость/ошибки, VLAN/Trunk, STP‑блокировки.
  • L3: адресация/шлюз/маршруты, асимметрия, PMTUD/MSS.
  • L4: порты/состояния TCP, перезаполнение окон, алгоритмы перегрузок.
  • L7: DNS/HTTP/TLS ошибки, таймауты приложений.

9.2 Расширенные утилиты

Используйте nmap для сканирования, iperf для измерения пропускной способности, mtr для комбинированной трассировки/пинга. Анализируйте pcap‑файлы в Wireshark или через tshark/tcpdump.

Практические сценарии

  • Падение Throughput: iperf в обе стороны (TCP/UDP), MTU/fragmentation/Window Scaling.
  • Подозрение на фильтрацию: nmap (SYN/ACK/UDP/версионный скан), сопоставление с правилами.
  • Анализ задержек: mtr по времени/направлениям, проверка QoS/очередей на участках.

9.3 Анализ трафика

Что такое Wireshark?

Wireshark — это анализатор сетевых протоколов, который позволяет "видеть" весь трафик, проходящий через сетевой интерфейс. Это как "рентген" для сети — показывает, что происходит на самом деле.

Аналогия: Если ping — это "позвонить и спросить, дома ли", то Wireshark — это "подслушать все телефонные разговоры" и проанализировать их.

Захват трафика

Как захватить трафик:

  • Выбор интерфейса: Выберите сетевой интерфейс (Ethernet, Wi-Fi)
  • Promiscuous режим: Захват всего трафика в сегменте сети (не только адресованного вам)
  • Фильтры захвата: Можно сразу фильтровать при захвате (например, только HTTP)
  • Сохранение: Сохраняйте захваченный трафик в файл для последующего анализа
# Перехват трафика через tcpdump (командная строка)
tcpdump -i eth0 -nn tcp port 80    # Захват HTTP-трафика
tcpdump -i wlan0 -vv icmp          # Захват ICMP с подробным выводом

# Сохранение в файл
tcpdump -i eth0 -w capture.pcap     # Сохранить в файл для анализа в Wireshark

Фильтры в Wireshark

Display фильтры (отображение):

  • По протоколу: tcp, udp, http, dns
  • По адресу: ip.addr == 1.1.1.1
  • По порту: tcp.port == 443
  • Комбинации: dns && !tcp (DNS, но не TCP)

Анализ трафика

Полезные функции:

  • Follow TCP Stream: Просмотр всего диалога между клиентом и сервером, восстановление потока данных
  • Графики: Визуализация RTT (Round Trip Time), пропускной способности (Throughput)
  • Статистика: Анализ протоколов, разговоров, потоков
  • Экспорт объектов: Извлечение файлов из HTTP-трафика

Диагностика проблем

Что искать в Wireshark:

  • ICMP/TTL: Диагностика недоступности хостов, проблем с маршрутизацией
  • PMTUD: Проблемы с размером пакетов (Fragmentation needed)
  • Retransmissions: Повторные передачи пакетов — признак потерь
  • Высокие задержки: Большое время между запросом и ответом
  • Ошибки протоколов: Неправильно сформированные пакеты

Этично и законно: Используйте Wireshark только в своей сети или с разрешения. Захват трафика в чужих сетях без разрешения незаконен.

Резюме

Ключевые моменты:

  • Wireshark — анализатор сетевых протоколов для захвата и анализа трафика
  • Захват: Выбор интерфейса, promiscuous режим, фильтры захвата
  • Фильтры: По протоколам, адресам, портам, комбинации условий
  • Анализ: Follow TCP Stream, статистика, графики RTT/Throughput
  • Диагностика: Поиск проблем с ICMP/TTL, PMTUD, retransmissions

Цель: Глубокий анализ сетевого трафика для диагностики проблем и понимания работы протоколов.

9.4 Мониторинг и телеметрия

  • NTP: синхронизация времени — база для логов/корреляции.
  • SNMP: сбор метрик/траппов; версии v2c/v3, безопасность.
  • Syslog: централизованные логи, уровни, ретеншн.
  • NetFlow/sFlow/IPFIX: телеметрия потоков, топ‑токены и аномалии.

Построение наблюдаемости

  • База: NTP + Syslog + метрики (SNMP/Exporter) + flow‑данные.
  • Алертинг: пороговые/поведенческие; корреляция с логами и трассировками.
  • Хранение: ретеншн/архивация, приватность и доступы.

9.5 Для профессионалов

  • ss: современная альтернатива netstat.
  • dig: гибкая диагностика DNS.
  • nmap: инвентаризация сети и аудит безопасности.

Настройки

Цветовая схема

Тема