Справочник для каждого пакета
Любое устройство, отправляющее IP-пакеты, от смартфона до магистрального маршрутизатора, опирается на таблицу маршрутизации. Это список правил, в котором для каждого диапазона адресов указано, куда пересылать пакеты. Перед отправкой система ищет в ней запись, подходящую под адрес назначения, и по ней выбирает интерфейс и следующий узел.
У обычного компьютера таблица маленькая, несколько строк. У маршрутизатора провайдера, участвующего в глобальном обмене, сотни тысяч записей.
Из каких полей состоит запись
Типичная строка содержит пять сведений. Сеть назначения вместе с маской задаёт диапазон, например 192.168.1.0/24. Шлюз, он же следующий переход, указывает, кому передавать пакет: для непосредственно подключённых сетей это может быть пусто или адрес самого интерфейса. Интерфейс определяет, через какой порт или адаптер отправлять. Метрика служит показателем предпочтения, и меньшее значение лучше. Иногда добавляется происхождение записи: подключена напрямую, задана вручную или получена от протокола маршрутизации.
Маршрут по умолчанию записывают как 0.0.0.0/0. Он совпадает с любым адресом, но имеет самую низкую точность, поэтому применяется в последнюю очередь.
Как выбирается подходящая запись
Решает принцип наиболее длинного совпадающего префикса. Если для адреса 10.1.2.3 есть записи 10.0.0.0/8, 10.1.0.0/16 и 0.0.0.0/0, победит вторая, потому что её префикс длиннее и она точнее описывает адрес. Метрика вступает в игру, когда несколько записей одинаково точны: выбирается с меньшей метрикой либо трафик распределяется между равнозначными путями.
Благодаря этому можно описывать общее правило и добавлять исключения. Например, весь трафик идёт через основной канал, но одна конкретная сеть напрямую через другой шлюз.
Откуда записи берутся
Часть из них система создаёт сама при настройке интерфейса: подключённая подсеть и маршрут по умолчанию из DHCP. Другие добавляет пользователь или администратор командами route в Windows и ip route в Linux. Третьи приходят от протоколов маршрутизации, которые обмениваются данными с соседями и обновляют таблицу при изменении топологии.
Программы, создающие виртуальные сетевые интерфейсы, тоже добавляют собственные маршруты, поэтому после их включения таблица может заметно измениться. Не удаляйте незнакомые записи без понимания последствий, иначе связь пропадёт.
Как посмотреть и прочитать таблицу
В Windows выполните route print или netstat -rn, в Linux ip route, в macOS netstat -rn. Ищите строку с маршрутом по умолчанию: в ней указан адрес шлюза и интерфейс, через который идёт весь внешний трафик. Далее идут записи для локальной подсети и, возможно, для виртуальных адаптеров.
Если доступ к отдельной сети пропал, проверьте, есть ли для неё запись, не перекрывает ли её другая с более длинным префиксом и не указывает ли шлюз на недоступный адрес. Этих трёх вопросов обычно хватает, чтобы понять причину.
Типичные сбои и способы проверки
Если сеть перестала отвечать после установки новой программы, откройте таблицу маршрутов и сравните её с прежней. Лишний маршрут по умолчанию с более низкой метрикой уводит весь трафик в виртуальный адаптер, и связь пропадает. Устранить проблему можно, отключив адаптер или увеличив его метрику.
Если не открывается устройство в соседней подсети, убедитесь, что для неё есть маршрут через правильный шлюз, и что на самом шлюзе таблица содержит обратный путь. Часто односторонняя запись приводит к тому, что запросы уходят, а ответы не возвращаются. Помогает трассировка: если она обрывается на конкретном узле, значит, дальше маршрута нет либо трафик блокируется. Записывайте изменения, которые вносите вручную, чтобы можно было откатить их.
Отдельно отметим, что в таблицах систем с поддержкой IPv6 существует параллельный набор записей, устроенный так же, но с адресами другого формата. Если сайт работает по одному протоколу и не работает по другому, стоит сравнить маршруты по умолчанию в обеих таблицах.
Полезно знать и о приоритетах источников: если один и тот же префикс известен из нескольких источников, например задан вручную и получен от протокола, маршрутизатор выбирает тот, у которого выше доверие, так называемая административная дистанция, а метрику сравнивает только внутри одного источника.