IP-адресация. IPv4

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


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


В данном разделе мы рассмотрим IP-адреса четвертой версии, а в следующем — шестой.


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

В таком виде каждый IP-адрес состоит из четырех частей, разделенных точками. Каждая из частей называется октетом, поскольку состоит из восьми двоичных цифр. Например, адресу 192.168.1.8 соответствует запись 11000000.10101000.00000001.00001000 в двоичном

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


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


20 = 1

21 = 2

23 = 8

24 = 16

25 = 32

26 = 64

27 = 128


В двоичном формате каждому биту в октете сопоставлено определенное десятичное число. Бит, установленный в 0, всегда соответствует нулевому значению. Бит, установленный в 1, может быть преобразован в десятичное число. Младший бит октета представляет десятичное число 1, а старший - 128. Максимальное значение октета (255) достигается, когда каждый его бит равен 1.


Рассмотрим перевод из двоичной системы в точечно-десятичный формат на примере. Например, у нас есть IP-адрес в следующем формате: 00010011.11010100.10000001.00011111


1. Возьмем первый октет 00010011

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

0+0+0+24+0+0+21+20 = 8+2+1 = 11


2. Возьмем второй октет из восьми бит 11010100
Мы видим, что биты установлены в 1 в позициях 2, 4, 6, 7. Преобразуем эти биты в десятичное число путем возведения двойки в степень равную номеру позиции, суммируем их, биты, установленные в 0, принимаем за ноль.

27+26+0+24+0+22+0+0 = 128+64+16+4 = 212


3. Возьмем третий октет 10000001

Видим, что биты установлены в 1 в позициях 0 и 7. Аналогично преобразуем эти биты в десятичное число:

27+0+0+0+0+0+0+20 = 127+1 = 128


4. Возьмем последний октет 00011111

Биты установлены в 1 в позициях 0, 1, 2, 3, 4. В итоге получаем:

0+0+0+24+23+22+21+20 = 16+8+4+2+1 = 31


Мы перевели каждый из октетов в десятичное число, таким образом получив IP-адрес в точечно-десятичном формате — 11.212.128.31



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


Допустим, у нас есть адрес 120.22.123.12, который надо перевести в двоичный формат.

Точно так же возьмем каждый октет по отдельности.


1. Возьмем первый октет 120 и разложим его в сумму подходящих степеней двойки. Для этого начнем сравнивать с наибольшей возможной степенью — 27 = 128.

- Мы видим, что 128 больше, чем 120, таким образом бит в седьмой позиции не может быть установлен в 1, значит, его значение — 0.

- Далее берем 26 = 64, 64 меньше, чем 120, таким образом можно сказать, что бит в шестой позиции имеет значение 1. Вычитаем 64 из 120, получаем 120-64 = 56.

- Смотрим на следующую степень двойки — 25 = 32. 32 меньше, чем наш остаток 56, значит, бит в пятой позиции установлен в 1. Вычитаем 32 из 56, получаем 56-32 = 24.

- Смотрим на следующую степень двойки — 24 = 16. Опять 16 меньше 24, значит, и в четвертой позиции бит равен 1. Вычитаем 16 из 24, получаем 24-16 = 8.

- Смотрим на следующую степень двойки — 23 = 8. Эта степень двойки равна полученному остатку, таким образом, бит в третьей позиции равен 1, а во второй, первой и нулевой — 0.

Таким образом мы разложили 120 в двоичную последовательность 01111000.


2. Возьмем второй октет 22 и повторим ту же последовательность действий.

- Сразу можно заметить, что степенью двойки, меньшей 22, будет 24 = 16. Таким образом, биты в седьмой, шестой и пятой позициях равны 0, а только начиная с четвертой позиции в последовательности появляется 1. Вычитаем 16 из 22, получаем 22-16 = 6.

- Продолжаем сравнивать полученный остаток со следующими степенями двойки: 23 = 8 больше 6, значит, в третьей позиции бит равен 0, 22 = 4 меньше 6, значит, во второй позиции бит установлен в 1. Вычитаем 4 из 6, получаем 6-4 = 2.

- Смотрим на следующую степень двойки — 21 = 2. Эта степень двойки равна полученному остатку, таким образом, бит во первой позиции равен 1, а в нулевой — 0.

Таким образом мы разложили 22 в двоичную последовательность 00010110.


Попробуйте разложить оставшиеся 123 и 12 в двоичные последовательности самостоятельно, в итоге должны получиться 01111011 и 00001100.

Рассмотрим структуру IPv4 пакета, отметив наиболее важные его поля:


https://itempuniversity.com/pluginfile.php/8506/mod_lesson/page_contents/71/IPv4-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%B0%D1%86%D0%B8%D1%8F.docx.png

- Версия
Первым полем пакета является версия протокола размером в четыре бита. Для IPv4 это 4.
- «Время жизни» (Time to Live, TTL) пакета
Определяет максимальное количество маршрутизаторов на пути следования пакета. Наличие этого параметра не позволяет пакету бесконечно ходить по сети. Каждый маршрутизатор при обработке пакета должен уменьшить значение TTL на единицу. Пакеты, время жизни которых стало равно нулю, уничтожаются. На отправке пакетов с разным временем жизни основана трассировка их пути прохождения (traceroute). Максимальное значение TTL=255.
- Протокол
Указывает, данные какого протокола IP содержит пакет (например, TCP или ICMP).

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

- Адрес источника
32-битный адрес отправителя пакета. Может не совпадать с настоящим адресом отправителя из-за трансляции адресов.
- Адрес назначения
32-битный адрес получателя пакета.

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