Глава 8 Межсетевой протокол: маршрутизация IP-дейтаграмм 8.1 Введение Мы уже видели, что все межсетевые средства строятся на основе ненадежной системы доставки пакетов без установления соединения, и что базовой единицей передачи в интернете TCP/IP является IP-дейтаграмма. Эта глава добавляет к описанию средства без установления соединения описание того, как шлюзы маршрутизируют IP-дейтаграммы и доставляют их к месту назначения. Можно сказать, что формат дейтаграммы из главы 7 характеризует статические аспекты Межсетевого Протокола. Описание маршрутизации в этой главе характеризует его операционные аспекты. Следующая глава завершит рассмотрение нами IP описанием того, как обрабатываются ошибки; последующие главы покажут, как другие протоколы используют его для реализации средств более высокого уровня. 8.2 Маршрутизация в Интернете В системе с коммутацией пакетов маршрутизация обозначает процесс выбора пути, по которому будут посылаться пакеты, а маршрутизатором называется компьютер, производящий этот выбор. Маршрутизация происходит на нескольких уровнях. Например, в глобальной сети, имеющей по несколько физических соединений между коммутаторами пакетов, сеть сама отвечает за маршрутизацию пакетов с того времени, как они попали в нее, и до тех пор, пока они не покинут ее. Такая внутренняя маршрутизация происходит полностью внутри этой глобальной сети. Машины за ее пределами не могут участвовать в принятии решений; для них эта сеть представляется единым целым, которое доставляет пакеты. Напомним, что целью TCP/IP является обеспечить виртуальную сеть, предоставляющую средство доставки IP-дейтаграмм без установления соединения. Поэтому, мы сосредоточим на внимание на межсетевой маршрутизации или IP-маршрутизации. Как и маршрутизация внутри физической сети, IP-маршрутизация выбирает путь, по которому следует послать дейтаграмму. Алгоритм IP-маршрутизации должен определить, как послать дейтаграмму через несколько физических сетей. Маршрутизация в интернете может быть сложной, особенно между машинами с несколькими физическими сетевыми соединениями. В идеале программное обеспечение маршрутизации должно учитывать такие вещи, как загрузка сети, длина дейтаграммы, или тип сервиса, указанный в заголовке дейтаграммы, при выборе наилучшего пути. Тем не менее, большинство программного обеспечения межсетевой маршрутизации гораздо менее сложное, и выбирает пути на основе фиксированных предположений о самых коротких путях. Чтобы полностью понять IP-маршрутизацию, мы должны вернуться назад и вспомнить архитектуру интернета TCP/IP. Во-первых, напомним, что интернет состоит из группы физических сетей, соединенных компьютерами, называемыми шлюзами. Каждый шлюз имеет прямое соединение с двумя или более сетями. В отличие от шлюза, ГВМ обычно соединен напрямую только с одной физической сетью. Тем не менее, мы знаем, что возможно существование многоадресных ГВМ, которые соединены напрямую с несколькими сетями. Как ГВМ, так и шлюзы участвуют в IP-маршрутизации. Когда прикладная программа на ГВМ пытается организовать взаимодействие, протоколы TCP/IP в конечном счете генерируют одну или несколько IP-дейтаграмм. ГВМ должен принять решение о маршруте, когда он выбирает, куда послать дейтаграмму. Как показывает рисунок 8.1, ГВМ должны принять решение, даже если они имеют только одно соединение с сетью. ^ к одним ^ к другим | ГВМ | ГВМ ----- ----- | Ш1| | Ш2| ----- ----- | | -------------------------------------------------------- | ----- |ГВМ| ----- Рисунок 8.1 Пример одноадресного ГВМ, который должен маршрутизировать дейтаграммы. Он должен выбрать, послать ли дейтаграмму шлюзу Ш1 или шлюзу Ш2, так как нет одного шлюза, обеспечивающего наилучший путь ко всем назначениям. Конечно, шлюзы должны принимать решения об IP-маршрутизации (это их основная задача и причина того, что их назвали маршрутизаторами). А как же многоадресные ГВМ ? Любой компьютер с несколькими сетевыми соединениями может выступать в роли шлюза, и как мы увидим позже, многоадресные ГВМ с сетевым программным обеспечением TCP/IP имеют все необходимое для маршрутизации. Более того, локальные сети, в которых нет возможности выделить отдельные компьютеры под шлюз, часто используют компьютеры общего назначения с разделением времени в роли как ГВМ, так и шлюза ( эта практика особенно распространена в университетах). Тем не менее, стандарты TCP/IP делают различие между этими функциями в ГВМ и шлюзе, а в сетях, пытающихся смешивать функции ГВМ и шлюза в одной машине, иногда обнаруживается, что многоадресные шлюзы участвуют в неожиданных взаимодействиях. А пока, мы будем различать ГВМ и шлюзы, и предполагать, что ГВМ не реализуют функцию шлюза по передаче пакетов из одной сети в другую. 8.3 Прямая и косвенная доставка Говоря нестрого, мы можем выделить две формы маршрутизации: прямую маршрутизацию и косвенную маршрутизацию. Прямая маршрутизация, передача дейтаграммы напрямую из одной машины в другую, является основой, на которой строится все остальное межсетевое взаимодействие. Две машины могут участвовать в прямой маршрутизации только в том случае, когда они обе соединены напрямую с одной физической системой передачи(например, Ethernetом). Косвенная маршрутизация осуществляется, когда назначение не находится в той же сети, что и источник, и заставляет отправителя передавать дейтаграмму шлюзу для доставки. 8.3.1 Доставка дейтаграммы по одной сети Мы знаем, что одна машина в данной физической сети может послать физический кадр напрямую другой машине в этой же сети. Для передачи IP-дейтаграмм отправитель инкапсулирует дейтаграмму в физический кадр, отображает IP-адрес назначения в физический адрес, и использует сетевое оборудование для его доставки. Глава 5 представила два возможных механизма при разрешении адресов, включая использование протокола ARP для динамического связывания пар адресов в Ethernet-подобных сетях. Глава 7 рассмотрела инкапсуляцию дейтаграмм. Поэтому мы знаем теперь все необходимое для понимания прямой доставки. Обобщим: Передача IP-дейтаграмм между двумя машинами в одной физической сети не использует шлюзы. Отправитель инкапсулирует дейтаграмму в физический кадр, связывает IP-адрес назначения с физическим аппаратным адресом и посылает полученный кадр прямо назначению. Откуда отправитель узнает, что получатель находится в сети, к которой он присоединен ? Ответ прост. Мы знаем, что IP-адреса делятся на номер сети и номер ГВМ в сети. Чтобы определить, находится ли назначение в одной из сетей, к которым он присоединен, отправитель выделяет сетевую часть IP-адреса назначения и сравнивает ее с сетевой частью своего IP-адреса(ов). Совпадение означает, что дейтаграмму можно послать напрямую. Здесь мы видим одно из преимуществ схемы адресации Интернета, а именно: Так как межсетевые адреса всех машин в одной сети включают общий идентификатор сети, и так как выделение этого идентификатора может быть сделано несколькими машинными командами, проверка того, что машина может быть достигнута напрямую, является крайне эффективной. С точки зрения интернета легче всего представить прямую маршрутизацию как доставку дейтаграммы. Доставка - это конечный шаг при передаче дейтаграммы, даже если дейтаграмма пересекла много сетей и промежуточных шлюзов. Последний на пути между источником дейтаграммы и ее назначением шлюз будет напрямую соединен с той же самой физической сетью, что и назначение. Поэтому, последний шлюз будет доставлять дейтаграмму, используя прямую маршрутизацию. Можно представлять прямую маршрутизацию между источником и назначением как специальный случай общей маршрутизации - для прямого пути дейтаграмме не надо проходить через шлюзы. 8.3.2 Косвенная маршрутизация Косвенная маршрутизация более трудна, чем прямая , так как отправитель должен идентифицировать шлюз, которому можно послать дейтаграмму. Шлюз должен затем отправить дейтаграмму к сети назначения. Для визуализации того, как работает косвенная маршрутизация, представим себе большой интернет со множеством сетей, соединенных шлюзами, но имеющий лишь две ГВМ на самых дальних концах. Когда одна ГВМ хочет что-то послать другой, она инкапсулирует дейтаграмму и посылает ее к ближайшему шлюзу. Мы знаем, что она может достичь шлюза, так как все физические сети связаны друг с другом, поэтому для каждой сети должен существовать шлюз, присоединенный к ней. Поэтому, ГВМ, отправляющий дейтаграмму, может достичь шлюза, используя одну физическую сеть. Как только кадр достигает шлюза, программное обеспечение выделяет инкапсулированную в нем дейтаграмму, процедуры IP-маршрутизации выбирают следующий шлюз на пути к назначению. Дейтаграмма снова помещается в кадр и посылается по следующей физической сети ко второму шлюзу, и так далее, до тех пор, пока она не сможет быть доставлена напрямую. Эти идеи можно обобщить: Шлюзы в интернете TCP/IP образуют взаимодействующую и связанную структуру. Дейтаграммы передаются от шлюза к шлюзу до тех пор, пока они не достигнут шлюза, который может доставить дейтаграмму напрямую. Откуда шлюз может узнать, куда посылать каждую дейтаграмму ? Откуда шлюз знает, какой шлюз надо использовать для данного назначения ? Эти два вопроса связаны между собой, так как ответ на оба вопроса использует IP-маршрутизацию. Мы ответим на них последовательно, рассмотрев основные алгоритмы маршрутизации на основе таблиц в этой главе и закончим рассмотрением того, как шлюзы получают информацию о новых путях несколько позже. 8.4 IP-маршрутизация на основе таблиц. Обычный алгоритм IP-маршрутизации работает с таблицей маршрутизации Интернета (иногда называемой таблицей IP-маршрутизации), имеющейся на каждой машине и хранящей информацию о возможных назначениях и том, как их достичь. Так как и ГВМ, и шлюзы маршрутизируют дейтаграммы, все они имеют таблицы IP-маршрутизации. Всякий раз, когда программному обеспечению IP-маршрутизации на ГВМ или шлюзе надо передать дейтаграмму, оно обращается к таблице маршрутизации, чтобы решить, куда послать дейтаграмму. Какую информацию следует держать в таблицах маршрутизации ? Если бы каждая таблица маршрутизации содержала информацию о всех возможных адресах назначения, было бы невозможно поддерживать корректное состояние таблицы. Более того, так как число возможных назначений велико, машинам не хватало бы памяти для хранения всей этой информации. Концептуально, нам хотелось бы использовать принцип отсутствия информации и предоставить машинам возможность принимать решение о маршрутизации при минимальной информации. Например, нам было бы желательно не хранить информацию о конкретных ГВМ в локальной сети, в которой они расположены, а поместить в таблицу информацию об удаленных машинах, для которых нужно маршрутизировать пакеты. К счастью схема адресации IP помогает достичь такой цели. Напомним, что IP-адреса назначаются так, что у всех машин, присоединенных к конкретной физической сети, имеется одинаковое начало(номер сети). Мы уже видели, что такое назначение делает эффективной проверку на прямую доставку. Оно также означает, что таблицам маршрутизации нужно содержать только сетевые префиксы, а не полные IP-адреса. Использование номера сети в адресе назначения вместо полного адреса ГВМ делает маршрутизацию эффективно, а таблицы маршрутизации маленькими. Более того, оно помогает скрыть информацию о конкретных ГВМ в локальной среде, к которой эти ГВМ присоединены. Обычно таблица содержит пары (N,G), где N - это IP-адрес сети назначения, а G - IP-адрес следующего шлюза на пути к сети N. Поэтому, таблица маршрутизации в шлюзе G определяет только один шаг на пути от G к сети назначения - шлюз не знает полный путь к назначению. Важно понимать, что таблица маршрутизации всегда указывает на шлюзы, которые находятся на расстоянии одной физической сети. То есть, все шлюзы, приведенные в таблице маршрутизации машины М, должны находиться в сетях, к которым М присоединена напрямую. На практике, мы по возможности придерживаемся принципа скрытия информации от ГВМ. Мы настаиваем, что хотя ГВМ имеют таблицы IP-маршрутизации, они должны хранить минимум информации в своих таблицах. Идея заключается в том, чтобы заставить ГВМ полагаться на шлюзы для большей части маршрутизации. Рисунок 8.2 показывает конкретный пример, который помогает понять таблицы маршрутизации. Интернет в этом примере состоит из четырех сетей, соединенных тремя шлюзами. На рисунке показана таблица маршрутизации, используемая шлюзом G. Так как G присоединен напрямую к сетям 20.0.0.0 и 30.0.0.0, он может достичь любой ГВМ в этих сетях напрямую(возможно используя ARP для нахождения физического адреса). Получив дейтаграмму, предназначенную ГВМ в сети 40.0.0.0, G маршрутизирует ее в адрес 30.0.0.7, адрес шлюза H. H затем доставит дейтаграмму напрямую. G может достичь адреса 30.0.0.7, так как и G, и H присоединены к сети 30.0.0.0. 20.0.0.5 30.0.0.6 40.0.0.7 | | | ---------- V---------- V---------- V---------- | Сеть | --- | Сеть | --- | Сеть | --- | Сеть | |10.0.0.0|-|F|-|20.0.0.0|-|G|-|30.0.0.0|-|H|-|40.0.0.0| | | --- | | --- | | --- | | ----------^ ----------^ ----------^ ---------- | | | 10.0.0.5 20.0.0.6 30.0.0.7 (а) Чтобы достичь Маршрутизировать ГВМ в сети к адресу 20.0.0.0 прямая доставка 30.0.0.0 прямая доставка 10.0.0.0 20.0.0.5 40.0.0.0 30.0.0.7 (б) Рисунок 8.2 (а) Демонстрационный интернет с 4 сетями и 3 шлюзами, и (б) таблица маршрутизации для шлюза G Как показывает рисунок 8.2, размер таблицы маршрутизации зависит от числа сетей в интернете; он увеличивается только при добавлении новых сетей. Тем не менее, размер таблицы и ее содержимое не зависят от числа отдельных ГВМ, присоединенных к сетям. Мы можем сформулировать следующий принцип: Чтобы работать при минимальной информации, чтобы сделать таблицы маршрутизации маленькими и чтобы эффективно принимать решения о маршрутизации, программное обеспечение IP-маршрутизации хранит информацию только об адресах сетей назначений, а не о конкретных адресах ГВМ. Выбор маршрутов на основе идентификатора сети назначения имеет несколько следствий. Во-первых, в большинстве реализаций это значит, что весь траффик к конкретной сети будет использовать один и тот же путь. В результате, даже если существует несколько путей, они не смогут использоваться параллельно. Также все типы траффика будут проходить по одному и тому же пути, независимо от задержки при передаче и пропускной способности физических сетей. Во-вторых, так как только последний шлюз на пути пытается взаимодействовать с ГВМ назначения, только он сможет определить, работает ли ГВМ. Поэтому, нам нужно определить способ, с помощью которого этот шлюз мог бы послать сообщение источнику о проблемах при доставке. В-третьих, так как каждый шлюз маршрутизирует траффик независимо от других, дейтаграммы, следующие от ГВМ А к ГВМ В, могут использовать путь, отличный от того, который проходят дейтаграммы от ГВМ В к ГВМ А. Нам нужно быть уверенными в том, что шлюзы взаимодействуют, для того чтобы гарантировать и прямое, и обратное взаимодействие. 8.5 Маршруты по умолчанию Другой технологией, используемой для работы при минимуме информации и маленьких таблицах маршрутизации, является объединение нескольких элементов таблицы в случай по умолчанию. Идея состоит в том, что сначала программное обеспечение IP-маршрутизации ищет сеть назначения в таблице маршрутизации. Если для нее нет маршрута в таблице, процедуры маршрутизации посылают дейтаграмму к шлюзу по умолчанию. Маршрутизация по умолчанию особенно полезна, когда сеть имеет несколько ГВМ и только одно соединение с интернетом. Например, маршруты по умолчанию хорошо работают для машин, которые присоединены только к одной физической сети и используют только один шлюз для достижения остальной части интернета. Все решение о выборе маршрута в таком случае состоит из двух проверок: одной - на нахождение в локальной сети, и одной - случая по умолчанию, указывающего на единственный возможный шлюз. Даже, если место(site) имеет в своем составе несколько локальных сетей, маршрутизация проста, так как состоит из нескольких проверок на локальные сети и умолчания для всех остальных мест назначения. 8.6 Маршруты, специфичные для ГВМ Хотя мы сказали, что вся маршрутизация основывается на сетях, а не на отдельных ГВМ, большая часть программного обеспечения IP-маршрутизации позволяет указывать как особый случай маршруты для отдельных ГВМ. Наличие маршрутов для ГВМ предоставляет администратору локальной сети большие возможности по слежению за использованием сети и может быть использовано для наблюдения за доступом к сети и обеспечения секретности. При отладке сетевых соединений или таблиц маршрутизации способность указывать специальный путь для отдельной машины оказывается особенно полезной. 8.7 Итоговый алгоритм Принимая во внимание все вышесказанное, получаем следующий вид алгоритма IP-маршрутизации: Алгоритм: Маршрутизир_дейтаграмму_IP(дейтаграмма,таблица_маршрутизации) Выделить IP-адрес назначения, Id, из дейтаграммы Вычислить IP-адрес сети назначения,In Если In соответствует адресу одной из достижимых напрямую сетей, послать дейтаграмму к назначению по этой сети; (это включает разрешение Id в физический адрес, инкапсуляцию дейтаграммы и посылку кадра) иначе если для Id определен маршрут, специфичный для ГВМ маршрутизировать дейтаграмму, как это определено в таблице; иначе если In определено в таблице маршрутизации маршрутизировать дейтаграмму, как это определено в таблице; иначе если указан маршрут по умолчанию маршрутизировать дейтаграмму к шлюзу по умолчанию; иначе выдать сообщение об ошибке при маршрутизации; Рисунок 8.3 Алгоритм IP-маршрутизации. Имея в качестве исходных данных IP-дейтаграмму и таблицу маршрутизации, этот алгоритм выбирает следующую машину, на которую будет послана дейтаграмма. Таблицы маршрутизации всегда указывают в качестве следующей машины ту, что находится в сети, достижимой напрямую. 8.8 Маршрутизация для IP-адресов Важно понимать, что IP-маршрутизация не изменяет исходную дейтаграмму. В частности, поля отправителя и получателя дейтаграммы остаются неизменными; они всегда указывают IP-адрес первоначального отправителя и IP-адрес конечного получателя. Когда IP исполняет алгоритм маршрутизации, он вычисляет новый адрес, IP-адрес очередной машины, на которую надо послать дейтаграмму. Этот новый адрес по всей видимости будет адресом шлюза. Тем не менее, если дейтаграмма может быть доставлена напрямую, этот новый адрес будет совпадать с адресом конечного назначения. IP-адрес, вычисленный алгоритмом IP-маршрутизации, известен как адрес следующей попытки(hop), так как он определяет, куда послать дейтаграмму в следующий раз(хотя это место может и не быть местом конечного назначения). Где же IP сохраняет адрес следующей попытки ? Не в дейтаграмме; там для него нет места. По сути дела IP не сохраняет адрес следующей попытки вообще. После выполнения алгоритма маршрутизации IP передает дейтаграмму и адрес следующей попытки программному обеспечению сетевого интерфейса той сети, по которой должна быть передана дейтаграмма. Программное обеспечение сетевого интерфейса связывает адрес следующей попытки с физическим адресом, формирует кадр, используя этот физический адрес, помещает дейтаграмму в поле данных кадра и посылает результат. После использования адреса следующей попытки для нахождения физического адреса программное обеспечение сетевого интерфейса удаляет адрес следующей попытки. Может показаться странным, что таблицы маршрутизации хранят IP-адрес следующей попытки для каждой сети назначения, в то время как эти адреса должны транслироваться в соответствующие физические адреса перед посылкой дейтаграммы. Если мы представим ГВМ, посылающий последовательность дейтаграмм одному и тому же назначению, такое использование IP-адресов будет явно неэффективным. IP послушно выделяет адрес назначения в каждой дейтаграмме и использует таблицу маршрутизации для определения адреса следующей попытки. Затем он передает дейтаграмму и адрес следующей попытки сетевому интерфейсу, который находит физический адрес. Если бы таблица маршрутизации использовала физические адрес, определение соответствия между IP-адресом следующей попытки и физическим адресом могло бы выполняться лишь один раз. Почему же программное обеспечение IP избегает пользоваться физическими адресами при хранении и вычислении маршрутов ? Как показывает рисунок 8.4, существуют две важные причины. ПРОВЕРКА ИЛИ МАРШРУТИЗИРУЕМАЯ ОБНОВЛЕНИЕ МАРШРУТОВ | ДЕЙТАГРАММА V ---------------- ---------------- | таблица | / алгоритм \ | маршрутизации|--------->| маршрутизации | | | \ в IP / ---------------- \---------------/ | используются IP-адреса | ------------------------------------------------------------- используются физические адреса | отправляемая дейтаграмма и V адрес следующей попытки Рисунок 8.4 Программное обеспечение IP и таблица маршрутизации, которую оно использует, находятся выше границы адресов. Использование только IP-адресов делает маршруты удобными для проверки и изменения и скрывает детали физических адресов на самом нижнем из возможных уровней. Во-первых, таблица маршрутизации обеспечивает особенно ясный интерфейс между программным обеспечением IP, маршрутизирующим дейтаграммы, и высокоуровневым программным обеспечением, управляющим путями. Для отладки ошибок маршрутизации сетевым администраторам часто нужно проверять таблицы маршрутизации. Использование только IP-адресов в таблице маршрутизации приводит к тому, что администраторам становится легко понимать таблицу и обнаруживать корректность изменения таблицы программным обеспечением. Во-вторых, одной из главных целей разработки Межсетевого Протокола являлось создание абстракции, скрывающей детали нижележащих сетей. Рисунок 8.4 показывает границу адресов, важную концептуальную границу между низкоуровневым программным обеспечением, понимающим физические адреса, и межсетевым программным обеспечением, использующим только высокоуровневые адреса. Выше этой границы все программное обеспечение для взаимодействия может быть написано с использованием только межсетевых адресов; знание физических адресов предоставляется нескольким небольшим низкоуровневым процедурам. Мы увидим, что выделение этой границы также помогает сделать реализацию остальных протоколов TCP/IP легкой для понимания, проверки и модификации. 8.9 Обработка приходящих дейтаграмм Итак, мы рассмотрели IP-маршрутизацию, описав, как принимаются решения относительно отправляемых пакетов. Тем не менее, ясно, что программное обеспечение IP должно также обрабатывать приходящие дейтаграммы. Когда IP-дейтаграмма прибывает на ГВМ, программное обеспечение сетевого интерфейса доставляет ее программному обеспечению IP для обработки. Если адрес назначения дейтаграммы соответствует IP-адресу ГВМ, программное обеспечение IP на ГВМ принимает дейтаграмму и передает ее программе протокола более высокого уровня для дальнейшей обработки. Если же IP-адрес назначения не соответствует ему, ГВМ требуется уничтожить дейтаграмму(то есть ГВМ не позволяется пытаться маршрутизировать дейтаграммы, по ошибке пришедшие не на ту машину). В отличие от ГВМ, шлюзы выполняют маршрутизацию. Когда IP-дейтаграмма прибывает на шлюз, она доставляется программному обеспечению IP. И снова можно выделить два варианта: дейтаграмма может быть доставлена к ее конечному назначению, или ее нужно отправить путешествовать дальше. Как и на ГВМ, если IP-адрес назначения дейтаграммы соответствует собственному IP-адресу шлюза, программное обеспечение IP передает дейтаграмму программному обеспечению более высокого уровня для обработки(обычно, единственными дейтаграммами, предназначающимися шлюзу, являются те, что используются для проверки достижимости и те, что несут команды администрирования шлюзом). Если дейтаграмма еще не достигла своего конечного назначения, IP маршрутизирует ее, используя стандартный алгоритм и информацию из локальной таблицы маршрутизации. Определение того, достигла ли IP-дейтаграмма своего конечного назначения или нет, не так тривиально, как это может показаться. Напомним, что даже ГВМ может иметь несколько физических соединений, и каждое из них имеет свой IP-адрес. Когда прибывает IP-дейтаграмма, машина должна сравнить межсетевой адрес назначения с IP-адресом каждого из своих сетевых соединений. Если для какого-либо из них соответствие найдено, шлюз сохраняет дейтаграмму и обрабатывает ее. Машина также должна принимать широковещательные дейтаграммы из физических сетей, если их IP-адрес назначения является IP-адресом ограниченного широковещания или IP-адресом направленного широковещания для этой сети. Как мы увидим в главах 16 и 17, подсети и многоадресные адреса делают распознавание адресов достаточно сложным. В любом случае, если адрес не соответствует ни одному из адресов этой машины, IP декрементирует поле времени жизни в заголовке дейтаграммы и удаляет дейтаграмму, если этот счетчик достиг нуля, или вычисляет новую контрольную сумму и маршрутизирует дейтаграмму, если счетчик больше нуля. Должна ли каждая машина маршрутизировать дейтаграммы, которые она получает ? Ясно, что шлюзы должны маршрутизировать приходящие дейтаграммы, так как это их основная задача. Мы также говорили, что некоторые многоадресные ГВМ ведут себя как шлюзы, даже если они на самом деле компьютеры общего назначения. Хотя использование ГВМ в качестве шлюза обычно неразумно, если кто-то все же сделал это, то ГВМ должен быть сконфигурирован так, чтобы маршрутизировать дейтаграммы так же, как это делает шлюз. А как же остальные ГВМ, не предназначенные для использования в качестве шлюзов ? Ответ будет следующий: ГВМ, не используемые в качестве шлюзов, не должны маршрутизировать приходящие на них дейтаграммы; они должны уничтожать их. Существует четыре причины, почему ГВМ, не предназначенный для функционирования в качестве шлюза, должен воздерживаться от выполнения любых функций шлюза. Во-первых, когда такой ГВМ получает дейтаграмму, предназначавшуюся другой машине, либо есть ошибка в межсетевом адресе, либо произошла ошибка при маршрутизации или доставке. Эта ошибка может быть не обнаружена, если ГВМ совершит корректирующее действие с помощью маршрутизации дейтаграммы. Во-вторых, маршрутизация может привести к возникновению лишнего межсетевого траффика(и может отвлечь ЦП от выполнения по-настоящему нужных задач). В-третьих, простые ошибки могут вызвать хаос. Предположим, что каждый ГВМ маршрутизирует траффик и представим себе, что случится, если одна из машин по ошибке широковещательно передаст дейтаграмму, предназначенную на самом деле лишь одному ГВМ, Н. Каждый ГВМ в сети получит копию дейтаграммы в результате широковещания, и каждая машина направит свою копию к Н, которая в результате будет бомбардирована множеством копий. В-четвертых, как покажут последующие главы, шлюзы не только маршрутизируют траффик. В следующей главе будет показано, что шлюзы используют специальный протокол для сообщений об ошибках, в то время как ГВМ не используют его(опять же, чтобы избежать бомардирования источника множеством сообщений об ошибках). Шлюзы также распространяют информацию о маршрутах для того, чтобы их таблицы были согласованными. Если ГВМ маршрутизируют дейтаграмму, не реализуя при этом всех функций шлюза, могут возникать неожиданные аномалии. 8.10 Работа с таблицами маршрутизации Мы рассмотрели, как IP маршрутизирует дейтаграммы, основываясь на содержимом таблиц маршрутизации, не сказав при этом, как системы инициализируют свои таблицы маршрутизации или как они обновляют их при изменениях в сети. Следующие главы ответят на эти вопросы и рассмотрят протоколы, позволяющие шлюзам делать маршруты согласованными. А пока, важно понимать только, что IP делает все решения маршрутизации на основе таблиц, поэтому изменение этих таблиц изменит пути, по которым будут следовать дейтаграммы. 8.11 Итоги IP-маршрутизация представляет собой принятие решения от том, куда послать дейтаграмму на основе ее IP-адреса назначения. Маршрут является непосредственным, если машина назначения находится в сети, которой присоединена посылающая машина; мы будем считать это последним шагом доставке при передаче дейтаграммы. Маршрут является косвенным, если дейтаграмму надо послать шлюзу для доставки. Общий принцип заключается в том, что ГВМ посылают косвенно маршрутизируемые дейтаграммы ближайшему шлюзу; дейтаграммы путешествуют по интернету от шлюза к шлюзу до тех пор, пока они не смогут быть напрямую доставлены по физической сети. IP-маршрутизация генерирует IP-адрес следующей машины(т.е. адрес следующей попытки), к которой следует послать дейтаграмму; IP передает дейтаграмму и адрес следующей попытки программному обеспечению сетевого интерфейса. Передача дейтаграммы от одной машины к другой всегда включает инкапсуляцию дейтаграммы в физический кадр, отображение межсетевого адреса следующей попытки в физический адрес и посылку кадра, используя аппаратное обеспечение. Межсетевой алгоритм маршрутизации управляется таблицей и использует только IP-адреса. Он основывает решения маршрутизации на адресе сети назначения, а не на адресе ГВМ назначения, что делает таблицы маршрутизации маленькими. Маршруты по умолчанию также помогают таблицам оставаться маленькими, особенно для тех ГВМ, которые имеют доступ только к одному шлюзу. Для дальнейшего изучения Маршрутизация - это важный раздел. Frank и Chou[1971], а также Schwartz и Stern[1980] рассматривают маршрутизацию в целом; Postel[1980] рассматривает межсетевую маршрутизацию. Braden и Postel[RFC 1009] дают краткое изложение того, как шлюзы Интернета обрабатывают IP-дейтаграммы. Narten[1989] содержит обзор маршрутизации в Интернете. Fultz и Kleinrock[1971] анализируют схемы адаптивной маршрутизации; и McQuillan, Richer и Rosen[1980] описывают алгоритм адаптивной маршрутизации в ARPANET. Часто рассматривалась идея использования политических соглашений для формулирования правил о маршрутизации. Leiner[RFC 1124] рассматривает соглашения для взаимосвязанных сетей. Braun[RFC 1104] обсуждает модели политики маршрутизации для интернетов, Rekhter[RFC 1092] затрагивает вопрос о политике маршрутизации во второй магистральной сети NSFNET, и Clark[RFC 1102] описывает использование политики маршрутизации для IP. Упражнения 8.1 Опишите таблицы маршрутизации для всех шлюзов из рисунка 8.1. В чем заключается основная выгода использования маршрутов по умолчанию ? 8.2 Изучите алгоритм маршрутизации, используемы в UNIX BSD 4.3. Учитывает ли он все случаи, описанные здесь ? Рассматривает ли он какие-либо не описанные случаи ? 8.3 Что делает шлюз с полем ВРЕМЯ ЖИЗНИ из заголовка IP ? 8.4 Рассмотрим машину с двумя физическими сетевыми соединениями и двумя IP-адресами I1 и I2. Может ли эта машина получить дейтаграмму, назначенную I2 из сети с адресом I1 ? Объясните. 8.5 Рассмотрим две ГВМ, А и В, которые присоединены к одной физической сети, N. Может ли А при использовании нашего алгоритма маршрутизации получить дейтаграмму, предназначенную В ? Объясните. 8.6 Модифицируйте алгоритм маршрутизации для учета опций маршрутизации источника IP, описанных в главе 7. 8.7 Шлюз IP должен выполнят вычисления, для которых требуется время, пропорциональное длине заголовка дейтаграммы, каждый раз, когда он обрабатывает дейтаграмму. Объясните. 8.8 Сетевой администратор доказывает, что для более легкой отладки и его сети и наблюдения за ней ему нужно переписать алгоритм маршрутизации таким образом, чтобы он проверял маршруты для отдельных ГВМ до проверки на прямую доставку. Можете ли вы представить, как он собирается использовать новый алгоритм для слежения за работой сети ? 8.9 Возможно ли адресовать дейтаграмму на IP-адрес шлюза ? Имеет ли смысл так делать ? 8.10 Рассмотрим модифицированный алгоритм маршрутизации, который проверяет маршруты для отдельных ГВМ на прямую доставку. При каких условиях этот алгоритм будет выгоден ? 8.11 Поиграем в детектив: после наблюдения за траффиком IP в локальной сети в течение 10 минут в вечернее время кто-то заметил, что все кадры, предназначенные машине А, содержат IP-дейтаграммы, которые имеют адрес назначения, совпадающий с IP-адресом А, в то время как все кадры, предназначенные машине В, несут IP-дейтаграммы с назначением, отличным от IP-адреса В. Объясните. 8.12 Как вы можете изменить формат дейтаграммы IP для поддержки высокоскоростной коммутации пакетов в шлюзах ? Указание: шлюз должен перевычислять контрольную сумму заголовка после декремента поля времени жизни. 8.13 Сравните протокол доставки без установления соединения ISO(стандарт ISO 8473) с IP. Насколько хорошо протокол ISO поддерживает высокоскоростную коммутацию пакетов ? Указание: поля переменной длины избыточны.