IP адресация - принцип работы

IP адресация используется посеместно. Когда вы постите в соц сетях, смотрите на Ютубе видео, или загружаете программы и не важно компьютер у вас, или смартфон - везде, для связи используется IP адресация. Давайте разберемся как она работает.

Основы IP адресации

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

Для идентификации компьютера, или другого сетевого устройства, достаточно знать два параметра: IP адрес, и маску сети.

Например:

IP:   192.168.2.102
Netmask:   255.255.255.0

На самом деле, IP адрес 192.168.2.102 и Маска 255.255.255.0 - это всего-лишь абстракция, представление числа в десятичном, понятном человеку формате.

Компьютер видит эти числа в двоичном формате. Для хранения IPv4 адресса используется 32 битные переменные, один байт равен 8 бит -> 4 * 8 = 32 - отсюда и четверка в IPv4, то-есть это 32 битные числа, состоящие из комбинации 32 нулей и единиц.

IPv4 адрес и маска подсети для компьютера выглядит так:

Address:    11000000101010000000001001100110
Netmask:    11111111111111111111111100000000

Как вы видите, для человека эти нули и единицы мало что говорят, потому для простоты восприятия, эти последовательности нулей и единиц разделены на блоки по 8 бит, октеты:

Address:    11000000.10101000.00000010.01100110
Netmask:    11111111.11111111.11111111.00000000

Уже легче, но проблема не ушла, даже разбив 32 битное число на 4 октета ситуация с восприятием не улучшилась, человек все-таки легче всего воспринимает числа, записанные в десятичном формате.

Address:    11000000.10101000.00000010.01100110   (192.168.2.102)
Netmask:    11111111.11111111.11111111.00000000   (255.255.255.0) /24

Ну вот. это уже другое дело. Вместо 11000000101010000000001001100110 -> 192.168.2.102 результат просто превосходный. IP адрес, записанный в таком формате запоминается гораздо легче.

Обратите внимание:
Каждый из четырех октетов может принимать значение от 0 до 255 (255 = 28 - 1), в двоичном эквиваленте от 00000000 до 11111111.

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

Возьмем выше упомянутый IP адрес 192.168.2.102

    Октет 1 Октет 2 Октет 3 Октет 4
Число в десятичном формате Число в двоичном формате 192 168 2 102
128 10000000 * *    
64 01000000 *     *
32 00100000   *   *
16 00010000        
8 00001000   *    
4 00000100       *
2 00000010     * *
1 00000001        
0 00000000        

Каждый из четырех октетов может состоять только из суммы чисел первой колонки, или второй колонки таблицы, только для десятичных чисел используется обычная арифметрика, а для двоичных логическая, побитовое И. Например, для получения октета со значением 192, нужно к 128 прибавить 64, или 10000000 & 01000000 = 1100000. Оба числа, 192 и 11000000 идентичны, только записаны в различных системах счисления.

Обратите внимание: При побитовом И, если оба бита равны 1 - результат будет 1, в противном случае результат будет 0.

Также само вычисляется 168 - это сумма 128 + 32 + 8 и так далее.

Если просуммировать все числа первой колонки, получится число 255, в двоичном эквиваленте 11111111.
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

256 - это будет следующий, девятый разряд. 00000001 00000000

  1. Определяем из суммы каких чисел состоят октеты нашего IP адреса:

    • Первый октет: 128 + 64 = 192
      10000000 & 01000000 = 11000000
    • Второй октет: 128 + 32 + 8 = 168
      10000000 & 00100000 & 00001000 = 10101000
    • Третий октет: 2 не требуется суммировать
      00000010
    • Четвертый октет: 64 + 32 + 4 + 2 = 102
      01000000 & 00100000 & 00000100 & 00000010 = 01100110
  2. Записываем октеты IP адреса в двоичном формате: 11000000.10101000.00000010.01100110.

Обратите внимание, что каждый октет обязательно должен состоять из восьми цифр. Если у вас получилоь число меньше чем нужно, недостающие символы заполните нулями слева. Например, число 2 = 10, но записываем мы 00000010.

Маска подсети

С IP адресом более-менее разобрались, теперь давайте разберемся что такое маска подсети.
Маска подсети, это 32 битное число, благодаря которому можно определить какая часть IP адреса содержит адрес сети, а какая адрес хоста внутри той самой сети.

