IP-адрес (Internet Protocol address)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 21:41, 1 февраля 2015.

IP-адреса, состоят из двух основных компонентов: части с обозначением сети и части с обозначением хоста (рис. 1).

Рис. 1. Структура IP-адреса

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

Маска подсети необходима во всех реализациях протокола IP. Она определяет, какая часть адреса относится к хосту и какая — к сети. Для этого используется логическая операция "И" (AND). Операция "И" в двоичной арифметике выполняется очень просто. Она по сути представляет собой умножение значений в одинаковых позициях. Например, на рис. 2 показаны IР-адрес и маска подсети. Чтобы определить адрес сети (ту часть IP-адреса, которая определяет, к какой сети он относится), достаточно просто перемножить значения позиции двоичного представления IP-адреса и значения соответствующих позиций двоичного представления маски подсети. Результатом является двоичное число, которое нужно снова преобразовать в десятичное, чтобы узнать адрес сети. После этого появляется возможность применить маршрутизацию. Маршрутизацией называется действие по перенаправлению пакета из одной логической сети (или подсети) в другую. А маршрутизатор — это просто устройство, выполняющее такое действие.

Рис. 2. Основной принцип применения операции "И"

При возникновении необходимости передать информацию с одного хоста на другой в хосте отправителя берется IP-адрес хоста получателя и собственный IP-адрес, после чего с обоими адресами выполняется операция "И". Если полученный результат для обоих адресов является одинаковым, хост отправителя принимает предположение, что он находится в той же логической сети, что и хост получателя, и между ними возможно непосредственное взаимодействие. А если результаты окажутся разными, то предполагается, что хосты находятся в разных логических сетях (т.е. разделены маршрутизатором) и поэтому должны использовать маршрутизатор, чтобы связаться друг с другом. (Пример такого анализа взаимодействия показан на рис. 3).

Рис. 3. Применение операции "И" для определения адреса сети при взаимодействии хостов

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

Рассмотрим, как эти действия выполняются на практике. Чтобы передать информацию на любой хост, необходимо знать MAC-адрес (или другой адрес уровня 2) этого хоста. Такая проблема в плоской сети (плоской обычно принято называть сеть, не сегментированную с помошью маршрутизатора) решается просто. Для определения MAC-адреса достаточно применить широковещательную рассылку по протоколу ARP. Но плоские сети имеют серьезные недостатки, связанные с масштабируемостью, поскольку после передачи широковещательного сообщения его получают и обрабатывают все хосты.

Например, достаточно представить себе, что в Internet примерно через каждые пять секунд происходит широковещательная рассылка запросов на получение IР-адресов со 100 миллионов хостов. В таком случае на каждый хост через каждую секунду будет поступать приблизительно 20 миллионов пакетов. Если читатель подозревает, что для большинства хостов обработка такого количества пакетов будет затруднительной (тем более, что они в основном подключены с помощью низкоскоростных линий, таких как модемные соединения на 56 Кбайт), то он действительно прав. При условии, что пакеты имеют размер 60 байтов, каждый хост должен будет обрабатывать примерно одни гигабайт в секунду (гигабайт, а не гигабит). Поэтому для каждого хоста потребуется соединение ОС-192 (на 9,953 Гбит/с) или более быстрое соединение, чтобы он был способен передать любые данные. При этом даже не учитывается возможность лавинообразного увеличения объема широковещательной рассылки, которое происходит, если одно из устройств начинает передавать широковещательные пакеты с максимальной скоростью. При возникновении такой неисправности может остановиться работа даже соединений локальной сети, поэтому можно только себе представить, что произойдет в большинстве соединений распределенной сети.

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

Рис. 4. Сегментация сети на широковещательные домены

Поэтому логическая операция "И" применяется для того, чтобы хост мог определить, достаточно ли ему просто выполнить широковещательную рассылку, чтобы достичь другого хоста, или вместо этого он должен отправить пакет маршрутизатору. Но следует помнить, что для доставки пакета все равно необходим MAC-адрес. А если хост не может выполнять широковещательную рассылку для получения MAC-адреса удаленного хоста, то как он определит MAC-адрес, по которому должен быть отправлен пакет? Ответ на этот вопрос состоит в том, что он не выполняет такую операцию, а использует для передачи пакета MAC-адрес маршрутизатора.

