linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Сеть: L2 / L3/icmp

kb/network-l2-l3 ── Сеть: L2 / L3 ── beginner

ICMP

ICMP - служебный протокол поверх IP для control-сообщений: echo (ping), destination-unreachable, time-exceeded (используется traceroute), MTU discovery. Не для данных.

view as markdownaka: ping, icmp-echo

Что такое ICMP

ICMP (Internet Control Message Protocol, RFC 792) - слой поверх IP для служебных сообщений: уведомлений об ошибках доставки, диагностики, MTU discovery. Это не транспорт для данных приложений (TCP/UDP - для этого).

ICMP-пакет - это IP-пакет с protocol number 1, payload содержит ICMP-header (type + code + checksum) и type-specific data.

Самые важные типы

typecodeназваниеназначение
00echo-replyответ на ping
30destination-unreachable: netсеть недостижима
31destination-unreachable: hostхост недостижим (ARP не разрешился)
33destination-unreachable: portпорт закрыт (UDP-трюк)
34fragmentation-neededпакет > MTU + DF (PMTU discovery)
50redirectроутер сообщает «у тебя плохой маршрут, используй Y»
80echo-requestping-запрос
110time-exceeded: TTL=0основа traceroute
111time-exceeded: frag-reassemblyтаймаут сборки фрагментов

ping = ICMP echo

Команда ping шлёт type=8 (echo-request), приходит type=0 (echo-reply). В payload - увеличивающийся seq и timestamp; сравнение позволяет считать RTT и потери.

Поля которые помогают диагностике:

64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=8.45 ms
  • icmp_seq - номер пакета (отсутствие = loss)
  • ttl - сколько hop'ов осталось у ответа; разные ttl = ECMP-балансировка
  • time - RTT (полный round trip)

traceroute через time-exceeded

Классический traceroute:

  1. Шлёт UDP-пакет (или ICMP echo, или TCP SYN) с TTL=1
  2. Первый роутер уменьшает TTL до 0, дропает пакет, отправляет ICMP type=11 (time-exceeded). Источник видит IP первого hop'а
  3. Шлёт повторно с TTL=2 → видим второй hop, и так далее

Когда ICMP блокирован

Параноидальные файрволы любят дропать ICMP - это антипаттерн:

  • Без ICMP не работает PMTU discovery → пакеты больше MTU молча дропаются → приложение «зависает» на больших ответах
  • Без traceroute сложнее диагностировать сетевые проблемы
  • Без ping сложнее проверить «жив ли хост»

В крайнем случае дропают только echo, сохраняя type=3 и type=11.

§ команды

bash
ping -c 4 8.8.8.8

Послать 4 echo-request и показать статистику

bash
ping -M do -s 1500 1.1.1.1

DF + payload 1500: проверка PMTU; вернётся ICMP frag-needed если MTU меньше

bash
traceroute -I 8.8.8.8

-I: использовать ICMP (а не UDP) для пробинга - лучше когда UDP режут

bash
mtr 8.8.8.8

Live-traceroute с накоплением статистики потерь по hop'ам

bash
tcpdump -i any 'icmp' -c 10

Снять любые ICMP-пакеты (см. [[#cmd-tcpdump|tcpdump]])

§ см. также

  • ipv4-addressingIPv4-адресация и CIDRIP-адрес = 32 бита, обычно как `a.b.c.d`. **/N** в конце - длина префикса сети: `/24` = первые 24 бита фиксированы, последние 8 - host'ы (256 адресов).
  • tracerouteTraceroute - как увидеть путь пакета через интернетУтилита, показывающая каждый роутер на пути до удалённого хоста. Работает через хитрый трюк: шлёт пакеты с **возрастающим TTL** (1, 2, 3, ...) и собирает ответы «time exceeded» от роутеров, которые дропают такие пакеты.
  • mtu-and-pmtudMTU и Path MTU Discovery (PMTUD)MTU - максимум байт IP-пакета на интерфейсе. PMTUD ищет минимум на пути через ICMP "Fragmentation Needed". Если ICMP режут - blackhole больших пакетов. MSS clamping в iptables/nftables - стандартный фикс на туннелях VXLAN/IPsec.
  • cmd-mtrmtr - traceroute + ping в одномmtr = traceroute + ping. Непрерывно опрашивает каждый hop, показывает loss% и latency. Помогает за секунду найти где в маршруте теряются пакеты или растёт задержка.
  • ipv6-basicsIPv6 - адресация и базовые концепцииIPv6 - 128-битные адреса в 8 группах по 16 бит. Link-local fe80::/10 для соседей, global для интернета. SLAAC выдаёт адрес автоматически через Router Advertisement. Neighbor Discovery (NDP) заменяет ARP.
  • cmd-nmapnmap - сканирование портов и хостовnmap - сетевой сканер: discover хостов (-sn), TCP/UDP-порты (-sS/-sU), версии сервисов (-sV), ОС (-O), NSE-скрипты. Только в своей сети или с явным разрешением - сканировать чужое запрещено.

§ упоминается в уроках

  • ›intermediate-02-tcp-handshake
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки