Чтобы понять технику межсетевого взаимодействия, нужно понять то, как используется таблица маршрутов. Это понимание необходимо для успешного администрирования и сопровождения IP-сетей.
A B C
| | |
--------------o------o------o-----
Ethernet 1
IP-сеть "development"
Простая IP-сеть
Когда A посылает IP-пакет B, то заголовок IP-пакета содержит в поле
отправителя IP-адрес узла A, а заголовок Ethernet-кадра содержит в поле
отправителя Ethernet-адрес A. Кроме этого, IP-заголовок содержит в поле
получателя IP-адрес узла B, а Ethernet-заголовок содержит в поле получателя
Ethernet-адрес B.
В данном случае при взаимодействии A с B используется прямая
маршрутизация.
Менеджер сети присваивает каждой сети Ethernet уникальный номер,
называемый IP-номером сети. На
рис.7 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.
В данном примере сеть internet является очень простой. Реальные
сети могут быть гораздо сложнее, так как могут содержать несколько шлюзов
и несколько типов физических сред передачи. В приведенном примере
несколько сетей Ethernet объединяются шлюзом для того, чтобы локализовать
широковещательный трафик в каждой сети.
Для отправляемых IP-пакетов, поступающих от модулей верхнего уровня,
модуль IP должен определить способ доставки - прямой или косвенный - и
выбрать сетевой интерфейс. Этот выбор делается на основании результатов
поиска в таблице маршрутов.
Для принимаемых IP-пакетов, поступающих от сетевых драйверов, модуль
IP должен решить, нужно ли ретранслировать IP-пакет по другой сети или
передать его на верхний уровень. Если модуль IP решит, что IP-пакет должен
быть ретранслирован, то дальнейшая работа с ним осуществляется также,
как с отправляемыми IP-пакетами.
Входящий IP-пакет никогда не ретранслируется через тот же сетевой
интерфейс, через который он был принят.
Решение о маршрутизации принимается до того, как IP-пакет передается
сетевому драйверу, и до того, как происходит обращение к ARP-таблице.
Существуют 5 классов IP-адресов, отличающиеся количеством бит в
сетевом номере и хост-номере. Класс адреса определяется значением его
первого октета.
В табл.8 приведено соответствие классов адресов значениям первого
октета и указано количество возможных IP-адресов каждого класса.
Некоторые IP-адреса являются выделенными и трактуются по-особому.
Одно из важнейших решений, которое необходимо принять при установке
сети, заключается в выборе способа присвоения IP-адресов вашим машинам.
Этот выбор должен учитывать перспективу роста сети. Иначе в дальнейшем
вам придется менять адреса. Когда к сети подключено несколько сотен
машин, изменение адресов становится почти невозможным.
Организации, имеющие небольшие сети с числом узлов до 126, должны
запрашивать сетевые номера класса C. Организации с большим числом машин
могут получить несколько номеров класса C или номер класса B. Удобным
средством структуризации сетей в рамках одной организации являются подсети.
Конечно, использование подсетей необязательно. Можно просто назначить
для каждой физической сети свой сетевой номер, например, номер
класса C. Однако такое решение имеет два недостатока. Первый, и менее
существенный, заключается в пустой трате сетевых номеров. Более серьезный
недостаток состоит в том, что если ваша организация имеет несколько
сетевых номеров, то машины вне ее должны поддерживать записи о маршрутах
доступа к каждой из этих IP-сетей. Таким образом, структура IP-сети
организации становится видимой для всего мира. При каких-либо изменениях
в IP-сети информация о них должна быть учтена в каждой из машин,
поддерживающих маршруты доступа к данной IP-сети.
Подсети позволяют избежать этих недостатков. Ваша организация
должна получить один сетевой номер, например, номер класса B. Стандарты
TCP/IP определяют структуру IP-адресов. Для IP-адресов класса B первые
два октета являются номером сети. Оставшаяся часть IP-адреса может
использоваться как угодно. Например, вы можете решить, что третий октет
будет определять номер подсети, а четверый октет - номер узла в ней. Вы
должны описать конфигурацию подсетей в файлах, определяющих маршрутизацию
IP-пакетов. Это описание является локальным для вашей организации и не
видно вне ее. Все машины вне вашей организации видят одну большую IPсеть.
Следовательно, они должны поддерживать только маршруты доступа к
шлюзам, соединяющим вашу IP-сеть с остальным миром. Изменения, происходящие
в IP-сети организации, не видны вне ее. Вы легко можете добавить
новую подсеть, новый шлюз и т.п.
Вы также должны выбрать "маску подсети". Она используется сетевым
программным обеспечением для выделения номера подсети из IP-адресов.
Биты IP-адреса, определяющие номер IP-сети, в маске подсети должны быть
равны 1, а биты, определяющие номер узла, в маске подсети должны быть
равны 0. Как уже отмечалось, стандарты TCP/IP определяют количество
октетов, задающих номер сети. Часто в IP-адресах класса B третий октет
используется для задания номера подсети. Это позволяет иметь 256 подсетей,
в каждой из которых может быть до 254 узлов. Маска подсети в такой
системе равна 255.255.255.0. Но, если в вашей сети должно быть больше
подсетей, а в каждой подсети не будет при этом более 60 узлов, то можно
использовать маску 255.255.255.192. Это позволяет иметь 1024 подсети и
до 62 узлов в каждой. (Напомним, что номера узлов 0 и "все единицы"
используются особым образом.)
Обычно маска подсети указывается в файле стартовой конфигурации
сетевого программного обеспечения. Протоколы TCP/IP позволяют также
запрашивать эту информацию по сети.
В большинстве случаев файлы "hosts" могут быть одинаковы на всех
узлах. Заметим, что о узле delta в этом файле есть всего одна запись,
хотя он имеет три IP-адреса (рис.11).
Узел delta доступен по любому из
этих IP-адресов. Какой из них используется, не имеет значения. Когда
узел delta получает IP-пакет и проверяет IP-адрес места назначения, то он
опознает любой из трех своих IP-адресов.
IP-сети также могут иметь имена. Если у вас есть три IP-сети, то
файл "networks" может выглядеть примерно так:
В данном примере alpha является узлом номер 1 в сети development,
beta является узлом номер 2 в сети development и т.д.
Показанный выше файл hosts удовлетворяет потребности пользователей,
но для управления сетью internet удобнее иметь названия всех сетевых
интерфейсов. Менеджер сети, возможно, заменит строку, относящуюся к
delta:
Файлы hosts и networks используются командами администрирования и
прикладными программами. Они не нужны собственно для работы сети internet,
но облегчают ее использование.
Таблица маршрутов содержит по одной строке для каждого маршрута.
Основными столбцами таблицы маршрутов являются номер сети, флаг прямой
или косвенной маршрутизации, IP-адрес шлюза и номер сетевого интерфейса.
Эта таблица используется модулем IP при обработке каждого отправляемого
IP-пакета.
В большинстве систем таблица маршрутов может быть изменена с помощью
команды "route". Содержание таблицы маршрутов определяется менеджером
сети, поскольку менеджер сети присваивает машинам IP-адреса.
----------------------------------------------------------
| сеть флаг вида шлюз номер |
| маршрутизации интерфейса |
----------------------------------------------------------
| development прямая <пусто> 1 |
----------------------------------------------------------
Табл.9. Пример таблицы маршрутов
Для сравнения ниже представлена та же таблица, но вместо названия
сети указан ее номер.
Остальная информация в найденной строке указывает на то, что машины
этой сети доступны напрямую через интерфейс номер 1. С помощью
ARP-таблицы выполняется преобразование IP-адреса в соответствующий
Ethernet-адрес, и через интерфейс 1 Ethernet-кадр посылается узлу beta.
Если прикладная программа пытается послать данные по IP-адресу,
который не принадлежит сети development, то модуль IP не сможет найти
соответствующую запись в таблице маршрутов. В этом случае модуль IP
отбрасывает IP-пакет. Некоторые реализации протокола возвращают сообщение
об ошибке "Сеть не доступна".
-----------------------------------------------------
| адрес отправитель получатель |
-----------------------------------------------------
| IP-заголовок A B |
| Ethernet-заголовок A B |
-----------------------------------------------------
Адреса в Ethernet-кадре, передающем IP-пакет от A к B
В этом простом примере протокол IP является излишеством, которое
мало что добавляет к услугам, предоставляемым сетью Ethernet. Однако
протокол IP требует дополнительных расходов на создание, передачу и обработку
IP-заголовка. Когда в машине B модуль IP получает IP-пакет от
машины A, он сопоставляет IP-адрес места назначения со своим и, если
адреса совпадают, то передает датаграмму протоколу верхнего уровня.
Косвенная маршрутизация
На рисунке представлена более реалистичная картина сети internet. В
данном случае сеть internet состоит из трех сетей Ethernet, на базе которых
работают три IP-сети, объединенные шлюзом D. Каждая IP-сеть включает
четыре машины; каждая машина имеет свои собственные IP- и Ethernet
адреса.
----- D ------
A B C | | | E F G
| | | | | | | | |
----o-----o-----o-----o-- | --o-----o-----o-----o--
Ethernet 1 | Ethernet 2
IP-сеть "development" | IP-сеть "accounting"
|
| H I J
| | | |
--o----o-----o-----o---------
Ethernet 3
IP-сеть "fuctory"
Рис. 7. Сеть internet, состоящая из трех IP-сетей
За исключением D все машины имеют стек протоколов, аналогичный
показанному на рисунке. Шлюз D соединяет все три сети и, следовательно,
имеет
три IP-адреса и три Ethernet-адреса. Машина D имеет стек протоколов
TCP/IP, похожий на тот, что показан на
рис.3, но вместо двух модулей ARP
и двух драйверов, он содержит три модуля ARP и три драйвера Ethernet.
Обратим внимание на то, что машина D имеет только один модуль IP.
----------------------------------------------------
| адрес отправитель получатель |
---------------------------------------------------
| IP-заголовок A E |
| Ethernet-заголовок A D |
---------------------------------------------------
Табл.6. Адреса в Ethernet-кадре, содержащем IP-пакет от A к E
(до шлюза D)
Модуль IP в машине D получает IP-пакет и проверяет IP-адрес места
назначения. Определив, что это не его IP-адрес, шлюз D посылает этот
IP-пакет прямо к E.
----------------------------------------------------
| адрес отправитель получатель |
----------------------------------------------------
| IP-заголовок A E |
| Ethernet-заголовок D E |
----------------------------------------------------
Табл.7. Адреса в Ethernet-кадре, содержащем IP-пакет от A к E
(после шлюз D)
Итак, при прямой маршрутизации IP- и Ethernet-адреса отправителя
соответствуют адресам того узла, который послал IP-пакет, а IP- и
Ethernet-адреса места назначения соответствуют адресам получателя. При
косвенной маршрутизации IP- и Ethernet-адреса не образуют таких пар.
Правила маршрутизации в модуле IP
Выше мы показали, что происходит при передаче сообщений, а теперь
рассмотрим правила или алгоритм маршрутизации.
IP-адрес
Менеджер сети присваивает IP-адреса машинам в соответствии с тем, к
каким IP-сетям они подключены. Старшие биты 4-х байтного IP-адреса
определяют номер IP-сети. Оставшаяся часть IP-адреса - номер узла
(хостномер). Для машины из табл.1 с IP-адресом 223.1.2.1 сетевой номер
равен
223.1.2, а хост-номер - 1. Напомним, что IP-адрес узла идентифицирует
точку доступа модуля IP к сетевому интерфейсу, а не всю машину.
0 8 16 24 31
---------------------------------------------------
Класс A |0| номер сети | номер узла |
---------------------------------------------------
---------------------------------------------------
Класс B |10| номер сети | номер узла |
---------------------------------------------------
---------------------------------------------------
Класс C |110| номер сети | номер узла |
---------------------------------------------------
---------------------------------------------------
Класс D |1110| групповой адрес |
---------------------------------------------------
---------------------------------------------------
Класс E |11110| зарезервировано |
---------------------------------------------------
Рис.8. Структура IP-адресов
-------------------------------------------------------
| Класс Диапазон значений Возможное Возможное |
| первого октета кол-во сетей кол-во узлов |
-------------------------------------------------------
| A 1 - 126 126 16777214 |
| B 128-191 16382 65534 |
| C 192-223 2097150 254 |
| D 224-239 - 2**28 |
| E 240-247 - 2**27 |
-------------------------------------------------------
Табл.8. Характеристики классов адресов
------------------------------
| все нули | Данный узел
------------------------------ -----------------------------
| номер сети | все нули | Данная IP-сеть
------------------------------ -----------------------------
| все нули | номер узла | Узел в данной (локальной) IP-сети
------------------------------ -----------------------------
| все единицы | Все узлы в данной (локальной) IP-сети
------------------------------ -----------------------------
| номер сети | все единицы | Все узлы в указанной IP-сети
------------------------------ -----------------------------
| 127 | что-нибудь (часто 1) | "Петля"
------------------------------
Рис.9. Выделенные IP-адреса
Как показано на рис.9,
в выделенных IP-адресах все нули соответствуют
либо данному узлу, либо данной IP-сети, а IP-адреса, состоящие из
всех единиц, используются при широковещательных передачах. Для ссылок на
всю IP-сеть в целом используется IP-адрес с нулевым номером узла. Особый
смысл имеет IP-адрес, первый октет которого равен 127. Он используется
для тестирования программ и взаимодействия процессов в пределах одной
машины. Когда программа посылает данные по IP-адресу 127.0.0.1, то
образуется как бы "петля". Данные не передаются по сети, а возвращаются
модулям верхнего уровня, как только что принятые. Поэтому в IP-сети
запрещается присваивать машинам IP-адреса, начинающиеся со 127.
Выбор адреса
Прежде чем вы начнете использовать сеть с TCP/IP, вы должны получить
один или несколько официальных сетевых номеров. Выделением номеров (как
и многими другими вопросами) занимается DDN Network Information Center
(NIC)
SRI International, Room EJ210, 333 Ravenswood Avenue, Menlo
Park, California 94025, USA. Тел. 1-800-235-3155. E-mail:
NIC@NIC.DDN.MIL
Выделение номеров производится бесплатно и занимает около
недели. Вы можете получить сетевой номер вне зависимости от того, для
чего предназначена ваша сеть. Даже если ваша сеть не имеет связи с
объединенной сетью Internet, получение уникального номера желательно, так как
в этом случае есть гарантия, что в будущем при включении в Internet или
при подключении к сети другой организации не возникнет конфликта адресов.
Подсети
Адресное пространство сети internet может быть разделено на
непересекающиеся подпространства - "подсети", с каждой из которых можно
работать как с обычной сетью TCP/IP. Таким образом единая IP-сеть
организации может строиться как объединение подсетей. Как правило,
подсеть соответствует одной физической сети, например, одной сети Ethernet.
Как назначать номера сетей и подсетей
После того, как решено использовать подсети или множество IP-сетей,
вы должны решить, как назначать им номера. Обычно это довольно просто.
Каждой физической сети, например, Ethernet или Token Ring, назначается
отдельный номер подсети или номер сети. В некоторых случаях имеет смысл
назначать одной физической сети несколько подсетевых номеров. Например,
предположим, что имеется сеть Ethernet, охватывающая три здания. Ясно,
что при увеличении числа машин, подключенных к этой сети, придется ее
разделить на несколько отдельных сетей Ethernet. Для того, чтобы избежать
необходимости менять IP-адреса, когда это произойдет, можно заранее
выделить для этой сети три подсетевых номера - по одному на здание. (Это
полезно и в том случае, когда не планируется физическое деление сети.
Просто такая адресация позволяет сразу определить, где находится та или
иная машина.) Однако прежде, чем выделять три различных подсетевых номера
одной физической сети, тщательно проверьте, что все ваши программы способны
работать в такой среде.
Имена
Людям удобнее называть машины по именам, а не числами. Например, у
машины по имени alpha может быть IP-адрес 223.1.2.1. В маленьких сетях
информация о соответствии имен IP-адресам хранится в файлах "hosts" на
каждом узле. Конечно, название файла зависит от конкретной реализации.
В больших сетях эта информация хранится на сервере и доступна по сети.
Несколько строк из файла "hosts" могут выглядеть примерно так:
223.1.2.1 alpha
223.1.2.2 beta
223.1.2.3 gamma
223.1.2.4 delta
223.1.3.2 epsilon
223.1.4.2 iota
В первом столбце - IP-адрес, во втором - название машины.
223.1.2 development
223.1.3 accounting
223.1.4 factory
В первой колонке - сетевой номер, во второй - имя сети.
223.1.2.4 devnetrouter delta
223.1.3.1 accnetrouter
223.1.4.1 facnetrouter
Эти три строки файла hosts задают каждому IP-адресу узла delta
символьные имена. Фактически, первый IP-адрес имеет два имени:
"devnetrouter" и "delta", которые являются синонимами. На практике имя
"delta" используется как общеупотребительное имя машины, а остальные три
имени - для администрирования сети.
IP-таблица маршрутов
Как модуль IP узнает, какой именно сетевой интерфейс нужно использовать
для отправления IP-пакета? Модуль IP осуществляет поиск в таблице
маршрутов. Ключом поиска служит номер IP-сети, выделенный из IP-адреса
места назначения IP-пакета.
Подробности прямой маршрутизации
Рассмотрим более подробно, как происходит маршрутизация в одной
физической сети.
------------- -------------
| alpha | | beta |
| 223.1.2.1 | | 223.1.2.2 |
| 1 | | 1 |
------------- -------------
| |
------o-----------------------o------
Ethernet 1
IP-сеть "development"
223.1.2
Рис.10. Одна физическая сеть
Таблица маршрутов в узле alpha выглядит так:
----------------------------------------------------------
| сеть флаг вида шлюз номер |
| маршрутизации интерфейса |
----------------------------------------------------------
| 223.1.2 прямая <пусто> 1 |
----------------------------------------------------------
Табл.10. Пример таблицы маршрутов с номерами сетей
Порядок прямой маршрутизации
Узел alpha посылает IP-пакет узлу beta. Этот пакет находится в
модуле IP узла alpha, и IP-адрес места назначения равен IP-адресу beta
(223.1.2.2). Модуль IP с помощью маски подсети выделяет номер сети из
IP-адреса и ищет соответствующую ему строку в таблице маршрутов. В данном
случае подходит первая строка. Подробности косвенной маршрутизации
Теперь рассмотрим более сложный порядок маршрутизации в IP-сети,
изображенной на рис.11.
Таблица маршрутов в узле alpha выглядит так:
----------------------------------------------------------
| сеть флаг вида шлюз номер |
| маршрутизации интерфейса |
----------------------------------------------------------
| development прямая <пусто> 1 |
| accounting косвенная devnetrouter 1 |
| factory косвенная devnetrouter 1 |
----------------------------------------------------------
Табл.11. Таблица маршрутов в узле alpha
-------------
| delta |
------------- | 223.1.2.4 | -------------
| alpha | | 223.1.4.1 | | epsilon |
| 223.1.2.1 | | 223.1.3.1 | | 223.1.3.2 |
| 1 | | 1 2 3 | | 1 |
------------- ------------- -------------
| | | | |
------o------------------o- | -o-----------------o--------
Ethernet 1 | Ethernet 2
IP-сеть "development" | IP-сеть "accounting"
223.1.2 | 223.1.3
|
| -------------
| | iota |
| | 223.1.4.2 |
| | 1 |
| -------------
| |
---o----------o------------------
Ethernet 3
IP-сеть "factory"
223.1.4
Рис.11. Подробная схема трех сетей
----------------------------------------------------------
| сеть флаг вида шлюз номер |
| маршрутизации интерфейса |
----------------------------------------------------------
| 223.1.2 прямая <пусто> 1 |
| 223.1.3 косвенная 223.1.2.4 1 |
| 223.1.4 косвенная 223.1.2.4 1 |
----------------------------------------------------------
Табл.12. Таблица маршрутов в узле alpha (с номерами)
Запись в этой строке указывает на то, что машины требуемой сети доступны через шлюз 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 |
----------------------------------------------------------
Табл.13. Таблица маршрутов в узле delta
Та же таблица с IP-адресами вместо названий.
----------------------------------------------------------
| сеть флаг вида шлюз номер |
| маршрутизации интерфейса |
----------------------------------------------------------
| 223.1.2 прямая <пусто> 1 |
| 223.1.3 прямая <пусто> 3 |
| 223.1.4 прямая <пусто> 2 |
----------------------------------------------------------
Табл.14. Таблица маршрутов в узле delta (с номерами)
Узел epsilon принимает IP-пакет, и его модуль IP проверяет IP-адрес места назначения. Он соответствует IP-адресу epsilon, поэтому содержащееся в IP-пакете сообщение передается протокольному модулю верхнего уровня.