Linux Labs

Сеть / Ступень 2 из 14

Как Linux выбирает маршрут

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 2 из 7 · теория · 6 мин

Таблица маршрутов

Куда отправить пакет, ядро решает по таблице маршрутов: в каждой её строке — сеть и путь к ней.

Маршрут — строка таблицы: сеть назначения и путь к ней. Таблицу печатает ip route. У клиента из опыта в ней одна строка:

text
192.0.2.0/24 dev lab0 proto kernel scope link src 192.0.2.10

Её ядро добавило само, когда lab0 получил адрес 192.0.2.10/24: своя подсеть доступна напрямую.

Поле Что значит
192.0.2.0/24 сеть назначения
dev lab0 интерфейс, через который отправлять
proto kernel scope link строку добавило ядро, сеть подключена напрямую
src 192.0.2.10 свой адрес, с которого отправлять

Для 198.51.100.20 подходящей строки нет, поэтому ping получает отказ сразу.

Сеть за соседом описывает маршрут со шлюзом — ближайшим узлом, которому пакет передают дальше. Шлюз стоит после слова via:

text
198.51.100.20 via 192.0.2.1 dev lab0

Шлюз должен быть соседом, из подключённой подсети. Шлюз из чужой подсети ip route add не примет: Error: Nexthop has invalid gateway.

Проверь себя 1 вопрос

В таблице клиента есть такая строка. Куда клиент отправит пакет для 203.0.113.5?

203.0.113.0/24 via 192.0.2.1 dev lab0
  • Для чужой подсети маршрут и нужен: эта строка ведёт всю 203.0.113.0/24 через шлюз. Решение ядра покажет ip route get 203.0.113.5.

  • via значит: пакет передают шлюзу 192.0.2.1, дальше его доставляет он. Напрямую уходят пакеты своей подсети — у таких строк via нет.

Адрес после via — шлюз, которому передают пакет, а после dev — интерфейс, через который он уходит. 203.0.113.5 входит в 203.0.113.0/24, поэтому строка подходит.

Главное в шаге

  • Маршрут — строка таблицы: сеть назначения и путь к ней; таблицу печатает ip route.
  • Маршрут к подсети своего адреса ядро добавляет само — proto kernel scope link.
  • После via стоит шлюз — сосед, которому передают пакет для сети за ним.
Ubuntu 24.04
Загрузка…