Конечно, одна деталь, на которую нужно обратить внимание, - это соответствие маршрута. Если я отправляю на 192.0.2.55/24 и маршрут доступен для трафика на 10.55.0.0/16, то этот маршрут игнорируется, потому что он не применяется.
Следующий критерий, который обычно рассматривается, - это иметь более конкретные маршруты, имеющие приоритет над более общими маршрутами. Под «конкретным» маршрутом я подразумеваю меньшие подсети. Другими словами, большее число при использовании нотации / CIDR и большие маски подсети при использовании нотации «маска подсети». Другими словами, сети назначения с меньшим количеством возможных адресов.
Таким образом, «шлюз по умолчанию», также известный как «последний шлюз», обычно указывает место назначения для всего трафика в сеть 0.0.0.0/0. Любой маршрут для меньшей сети будет «более конкретным» и будет иметь приоритет. Итак, 192.0.2.0/24 будет иметь больший приоритет.
В-третьих, маршруты обычно имеют другое поле, называемое «метрикой», или иногда другое имя, например «приоритет». Если у вас несколько сетей одинакового размера, это может оказать влияние.
Эти «метрические» значения могут быть чем-то, что генерируется автоматически (например, таким образом, высокоскоростная сеть используется для большей части трафика), но может быть скорректировано вручную.
Где информация о шлюзе, которая должна быть взята, закодирована внутри отправленных IP-пакетов?
Пакеты IP не содержат никакой информации о маршрутизации, за исключением указания IP-адреса назначения. Детали маршрутизации определяются оборудованием, которое обрабатывает маршрутизацию на этом пути, и такие детали обычно не помещаются в IP-пакет. (Следовательно, оборудование не ищет такие детали, поскольку его там нет. Поскольку оборудование не ищет такую информацию, было бы бессмысленно пытаться включать такую информацию.)
На странице 11 RFC 791 показана таблица в стиле «ASCII ART» информации, которая находится в IP-пакете. После этой таблицы этот документ показывает подробности (например, раздел «Опции» описан на стр. 15).