Связь между таблицей маршрутизации и сетевым уровнем таблицы пересылки

382
calveeen

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

Таблица пересылки, с другой стороны, сообщает нам, какой интерфейс маршрутизатора переадресовывать на основе соответствия самого длинного префикса в IP-адресе интерфейсу маршрутизатора.

Поскольку таблицы маршрутизации каждого маршрутизатора содержат векторы расстояния, которые говорят нам кратчайшее расстояние до всех других маршрутизаторов в сети (стабильное состояние).

Исходя из этого у меня есть несколько вопросов.

1) Поскольку таблицы маршрутизации содержат кратчайшее расстояние до маршрутизатора следующего перехода, почему существует необходимость в таблице пересылки, чтобы сообщить нам, какой интерфейс маршрутизатора следует переслать? Как совместить две концепции вместе? или я что-то упустил

2) Алгоритмы маршрутизации должны определять кратчайший маршрут для пакета от клиента, например, для достижения сервера, означает ли это, что каждый раз, когда устанавливается TCP-соединение с различными серверами, кратчайший маршрут определяется путем просмотра таблицы маршрутизации маршрутизаторов. Как именно это происходит? Мне известно только то, что маршрутизаторы хранят векторы расстояния всех маршрутизаторов в сети, что является кратчайшим расстоянием до всех маршрутизаторов в этой сети. Как они используют эту информацию, чтобы определить кратчайший путь для пакета?

Надеюсь, мой вопрос понятен.

0

2 ответа на вопрос

1
harrymc

Они определенно не хранят ту же информацию.

Таблица маршрутизации - это таблица Уровня 3, в которой указано, что для X.X.X.X/YIP-адресации необходимо пройти через z.z.z.zмаршрутизатор.
Таблица пересылки - это таблица уровня 2, в которой говорится, что для связи с z.z.z.zмаршрутизатором необходимо отправлять пакеты на MAC-адрес aa:bb:cc:dd:ee:ff.

Например, в таблице пересылки может быть сказано, что пакет, связанный с пунктом назначения, 192.168.1.0/24должен быть отправлен из физического порта ethernet1 / 2.

В вашей локальной сети вы используете таблицу пересылки для получения MAC-адресов других хостов и отправки им пакетов. Ваше сетевое устройство будет транслировать arp whohas ip z.z.z.zпакет на уровне 2, чтобы получить соответствующий MAC-адрес.

Для связи с хостом в другой подсети вы должны направить его через маршрутизатор в вашей локальной сети. Таблица маршрутизации скажет, какой IP-адрес у этого маршрутизатора, поэтому какой маршрутизатор вы достигнете, делается с помощью механизма пересылки.

Другими словами, таблица маршрутизации содержит все маршруты, которые узел хочет сохранить, и информацию, которая там используется протоколами маршрутизации. Таблица пересылки используется оборудованием для физического перемещения пакетов в интерфейсы и из них. Аппаратное обеспечение может продолжать пересылку на основе содержимого пересылки, пока таблица маршрутизации все еще обновляется.

1
grawity

Есть две вещи, которые можно назвать «таблицами пересылки»: MAC-адрес коммутатора L2 → сопоставление портов и FIB маршрутизатора L3. Основываясь на остальной части вашего вопроса, я предполагаю, что вы на самом деле спрашиваете о последнем. (Если вы действительно имели в виду первое, см. Ответ @ harrymc.)

1) Поскольку таблицы маршрутизации содержат кратчайшее расстояние до маршрутизатора следующего перехода, почему существует необходимость в таблице пересылки, чтобы сообщить нам, какой интерфейс маршрутизатора следует переслать? Как совместить две концепции вместе? или я что-то упустил

Протоколы маршрутизации обычно описываются как имеющие две базы данных:

  • 'RIB' (информационная база маршрутизации) содержит входные данные, используемые протоколом маршрутизации для принятия решений - например, он хранит все возможные маршруты, векторы расстояний, состояния линий связи, что угодно. В BGP он будет содержать все объявления о маршрутах, полученные от других узлов BGP. Записи RIB могут еще не иметь прямой связи между маршрутом и его интерфейсом.

  • «FIB» (информационная база пересылки) является результатом решений алгоритма маршрутизации. Он имеет только определенные маршруты, которые выбрал алгоритм, а также разрешенные адреса шлюза и устройства. По сути, это «таблица маршрутизации», которую вы знаете по Linux / BSD.

RIB хранится внутри демонов протокола маршрутизации, а FIB экспортируется в таблицу маршрутизации операционной системы (или в чипы маршрутизации / пересылки с аппаратным ускорением). Другими словами, то, что вы видите, работая ip routeна Linux, на самом деле является FIB.