При рассмотрении IP адреса мы уже встречались с маской и знаем, что для компьютера она выглядит как-то так: 11111111111111111111111100000000, но для лучшего восприятия ее записывают в десятичной нотации:
255.255.255.0, или через косую черту после IP адреса 192.168.2.102/24.

Для того, чтоб определить адрес подсети, следует произвестии побитовое И маски подсети и IP адреса:

Address:   192.168.2.102         11000000.10101000.00000010.01100110
Netmask:   255.255.255.0 = 24    11111111.11111111.11111111.00000000
Network:   192.168.2.0/24        11000000.10101000.00000010.00000000

В приведенном выше примере первые три октета определяют адрес сети, а четвертый октет - определяет адрес хоста внутри этой сети, но в реальной жизни маска подсети может иметь не 24 бит, а, например 25, или другую длину.

Например, если маска равна 25 бит, адрес сети будет

Address:   192.168.2.102         11000000.10101000.00000010.01100110
Netmask:   255.255.255.128 = 25  11111111.11111111.11111111.10000000
Network:   192.168.2.0/25        11000000.10101000.00000010.00000000

Обратите внимание, что для хоста 192.168.2.102, для обоих масок подсетей(/24 и /25), адрес подсети у нас получился одинаковый 192.168.2.0. Получилось это потому, что учеличив длину маски на 1, мы разделили подсеть 192.168.2.0/24 на 2 части, в результате получив две подсети 192.168.2.0/25 и 192.168.2.128/25. Соответственно, хост с адресом 192.168.2.102 попал в подсеть 192.168.2.0/25.

192.168.2.0/24 = 192.168.2.0/25 + 192.168.2.128/25

Если мы возьмем IP адрес 192.168.2.230, то для него уже адрес подсети будет 192.168.2.128/25:

Address:   192.168.2.230         11000000.10101000.00000010.11100110
Netmask:   255.255.255.128 = 25  11111111.11111111.11111111.10000000
Network:   192.168.2.128/25      11000000.10101000.00000010.10000000

Путем сравнения IP адресов и масок подсетей хостов мы можем определить, находятся-ли эти хосты внутри одной сети.

Рассмотрим пример:
Компьютеру 1 нужно отправить сообщение компьютеру 2 и компьютеру 3.

компьютер 1 имеет IP адрес 192.168.2.102 и маску подсети 255.255.255.0
компьютер 2 имеет IP адрес 192.168.2.103
компьютер 3 имеет IP адрес 192.168.3.104
    
компьютер 1 производит побитовое И своего IP адреса и маски подсети.

Address1:   192.168.2.102         11000000.10101000.00000010.01100110
Netmask1:   255.255.255.0 = 24    11111111.11111111.11111111.00000000
Network1:   192.168.2.0/24        11000000.10101000.00000010.00000000

компьютер 1 производит побитовое И IP адреса компьютера 2 и своей маски подсети.

Address2:   192.168.2.103         11000000.10101000.00000010.01100111
Netmask1:   255.255.255.0 = 24    11111111.11111111.11111111.00000000
Network2:   192.168.2.0/24        11000000.10101000.00000010.00000000

компьютер1 производит побитовое И IP адреса компьютера 3 и своей маски подсети.

Address3:   192.168.3.104         11000000.10101000.00000011.01101000
Netmask1:   255.255.255.0 = 24    11111111.11111111.11111111.00000000
Network3:   192.168.3.0/24        11000000.10101000.00000011.00000000

Результат побитового И одинаков для 1 и 2 компьютеров и отличается для 3 компьютера:

Network1:   192.168.2.0/24        11000000.10101000.00000010.00000000
Network2:   192.168.2.0/24        11000000.10101000.00000010.00000000
Network3:   192.168.3.0/24        11000000.10101000.00000011.00000000

Это означает, что 2 хост находятся в пределах одной сети для хоста 1, а третий хост находится за пределами сети, к которой относятся хост 1.

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

Маршрутизация

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

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

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

