Маршрутизация, ICMP и ping

Понимаем, как пакет находит дорогу через множество сетей и как ICMP помогает диагностировать путь.

Маршрутизация — это процесс выбора пути для пакета от отправителя к получателю через цепочку промежуточных маршрутизаторов (роутеров).

Проблема: как пакет находит путь

Интернет — это миллионы соединённых сетей. Когда пакет уходит к серверу на другом континенте, он не знает весь путь заранее. Каждый маршрутизатор на пути принимает локальное решение: «куда переслать дальше, чтобы приблизить пакет к цели». Это похоже на езду по указателям: вам не нужна карта всего пути, достаточно знать следующий поворот.

Таблица маршрутизации

У каждого маршрутизатора (и у вашего компьютера) есть таблица маршрутизации — список правил «для такой-то сети — отправляй туда-то». Упрощённо:

Назначение        Шлюз (next hop)    Интерфейс
192.168.1.0/24    напрямую           eth0       (своя локальная сеть)
10.8.0.0/24       192.168.1.1        eth0       (через роутер)
0.0.0.0/0         192.168.1.1        eth0       (всё остальное — шлюз по умолчанию)

Ключевая запись — шлюз по умолчанию (default gateway) 0.0.0.0/0: «если для адреса нет более точного правила — отправь сюда». Для домашнего компьютера это адрес роутера. Маршрутизатор выбирает самое точное совпадение (longest prefix match).

Посмотреть свою таблицу можно командой:

ip route        # Linux
route print     # Windows
netstat -rn     # macOS / Unix

Откуда роутеры знают маршруты

Внутри одной организации таблицы заполняют протоколы маршрутизации, которые автоматически обмениваются информацией о сетях:

ПротоколГде применяетсяИдея
OSPFвнутри организациивыбор кратчайшего пути по «стоимости»
RIPмалые сети (устаревает)путь по числу хопов
BGPмежду провайдерами (весь интернет)маршрутизация между автономными системами

BGP — «клей интернета»: именно он связывает сети разных провайдеров. Когда из-за ошибки BGP «пропадает» крупный сервис на полпланеты — это новость уровня мировых СМИ.

ICMP: служебный протокол

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

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

ping отправляет ICMP-запрос «echo request» и ждёт ответа «echo reply». Если ответы приходят — узел жив и сеть до него работает; по времени ответа видно задержку (RTT).

ping example.com
PING example.com (93.184.216.34): 56 data bytes
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
--- example.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss

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

traceroute (в Windows — tracert) показывает все промежуточные маршрутизаторы. Хитрость — поле TTL (Time To Live): пакет с TTL=1 «умирает» на первом роутере, тот шлёт ICMP-ошибку и так себя выдаёт. Увеличивая TTL, мы по очереди «вскрываем» весь путь.

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

Зачем это веб-разработчику

Когда сайт «не открывается», ping и traceroute отвечают на вопросы «сервер вообще жив?» и «на каком участке пути теряется связь?». Это первый шаг диагностики до того, как лезть в код приложения.

Итог

  • Маршрутизация — пошаговый выбор следующего узла по таблице маршрутизации.
  • Шлюз по умолчанию (0.0.0.0/0) — куда слать всё, для чего нет точного правила.
  • Маршруты заполняют протоколы OSPF, RIP (внутри сетей) и BGP (между провайдерами).
  • ICMP — служебный протокол; на нём работают ping (жив ли узел) и traceroute (путь до узла).
Проверьте себя
1. Что такое шлюз по умолчанию (default gateway)?
AСамый быстрый маршрутизатор
BУзел, куда отправляются пакеты, для которых нет более точного маршрута (0.0.0.0/0)
CDNS-сервер
DАдрес самого устройства
2. Какой протокол связывает сети разных провайдеров в масштабе всего интернета?
AOSPF
BRIP
CBGP
DICMP
3. На каком протоколе основаны утилиты ping и traceroute?
ATCP
BUDP
CICMP
DHTTP
4. Как traceroute обнаруживает промежуточные маршрутизаторы?
AСпрашивает у DNS
BПостепенно увеличивает TTL: пакет «умирает» на очередном роутере, который шлёт ICMP-ошибку
CСканирует все порты
DЧитает таблицу BGP
Поддержать проект