Разделение существует как оптимизация, потому что определение лучшего пути не быстро; это может занять довольно много процессорного времени и памяти (и это не так просто, как всегда с использованием «кратчайшего» пути).

Однако вместо того, чтобы пытаться вычислить кратчайший маршрут для каждого пакета, это нужно сделать только тогда, когда содержимое RIB действительно изменится - поэтому маршруты предварительно вычисляются и помещаются в FIB, для чего нужен только один последний шаг поиска до самого длинного совпадающего префикса для каждого пакета.

2) Алгоритмы маршрутизации должны определять кратчайший маршрут для пакета от клиента, например, для достижения сервера, означает ли это, что каждый раз, когда устанавливается TCP-соединение с различными серверами, кратчайший маршрут определяется путем просмотра таблицы маршрутизации маршрутизаторов.

Нет. Как упоминалось выше, «лучшие» маршруты предварительно вычисляются при каждом изменении топологии сети. Затем они загружаются в FIB, так что для отдельных соединений требуется только быстрый поиск «совпадения с самым длинным префиксом».

Интернет - это сеть с коммутацией пакетов, что означает, что поиск маршрута не только выполняется при установлении TCP-соединения, но и для каждого отдельного пакета в дальнейшем. (И да, это означает, что даже существующие TCP-соединения могут внезапно начать идти по другому пути, чем раньше.) Это отличается от сетей с коммутацией каналов.

Как именно это происходит? Мне известно только то, что маршрутизаторы хранят векторы расстояния всех маршрутизаторов в сети, что является кратчайшим расстоянием до всех маршрутизаторов в этой сети. Как они используют эту информацию, чтобы определить кратчайший путь для пакета?

Для механизмов, определяющих кратчайший путь в целом, алгоритм Дейкстры является хорошим началом. Это основа OSPF и нескольких других протоколов.

Тем не менее, каждый протокол маршрутизации делает это по-своему. У BGP свои правила, у OSPF и IS-IS свои, у RIP и Babel свои. (Некоторые протоколы являются вектором расстояния, некоторые являются состоянием канала, некоторые оба одновременно. Например, OSPF является состоянием канала внутри области, но вектором расстояния между областями.) Маршрутизатор даже будет иметь глобальные правила, сообщающие ему предпочитайте маршруты OSPF по RIP, RIP по BGP и так далее.

Обратите внимание, что не все маршрутизаторы вообще используют протокол автоматической маршрутизации. Вполне возможно, что все маршруты в FIB вводятся администратором вручную.

«Однако вместо того, чтобы пытаться рассчитать кратчайший маршрут для каждого пакета, это нужно сделать только тогда, когда содержимое RIB действительно изменится - поэтому маршруты предварительно вычисляются и помещаются в FIB, что требует только одного последнего шага: ищем самый длинный соответствующий префикс для каждого пакета. " Могу ли я проверить свое понимание по этому вопросу. Когда IP-пакет достигает шлюза по умолчанию, знает ли он все маршрутизаторы, на которые он уже будет переходить? Или он знает только маршрутизатор следующего перехода для каждого маршрутизатора, которого достигает? Я думаю, что это последний? calveeen 5 лет назад 0
Из-за того, что в Интернете так много серверов, вся маршрутизация и прочее уже рассчитаны для всех этих серверов? calveeen 5 лет назад 0
@calveeen: Обычные IP-маршрутизаторы выбирают только ближайший следующий переход и не могут контролировать все, что происходит дальше. (Существуют исключения, такие как сети MPLS, но это больше не IP.) grawity 5 лет назад 0
Итак, обмен векторами расстояния (протоколами маршрутизации), содержащимися в RIB, помогает определить FIB, который в основном соответствует самому длинному префиксу. А маршруты ко всем серверам уже рассчитаны, поэтому маршрутизаторам просто нужно пересылать следующий маршрутизатор на основе IP-адреса dst пакета ip? calveeen 5 лет назад 0
Спасибо за ответ на мой вопрос, а также спасибо за то, как вы организовали свой ответ calveeen 5 лет назад 0
@calveeen: Да, но маршруты агрегированы: ISP A не заботится о каждом отдельном устройстве, которое может иметь ISP B; вместо этого, в идеале, он имеет только один маршрут для всего сетевого префикса ISP B. (Ну, на практике многие интернет-провайдеры имеют несколько префиксов, особенно с IPv4 ... например, [вот что XS4ALL объявляет через BGP] (https://bgp.he.net/AS3265#_prefixes).) Обычно агрегация выполняется внутренне также - у маршрутизатора X есть только маршруты для целых подсетей, управляемых маршрутизаторами Y или Z (или даже блоками подсетей), а не отдельными адресами. grawity 5 лет назад 0

Похожие вопросы