Небольшое отступление. Практически у каждого из нас есть смартфон, работающий под управлением Android, или IOS. Каждый смартфон можно в один клик сделать роутером - достаточно включить на телефоне Точку доступа WiFi. Так-же, ваш домашний компьютер тоже может стать роутером!  Для этого достаточно в компьютер добавить еще один, или несколько сетевых адаптеров, а на уровне системы сделать несколько телодвижений для включения маршрутизации. В рамках данной статьи я этого не покажу, но имейте в виду, что практически каждое сетевое устройство может быть роутером.

Примечание:
Маршрутизатор зовется Роутером потому, что все устройства на пути передаваемого пакета являются частью маршрута, а маршрут по английски переводится route, соответственно маршрутизатор называют роутер.

Самый простой и самый распространенный случай, это когда сетевому устройству доступен один маршрутизатор - у каждого дома стоит WiFi роутер, через который доступ в интернет имеют все домашние устройства.

Примечание:
В редких случаях можно встретить случаи использования нескольких роутеров, но это больше исключение, чем правило. Где может понадобиться несколько роутеров? Например у вас дома заходит интернет от нескольких провайдеров и вы не имеете продвинутого роутера, имеющего два, или более внешних интерфейса. В этом случае каждый роутер имеет выход в интернет через отдельный канал связи, а внутренними интерфейсами оба маршрутизатора смотрят в общую домашнюю сеть.

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

Классы IP адресов

Исторически сложилось, что провайдерам выделялись IP адреса классами, которых всего три:

  Адреса сетей Маска подсети Количество сетей Количество хостов
Класс A 1-126.0.0.0 255.0.0.0 126 16 777 214
Класс B 128-191.0.0.0 255.255.0.0 16 384 65 534
Класс C 192-223.0.0.0 255.255.255.0 2 097 152 254

Резервированные диапазоны IP адресов

Вы наверное заметили, что диапазон адресов 127.x.x.x не вошел ни в один из классов. Данный диапазон зарезервирован под использование в интерфейсе обратной петли (loopback). Адреса из данного диапазона всегда укаызвают на локальный компьютер.

Диапазон адресов 169.254.0.x также зарезервирован под нужды APIPA.

Диапазоны частных IP адресов

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

  • 10.0.0.1 – 10.255.255.254 из класса A
  • 172.16.0.1 – 172.31.255.254 из класса B
  • 192.168.0.1 – 192.168.255.254 из класса C

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

Обратите внимание:
В большинстве случаев внешний IP адрес вашего маршрутизатора назначается DHCP сервером провайдера динамически, поэтому он со временем может изменяться. Для того, чтоб
IP адрес не изменялся - нужно у провайдера заказать услугу статический айпи адрес.

There are 7 Comments

Спасибо за пост. Можно еще

Спасибо за пост. Можно еще освежить пост табличками и примерами, как здесь - http://sysadm.pp.ua/internet/network-planning.html . Может кому-то будет интересно + ссылки на RFC по адресации, и т.п.

http://profhelp.com.ua/articles/ip-%D0%B0%D0%B4%D1%80%D0%B5%D1%8

Здравствуйте, сломал себе всю голову) в этой теме, приводится пример расчета ip адреса, и в примере у вас 192.168.2.100 , но у меня почемуто получается 192.168.2.102)

Закралась ошибочка

Доброго дня.
Вы правы - у меня закралась ошибочка, спасибо.

Делись своим опытом и знаниями, ибо в могиле они тебе вряд-ли пригодятся.

ОСНОВЫ IP АДРЕСАЦИИ

Очень понятное объяснение только исправьте "Также само вычисляется 168 - это сумма 128 + 64 + 1(193) и так далее." но в таблице приведен пример правильно 128+32+8. Спасибо.

спасибо!

спасибо!

Делись своим опытом и знаниями, ибо в могиле они тебе вряд-ли пригодятся.

IP АДРЕСАЦИЯ - ПРИНЦИП РАБОТЫ

очень полезная статья

"Обратите внимание: При

"Обратите внимание: При побитовом сложении, если оба бита равны 1 - результат будет 1, в противном случае результат будет 0."

Вы в своем уме?? Это побитовое умножение.

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <s> <u> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <hr> <dd> <sub> <sup>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Защита от СПАМ ботов. Подтвердите, пожалуйста, что вы человек.
4 + 10 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.