Центральной частью IP является его таблица маршрутов. Протокол IP использует эту таблицу при принятии всех решений о маршрутизации IP-пакетов.Содержание таблицы маршрутов определяется администратором сети.Ошибки приустановке маршрутов могут заблокировать передачи. Чтобы понять технику межсетевого взаимодействия, нужно понять то,как используется таблица маршрутов. Это понимание необходимо для успешного администрирования и сопровождения IP-сетей.
На рис.5.1 показана небольшая IP-сеть, состоящая из 3 машин: A, B и C.Каждая машина имеет стандартный стек протоколов TCP/IP. Каждый сетевой адаптер этих машин имеет свой Ethernet-адрес. Менеджер сети должен присвоить машинам уникальные IP-адреса.
Простая IP-сеть
Когда A посылает IP-пакет B, то заголовок IP-пакета содержит в поле отправителя IP-адрес узла A, а заголовок Ethernet-кадра содержит в поле отправителя Ethernet-адрес A. Кроме этого, IP-заголовок содержит в поле получателя IP-адрес узла B, а Ethernet-заголовок содержит в поле получателя Ethernet-адрес B.
В этом простом примере протокол IP является излишеством, которое мало что добавляет к услугам, предоставляемым сетью Ethernet.Однако протокол IP требует дополнительных расходов на создание, передачу и обработку IP-заголовка.Когда в машине B модуль IP получает IP-пакет от машины A, он сопоставляет IP-адрес места назначения со своим и, если адреса совпадают, то передает датаграмму протоколу верхнего уровня.
В данном случае при взаимодействии A с B используется прямая маршрутизация.
На рис.5.2 представлена более реалистичная картина сети internet.В данном случае сеть internet состоит из трех сетей Ethernet, на базе которых работают три IP-сети, об'единенные шлюзом D.Каждая IP-сеть включает четыре машины;каждая машина имеет свои собственные IP- и Ethernet-адреса.
Сеть internet, состоящая из трех IP-сетей
Шлюз D соединяет все три сети и, следовательно, имеет три IP-адреса и три Ethernet-адреса.Машина D имеет стек протоколов TCP/IP, но вместо двух модулей ARP и двух драйверов, он содержит три модуля ARP и три драйвера Ethernet.
Обратим внимание на то, что машина D имеет только один модуль IP.
Менеджер сети присваивает каждой сети Ethernet уникальный номер,называемый IP-номером сети. На рис.5.2 IP-номера не показаны, вместо них используются имена сетей.
Когда машина A посылает IP-пакет машине B, то процесс передачи идет в пределах одной сети. При всех взаимодействиях между машинами, подключенными к одной IP-сети, используется прямая маршрутизация, обсуждавшаяся в предыдущем примере.
Когда машина D взаимодействует с машиной A, то это прямое взаимодействие. Когда машина D взаимодействует с машиной E, то это прямое взаимодействие. Когда машина D взаимодействует с машиной H, то это прямое взаимодействие.Это так, поскольку каждая пара этих машин принадлежит одной IP-сети.
Однако, когда машина A взаимодействует с машинами, включенными в другую IP-сеть, то взаимодействие уже не будет прямым.Машина A должена использовать шлюз D для ретрансляции IP-пакетов в другую IP-сеть.Такое взаимодействие называется "косвенным".
Маршрутизация IP-пакетов выполняется модулями IP и является прозрачной для модулей TCP, UDP и прикладных процессов.
Если машина A посылает машине E IP-пакет, то IP-адрес и Ethernet-адрес отправителя соответствуют адресам A. IP-адрес места назначения является адресом E, но поскольку модуль IP в A посылает IP-пакет через D,Ethernet-адрес места назначения является адресом D.
Модуль IP в машине D получает IP-пакет и проверяет IP-адрес места назначения.Определив,что это не его IP-адрес, шлюз D посылает этот IP-пакет прямо к E.
Итак, при прямой маршрутизации IP- и Ethernet-адреса отправителя соответствуют адресам того узла, который послал IP-пакет, а IP- и Ethernet-адреса места назначения соответствуют адресам получателя.При косвенной маршрутизации IP- и Ethernet-адреса не образуют таких пар.
В данном примере сеть internet является очень простой.Реальные сети могут быть гораздо сложнее, так как могут содержать несколько шлюзов и несколько типов физических сред передачи.В приведенном примере несколько сетей Ethernet об'единяются шлюзом для того, чтобы локализовать широковещательный трафик в каждой сети.
Выше мы показали, что происходит при передаче сообщений,а теперь рассмотрим правила или алгоритм маршрутизации.
Для отправляемых IP-пакетов, поступающих от модулей верхнего уровня,модуль IP должен определить способ доставки - прямой или косвенный - и выбрать сетевой интерфейс. Этот выбор делается на основании результатов поиска в таблице маршрутов.
Для принимаемых IP-пакетов, поступающих от сетевых драйверов, модуль IP должен решить, нужно ли ретранслировать IP-пакет по другой сети или передать его на верхний уровень. Если модуль IP решит, что IP-пакет должен быть ретранслирован, то дальнейшая работа с ним осуществляется также,как с отправляемыми IP-пакетами.
Входящий IP-пакет никогда не ретранслируется через тот же сетевой интерфейс, через который он был принят.(Проще говоря маршрутизатор, принявший сообщение из некоторой сети, никогда не отправит его обратно.)
Решение о маршрутизации принимается до того, как IP-пакет передается сетевому драйверу, и до того, как происходит обращение к ARP-таблице.
Как модуль IP узнает, какой именно сетевой интерфейс нужно использовать для отправления IP-пакета? Модуль IP осуществляет поиск в таблице маршрутов.Ключом поиска служит номер IP-сети, выделенный из IP-адреса места назначения IP-пакета.
Таблица маршрутов содержит по одной строке для каждого маршрута.Основными столбцами таблицы маршрутов являются номер сети, флаг прямой или косвенной маршрутизации, IP-адрес шлюза и номер сетевого интерфейса. Эта таблица используется модулем IP при обработке каждого отправляемого IP-пакета.
В большинстве систем таблица маршрутов может быть изменена с помощью команды "route". Содержание таблицы маршрутов определяется менеджером сети, поскольку менеджер сети присваивает машинам IP-адреса.
Рассмотрим более подробно, как происходит маршрутизация в одной физической сети.
Одна физическая сеть
Таблица маршрутов в узле alpha выглядит так:
Сеть | Вид маршрутизации | Шлюз | Номер интерфейса |
---|---|---|---|
development | прямая | пусто | 1 |
В данном простом примере все узлы сети имеют одинаковые таблицы маршрутов.
Для сравнения ниже представлена та же таблица, но вместо названия сети указан ее номер.
Сеть | Вид маршрутизации | Шлюз | Номер интерфейса |
---|---|---|---|
223 . 1 . 2 | прямая | пусто | 1 |
Узел alpha посылает IP-пакет узлу beta. Этот пакет находится в модуле IP узла alpha, и IP-адрес места назначения равен IP-адресу beta (223.1.2.2). Модуль IP с помощью маски подсети выделяет номер сети из IP-адреса и ищет соответствующую ему строку в таблице маршрутов.В данном случае подходит первая строка.
Остальная информация в найденной строке указывает на то, что машины этой сети доступны напрямую через интерфейс номер 1. С помощью ARP-таблицы выполняется преобразование IP-адреса в соответствующий Ethernet-адрес, и через интерфейс 1 Ethernet-кадр посылается узлу beta.
Если прикладная программа пытается послать данные по IP-адресу,который не принадлежит сети development, то модуль IP не сможет найти соответствующую запись в таблице маршрутов. В этом случае модуль IP отбрасывает IP-пакет.Некоторые реализации протокола возвращают сообщение об ошибке "Сеть не доступна".
Теперь рассмотрим более сложный порядок маршрутизации в IP-сети,изображенной на рис.5.6.
Подробная схема трех сетей
Таблица маршрутов в узле alpha выглядит так:
Сеть | Вид маршрутизации | Шлюз | Номер интерфейса |
---|---|---|---|
development | прямая | пусто | 1 |
accounting | косвенная | devnetrouter | 1 |
factory | косвенная | devnetrouter | 1 |
Та же таблица с IP-адресами вместо названий.
Сеть | Вид маршрутизации | Шлюз | Номер интерфейса |
---|---|---|---|
223 . 1 . 2 | прямая | пусто | 1 |
223 . 1 . 3 | косвенная | devnetrouter | 1 |
223 . 1 . 4 | косвенная | devnetrouter | 1 |
В столбце "шлюз" таблицы маршрутов узла alpha указывается IP-адрес точки соединения узла delta с сетью development.
Узел alpha посылает IP-пакет узлу epsilon. Этот пакет находится в модуле IP узла alpha, и IP-адрес места назначения равен IP-адресу узла epsilon (223.1.3.2).Модуль IP выделяет сетевой номер из IP-адреса (223.1.3) и ищет соответствующую ему строку в таблице маршрутов.Соответствие находится во второй строке.
Запись в этой строке указывает на то, что машины требуемой сети доступны через шлюз devnetrouter. Модуль IP в узле alpha осуществляет поиск в ARP-таблице, с помощью которого определяет Ethernet-адрес, соответствующий IP-адресу devnetrouter. Затем IP-пакет, содержащий IP-адрес места назначения epsilon, посылается через интерфейс 1 шлюзу devnetrouter.
IP-пакет принимается сетевым интерфейсом в узле delta и передается модулю IP.Проверяется IP-адрес места назначения, и, поскольку он не соответствует ни одному из собственных IP-адресов delta, шлюз решает ретранслировать IP-пакет.
Модуль IP в узле delta выделяет сетевой номер из IP-адреса места назначения IP-пакета (223.1.3) и ищет соответствующую запись в таблице маршрутов. Таблица маршрутов в узле delta выглядит так:
Сеть | Вид маршрутизации | Шлюз | Номер интерфейса |
---|---|---|---|
development | прямая | пусто | 1 |
accounting | прямая | пусто | 3 |
factory | прямая | пусто | 2 |
Соответствие находится во второй строке. Теперь модуль IP напрямую посылает IP-пакет узлу epsilon через интерфейс номер 3. Пакет содержит IP- и Ethernet-адреса места назначения равные epsilon.
Узел epsilon принимает IP-пакет, и его модуль IP проверяет IP-адрес места назначения. Он соответствует IP-адресу epsilon, поэтому содержащееся в IP-пакете сообщение передается протокольному модулю верхнего уровня.