
Предположим, что в одной сети есть два шлюза. Если я правильно понимаю, таблица маршрутизации IP на компьютере отправителя решает, какие пакеты будут маршрутизированы через какой шлюз.
Таблицы IP-маршрутизации содержат IP-адрес шлюза.
Как этот IP-адрес шлюза используется при отправке IP-пакетов?
решение1
TL;DR: адрес шлюза хранится только в кадре Ethernet, содержащем этот пакет TCP/IP.
Трафик сервер->коммутатор->маршрутизатор, а также трафик сервер->коммутатор->сервер — это то, где IP-адресация на самом деле не играет никакой значимой роли. Это мир базового протокола, скорее всего, Ethernet. Так что это мир, который работает на MAC-адресации.
Итак, вам нужно только разрешить путаницу, что шлюз по умолчанию — это IP-адрес. Ну, это, своего рода... то, что показывается человеку... но IP этого шлюза — этотольконужно было сделать одну вещь, а именно спросить: у кого здесь есть 192.168.1.1? Ответ приходит, что шлюз - MAC 88:99:aa:bb:cc:dd:ee:ff. (Это запрос/ответ ARP, переводчик между двумя мирами.) MAC - это то, что фактически используется. Пакет отправляется на этот MAC на уровне Ethernet, несмотря на то, что на уровне IP пакет указывает совершенно не связанный IP-адрес назначения конечного получателя.
Таким образом, пакет помечается для отправки на выбранный шлюз путем установки поля "MAC назначения" кадра Ethernet. Поле определяет, какой шлюз в этой сети получит его, если есть несколько шлюзов. ("Кадр" - это базовая капсула, которая содержит пакет или часть пакета.)
Обобщение: в то время как таблицы маршрутизации являются ядром IP, их столбец с названием Next Hop являетсяникогдареализовано с IP-адресацией, когда пакет проходит по проводу. Следующий переход всегда фактически использует Ethernet, MPLS или другой базовый протокол:
$ ip route show
192.168.98.0/24 via 192.168.99.1 dev eth0
| | |
| <- IP world -> | <- underlying world -> |
| | |
Выше, даже когда в базовом мире упоминается что-то вроде 192.168.99.1
, что является концепцией мира IP, на самом деле они не имеют это в виду буквально.
решение2
Заголовок IP-датаграммы содержит только адресную информацию источника и назначения. На основе назначения маршрутизатор должен знать, куда пересылать пакет дальше, и эта информация хранится в таблице маршрутизации.
Там может бытьстатический маршрутинформация об адресе или его подсети ишлюз по умолчаниюиспользуется для остальных. Обычно это происходит в локальной сети: может быть статическая маршрутизация к другим локальным сетям и шлюз по умолчанию для остальных, т.е. Интернета. В случае несколькихшлюзы по умолчаниют.е. маршруты к 0.0.0.0
или ::
, активный выбирается егоПредпочтениеилиМетрическаяценить.
Все становится сложнее, когда между пунктами назначения существует несколько маршрутов, как между провайдерами на уровне Интернета. Существует несколько методов обмена информацией между маршрутизаторами:Протокол маршрутной информации(РВАТЬ),Сначала откройте кратчайший путь(ОСПФ) иПротокол пограничного шлюза(BGP). Независимо от того, как эта информация передается, таблица маршрутизации знает следующий переход, а IP-пакет знает только свой конечный пункт назначения.
решение3
Короткий и простой ответ: он не кодируется в пакете, или это целевой адрес Ethernet, в зависимости от того, как вы на это смотрите. Стек IP/Ethernet смотрит, какой шлюз обрабатывает IP-адрес назначения, отправляет запрос ARP на IP-адрес шлюза, чтобы получить его MAC-адрес, затем отправляет пакет на MAC-адрес шлюза. Затем шлюз пересылает пакет и делает то же самое снова. Это предполагает сеть Ethernet.
Думаю, я ответил на то, о чем вы спрашиваете. Я когда-то задавался тем же вопросом. Ваш вопрос можно также интерпретировать как то, как хост, имея определенную таблицу маршрутизации, решает, на какой шлюз отправить исходящий пакет.
решение4
Конечно, одна деталь, которая проверяется, это соответствие маршрута. Если я отправляю на 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-пакет. (Поэтому оборудование не ищет такие подробности, поскольку их там нет. Поскольку оборудование не ищет такую информацию, было бы бессмысленно пытаться включить такую информацию.)
RFC 791 страница 11показывает таблицу в стиле "ASCII ART" информации, которая находится в пакете IP. После этой таблицы этот документ показывает подробности (например, раздел "Опции" описан на странице 15).