Если хост определяет, что получатель передаваемого им сообщения находится в другой сети, он просто передает соответствующий пакет маршрутизатору, имеющему больше возможностей по достижению удаленной сети. Как правило, таким маршрутизатором является шлюз данного хоста, применяемый по умолчанию. (Этим маршрутизатором может быть также один из маршрутизаторов, перечисленных в таблице маршрутизации хоста) Применяемым по умолчанию шлюзом является устройство, работающее по протоколу IP, на которое хост передает пакет, если не имеет информации о том, кому еше можно передать этот пакет. При передаче пакета на применяемый но умолчанию шлюз хост в качестве MAC-ддреса получателя использует адрес этого шлюза, а не MAC-адрес удаленного хоста, но в пакете все равно указывает IP-адрес удаленного хоста. Затем маршрутизатор определяет, в каком направлении необходимо передать этот пакет, и вставляет в него новый MAC-адрес следующего транзитного перехода, если в этом есть необходимость. Такой процесс показан на рис 5.

В этом примере хост Einstein пытается отправить пакет хосту Darwin. На пути между этими двумя хостами находятся два маршрутизатора (Beethoven и Mozart). Хост Einstein определяет, что Darwin является удаленным хостом, поэтому вставляет в пакет MAC-адрес маршрутизатора Beethoven и передает этот пакет. После получения пакета маршрутизатор Beethoven определяет, что для достижения хоста Darwin этот пакет должен пройти через маршрутизатор Mozart. Поэтому он вставляет в пакет MAC-адрес маршрутизатора Mozart и передает этот пакет. Маршрутизатор Mozart имеет информацию о том, что к хосту Darwin можно обратиться непосредственно через его интерфейс Ethernet, но еще не знает MAC-адрес хоста Darwin, поэтому выполняет рассылку запросов ARP для его получения. После получения MAC-адреса хоста Darwin маршрутизатор Mozart вставляет его в пакет и передает этот пакет непосредственно хосту Darwiru. При возникновении необходимости отправить ответ с хоста Darwin на хост Einstein описанный выше процесс выполняется в обратном порядке.

Рис. 5. Передача пакета с помощью применяемого по умолчанию шлюза

Теперь после рассмотрения всего процесса попытаемся определить, находятся ли два хоста в одной и той же сети. На рис. 6 показано, как два хоста (Michelangelo и Renoir) пытаются вступить во взаимодействие. Хост Michelangelo имеет IP-адрес 172.16.1.1 с маской подсети 255.255.0.0. А хост Renoir имеет IP-алрес 172.16.5.202 с маской подсети 255.255.255.0. Могут ли они связаться друг с другом?

Рис. 6. Пример ситуации, когда два хоста безуспешно пытаются вступить во взаимодействие

Ответ является отрицательным. Снова рассмотрим рисунок 6. После выполнения операции "И" создается впечатление, что хост Michelangelo должен попытаться передать пакет на маршрутизатор, поскольку его адрес сети равен 172.168.0.0, а адрес сети хоста Renoir равен 172.16.5.0. Но фактически справедливо обратное утверждение. Хост Michelangelo не имеет возможности определить, что хост Renoir использует иную маску подсети, чем он. Поэтому этим хостом принимается предположение, что хост Renoir должен использовать такую же, как и у него, маску подсети, поскольку на нем применяется такой же блок адресов. Поэтому после выполнения хостом Michelangelo операции "И" с применением одинаковых масок подсети полученные результаты совпадают, и он предпринимает попытку непосредственно передать пакет. Самое необычное здесь состоит в том, что операция передачи пакета хостом Michelangelo фактически будет выполнена успешно, поскольку оба хоста действительно находятся в одной и той же логической сети. Но при попытке хоста Renoir ответить на запрос будет получен отрицательный результат, поскольку этот хост сам выполняет операцию "И". Полученные им результаты покажут, что оба хоста находятся в разных сетях. Поэтому хост Renoir попытается передать пакет маршрутизатору, но этот пакет так и не будет доставлен. Рассматриваемый процесс показан на рис. 7.

Рис. 7. Наглядный пример нарушения в работе

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