Ip адреса пример: IP-адрес компьютера — урок. Информатика, 9 класс.

Еще раз про IP-адреса, маски подсетей и вообще — SENETSY


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


IP-адрес (v4) состоит из 32-бит. Любой уважающий себя админ, да и вообще айтишник (про сетевых инженеров молчу) должен уметь, будучи разбуженным среди ночи или находясь в состоянии сильного алкогольного опьянения, правильно отвечать на вопрос «из скольки бит состоит IP-адрес». Желательно вообще-то и про IPv6 тоже: 128 бит.


Обстоятельство первое. Всего теоретически IPv4-адресов может быть:

232 = 210*210*210*22 = 1024*1024*1024*4 ≈ 1000*1000*1000*4 = 4 млрд.

Ниже мы увидим, что довольно много из них «съедается» под всякую фигню.


Записывают IPv4-адрес, думаю, все знают, как. Четыре октета (то же, что байта, но если вы хотите блеснуть, то говорите «октет» — сразу сойдете за своего) в десятичном представлении без начальных нулей, разделенные точками: «192. 168.11.10».


В заголовке IP-пакета есть поля source IP и destination IP: адреса источника (кто посылает) и назначения (кому). Как на почтовом конверте. Внутри пакетов у IP-адресов нет никаких масок. Разделителей между октетами тоже нет. Просто 32-бита на адрес назначения и еще 32 на адрес источника.


Однако, когда IP-адрес присваивается интерфейсу (сетевому адаптеру или как там его еще называют) компьютера или маршрутизатора, то кроме самого адреса данного устройства ему назначают еще и маску подсети. Еще раз: маска не передается в заголовках IP-пакетов.


Компьютерам маска подсети нужна для определения границ — ни за что не угадаете чего — подсети. Чтоб каждый мог определить, кто находится с ним в одной [под]сети, а кто — за ее пределами. (Вообще-то можно говорить просто «сети», часто этот термин используют именно в значении «IP-подсеть».) Дело в том, что внутри одной сети компьютеры обмениваются пакетами «напрямую», а когда нужно послать пакет в другую сеть — шлют их шлюзу по умолчанию (третий настраиваемый в сетевых свойствах параметр, если вы помните). Разберемся, как это происходит.


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


120.22.123.12=01111000.00010110.01111011.00001100.


Но может быть маска


255.255.248.0=11111111.11111111.11111000.00000000.


Сначала N единиц, потом 32-N нулей. Несложно догадаться, что такая форма записи является избыточной. Вполне достаточно числа N, называемого длиной маски. Так и делают: пишут 192.168.11.10/21 вместо 192.168.11.10 255.255.248.0. Обе формы несут один и тот же смысл, но первая заметно удобнее.


Чтобы определить границы подсети, компьютер делает побитовое умножение (логическое И) между IP-адресом и маской, получая на выходе адрес с обнуленными битами в позициях нулей маски. Рассмотрим пример 192.168.11.10/21:


11000000. 10101000.00001011.00001010

11111111.11111111.11111000.00000000

———————————————————————

11000000.10101000.00001000.00000000 = 192.168.8.0


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


Адрес 192.168.8.0, со всеми обнуленными битами на позициях, соответствующих нулям в маске, называется адресом подсети. Его (обычно) нельзя использовать в качестве адреса для интерфейса того или иного хоста. Если же эти биты наоборот, установить в единицы, то получится адрес 192.168.15.255. Этот адрес называется направленным бродкастом (широковещательным) для данной сети. Смысл его по нынешним временам весьма невелик: когда-то было поверье, что все хосты в подсети должны на него откликаться, но это было давно и неправда. Тем не менее этот адрес также нельзя (обычно) использовать в качестве адреса хоста. Итого два адреса в каждой подсети — на помойку. Все остальные адреса в диапазоне от 192.168.8.1 до 192.168.15.254 включительно являются полноправными адресами хостов внутри подсети 192.168.8.0/21, их можно использовать для назначения на компьютерах.


Таким образом, та часть адреса, которой соответствуют единицы в маске, является адресом (идентификатором) подсети. Ее еще часто называют словом префикс. А часть, которой соответствуют нули в маске, — идентификатором хоста внутри подсети. Адрес подсети в виде 192.168.8.0/21 или 192.168.8.0 255.255.248.0 можно встретить довольно часто. Именно префиксами оперируют маршрутизаторы, прокладывая маршруты передачи трафика по сети. Про местонахождение хостов внутри подсетей знает только шлюз по умолчанию данной подсети (посредством той или иной технологии канального уровня), но не транзитные маршрутизаторы. А вот адрес хоста в отрыве от подсети не употребляется совсем.


Обстоятельство третье. Количество хостов в подсети определяется как 232-N-2, где N — длина маски. Чем длиннее маска, тем меньше в ней хостов.

Из данного обстоятельства в частности следует, что максимальной длиной маски для подсети с хостами является N=30. Именно сети /30 чаще всего используются для адресации на point-to-point-линках между маршрутизаторами.

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

А вот маска /32 используется достаточно часто. Во-первых, для всяких служебных надобностей при адресации т. н. loopback-интерфейсов, во-вторых, от криворукости: /32 — это подсеть, состоящая из одного хоста, то есть никакая и не сеть, в сущности. Чем чаще администратор сети оперирует не с группами хостов, а с индивидуальными машинами, тем менее сеть масштабируема, тем больше в ней соплей, бардака и никому непонятных правил. Исключением, пожалуй, является написание файрвольных правил для серверов, где специфичность — хорошее дело. А вот с пользователями лучше обращаться не индивидуально, а скопом, целыми подсетями, иначе сеть быстро станет неуправляемой.


Интерфейс, на котором настроен IP-адрес, иногда называют IP-интерфейсом или L3-интерфейсом

(«эл-три», см. Модель OSI ).


Прежде чем посылать IP-пакет, компьютер определяет, попадает ли адрес назначения в «свою» подсеть. Если попадает, то шлет пакет «напрямую», если же нет — отсылает его шлюзу по умолчанию (маршрутизатору). Как правило, хотя это вовсе необязательно, шлюзу по умолчанию назначают первый адрес хоста в подсети: в нашем случае 192.168.8.1 — для красоты.


Обстоятельство четвертое. Из сказанного в частности следует, что маршрутизатор (шлюз и маршрутизатор — это одно и то же) с адресом интерфейса 192.168.8.1 ничего не знает о трафике, передаваемом между, например, хостами 192. 168.8.5 и 192.168.8.7. Очень частой ошибкой начинающих администраторов является желание заблокировать или как-то еще контролировать с помощью шлюза трафик между хостами в рамках одной подсети. Чтобы трафик проходил через маршрутизатор, адресат и отправитель должны находиться в разных подсетях.

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


Следующий шаг — разбиение подсетей на более мелкие подсети. Полюбившуюся нам сеть 192.168.8.0/21 можно разбить на 2 подсети /22, четыре подсети /23, восемь /24 и т. д. Общее правило, как не сложно догадаться, такое: K=2X-Y, где K — количество подсетей с длиной маски Y, умещающихся в подсеть с длиной маски X.


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


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


Обстоятельство шестое. Чем больше длина маски, тем меньше в подсети может быть хостов, и тем большую долю занимает «съедение» адресов на адреса подсети, направленного бродкаста и шлюза по умолчанию. В частности в подсети с маской /29 (232-29 = 8 комбинаций) останется всего 5 доступных для реального использования адресов (62,5%). Теперь представьте, что вы провайдер, выдающий корпоративным клиентам тысячи блоков /29. Таким образом, грамотное разбиение IP-пространства на подсети (составление адресного плана) — это целая маленькая наука, включающая поиск компромиссов между разными сложными факторами.


При наличии достаточно большого диапазона адресов, как правило из блоков для частного использования 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16, конечно, удобно использовать маски, совпадающие по длине с границами октетов: /8, /16, /24 или, соответственно, 255.0.0.0, 255.255.0.0 и 255.255.255.0. При их использовании можно облегчить работу мозгу и калькулятору, избавившись от необходимости работать с двоичной системой и битами. Это правильный подход, но не стоит забывать, что злоупотребление расслабухой редко доводит до добра.


И последнее. Пресловутые классы адресов. Дорогие товарищи, забудьте это слово вообще! Совсем. Вот уже скоро 20 лет (!), как нет никаких классов. Ровно с тех пор, как стало понятно, что длина префикса может быть любой, а если раздавать адреса блоками по /8, то никакого интернета не получится.


Иногда «матерые специалисты» любят блеснуть словами «сеть класса такого-то» по отношению к подсети с той или иной длиной маски. Скажем, часто можно услышать слово «сеть класса C» про что-нибудь вроде 10.1.2.0/24. Класс сети (когда он был) не имел никакого отношения к длине маски и определялся совсем другими факторами (комбинациями битов в адресе). В свою очередь классовая адресация обязывала иметь маски только предписанной для данного класса длины. Поэтому указанная подсеть 10.1.2.0/24 никогда не принадлежала и не будет принадлежать к классу C.


Но обо всем этом лучше и не вспоминать. Единственное, что нужно знать — что существуют разные глобальные конвенции, собранные под одной крышей в RFC3330, о специальных значениях тех или иных блоков адресов. Так, например, упомянутые блоки 10/8, 172.16/12 и 192.168/16 (да, можно и так записывать префиксы, полностью откидывая хостовую часть) определены как диапазоны для частного использования, запрещенные к маршрутизации в интернете. Каждый может использовать их в частных целях по своему усмотрению. Блок 224.0.0.0/4 зарезервирован для мультикаста и т. д. Но все это лишь конвенции, призванные облегчить административное взаимодействие. И хотя лично я крайне не рекомендую вам их нарушать (за исключением надежно изолированных лабораторных тестов), технически никто не запрещает использовать любые адреса для любых целей, покуда вы не стыкуетесь с внешним миром.

Концепция IP-адресов на примере Python-модуля ipaddress

В самом грубом представлении IP-адрес – это просто число. В случае протокола IPv4 IP-адрес– это 32-разрядное целое число, используемое для представления
хоста в сети. То есть существует 232
возможных IPv4 адреса – от 0 до 4 294 967 295. IPv4-адреса записывают в виде четырех октетов – целых чисел, разделенных точками:

220.14.9.37
    

Каждый октет – это один байт, число от 0 до 255. То есть максимальный адрес равен
255.255.255.255, а минимальный – 0.0.0.0.

Далее мы рассмотрим, как
модуль ipaddress выполняет преобразования адреса так, что нам не приходится отвлекаться на строение адреса.

Примечание

Модуль ipaddress добавлен в стандартную библиотеку в версии Python 3.3, примеры туториала проверены на примере Python 3.8. Пользователь matyushkin любезно адаптировал программный код статьи в виде конспективного Jupyter-блокнота. За счёт этого с кодом можно поиграть в среде Colab.

Получим внешний IP-адрес нашего
компьютера для работы с ним в командной строке. В Linux это делается так:

$ curl -sS ifconfig.me/ip
220.14.9.37
    

Этот запрос узнает наш
IP-шник на сайте ifconfig.me. Сайт также выдает множество другой полезной информации о вашем сетевом подключении.

Примечания

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

Теперь откроем интерпретатор Python. Чтобы создать объект Python с инкапсулированным адресом, создадим класс IPv4Address:

>>> from ipaddress import IPv4Address
>>> addr = IPv4Address("220.14.9.37")
>>> addr
IPv4Address('220.14.9.37')
    

Передача строки "220.14.9.37"
в конструктор IPv4Address – наиболее распространенный подход, но класс может
принимать и другие типы:

>>> IPv4Address(3691907365)   # Из целого числа
IPv4Address('220.14.9.37')
>>> IPv4Address(b"\xdc\x0e\t%")  # Из байтовой строки
IPv4Address('220. 14.9.37')
    

Адрес можно распаковать в требуемую форму:

>>> int(addr)
3691907365
>>> addr.packed
b'\xdc\x0e\t%'
    

Экземпляры IPv4Address являются хэшируемыми и могут использоваться в качестве
ключей словаря:

>>> hash(IPv4Address("220.14.9.37"))
4035855712965130587
>>> num_connections = {
...     IPv4Address("220.14.9.37"): 2,
...     IPv4Address("100.201.0.4"): 16,
...     IPv4Address("8.240.12.2"): 4,
... }
    

Класс IPv4Address также реализует
методы, позволяющие проводить сравнения:

>>> IPv4Address("220.14.9.37") > IPv4Address("8.240.12.2")
True
>>> addrs = (
...     IPv4Address("220.14.9.37"),
...     IPv4Address("8.240.12.2"),
...     IPv4Address("100.201.0.4"),
... )
>>> for a in sorted(addrs):
. ..     print(a)
...
8.240.12.2
100.201.0.4
220.14.9.37
    

Можно использовать
любой стандартный оператор сравнения целочисленных значений
адресных объектов.

Сеть – это набор
IP-адресов. Сети описываются и отображаются как непрерывные диапазоны адресов.
Например, сеть может соответствовать диапазону 192.4.2.0192.4.2.255, т. е.
включать 256 адресов. Если нужно это отобразить в краткой форме, используется нотация CIDR.

В CIDR сеть
определяется с помощью сетевого адреса и префикса <network_address>/<prefix>:

>>> from ipaddress import IPv4Network
>>> net = IPv4Network("192.4.2.0/24")
>>> net.num_addresses
256
# Вывести префикс можно с помощью свойства prefixlen:
>>> net.prefixlen
24
    

В данном случае префикс равен 24. Префикс – это количество ведущих битов, соответствующих входящим в сеть адресам. Ведущие биты отсчитываются слева направо.

Пример: входит ли
адрес 192.4.2.12 в сеть 192.4.2.0/24?

Ответ: да, так как ведущие 24 бита адреса 192.4.2.12 – это первые три октета: 192.4.2. Последний октет соответствует последним 8 битам 32-битного IP-адреса.

Воспользуемся netmask для маскирования
битов в сравниваемых
адресах.

Определение

Битовая маска – данные, которые используются для маскирования – выбора отдельных битов или полей из нескольких битов из двоичной строки или числа.

>>> net.netmask
IPv4Address('255.255.255.0')
    

На рисунке ниже показано, как сравниваются ведущие
биты, чтобы определить, является ли адрес частью сети.

Побитовое сравнение

Последние 8 бит в
192.4.2.12 маскируются нулем и игнорируются при сравнении.

>>> IPv4Address("192.4.2.12") in net
True
>>> IPv4Address("192.4.20.2") in net
False
    

Рассмотрим еще один
важный тип адреса – широковещательный.

Определение

Широковещательный адрес – условный (не присвоенный никакому устройству в сети) адрес, который используется для передачи широковещательных пакетов в компьютерных сетях.

Это единственный адрес, который может использоваться
для связи со всеми хостами сети:

>>> net.network_address
IPv4Address('192.4.2.0')
    

Чаще всего вы будете сталкиваться
с длиной префикса кратной 8.

Распространенные подсети

Любое целое число от 0
до 32 является допустимым, но такой вариант встречается реже:

>>> net = IPv4Network("100. 64.0.0/10")
>>> net.num_addresses
4194304
>>> net.netmask
IPv4Address('255.192.0.0')
    

Класс IPv4Network позволяет
перебирать отдельные адреса в цикле for:

>>> net = IPv4Network("192.4.2.0/28")
>>> for addr in net:
...     print(addr)
...
192.4.2.0
192.4.2.1
192.4.2.2
...
192.4.2.13
192.4.2.14
192.4.2.15
    

Инструмент
net.hosts() возвращает генератор, выдающий адреса, исключая сетевые и
широковещательные:

>>> h = net.hosts()
>>> type(h)
<class 'generator'>
>>> next(h)
IPv4Address('192.4.2.1')
>>> next(h)
IPv4Address('192.4.2.2')
    

Подсеть – это часть IP-сети:

>>> small_net = IPv4Network("192.0.2.0/28")
>>> big_net = IPv4Network("192.0.0.0/16")
>>> small_net. subnet_of(big_net)
True
>>> big_net.supernet_of(small_net)
True
    

В коде выше small_net
содержит 16 адресов, а big_net – 65 536.

Распространенный способ
разбиения на подсети – это увеличение длины префикса на 1:

Разбиение сети

К счастью, IPv4Network расчеты подсетей поддерживаются встроенным методом subnets():

>>> for sn in net.subnets():
...     print(sn)
...
200.100.10.0/25
200.100.10.128/25
    

В передаваемом subnets() аргументе можно задать, каким должен быть новый префикс:

>>> for sn in net.subnets(new_prefix=28):
...     print(sn)
...
200.100.10.0/28
200.100.10.16/28
200.100.10.32/28
...
200.100.10.208/28
200.100.10.224/28
200.100.10.240/28
    

Администрация адресного пространства Интернет (Internet Assigned
Numbers Authority, IANA) совместно с Инженерном советом Интернета (Internet
Engineering Task Force, IETF) осуществляют
надзор за распределением диапазонов адресов. Реестр подобных адресов –
важная таблица, которая описывает, для каких целей зарезервированы диапазоны IPv4-адресов.

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

Зарезервированные диапазоны

Случайным образом выберем
адрес – 10.243.156.214. Относится ли этот адрес к приватным? Для этого проверим, попадает ли он в диапазон cети 10.0.0.0/8:

>>> IPv4Address("10.243.156.214") in IPv4Network("10.0.0.0/8")
True
    

Другой специальный тип
адреса – это локальный адрес связи, состоящий из блока 169.254.0.0/16. Примером
может служить Amazon Time Sync Service, доступный для инстансов AWS EC2 по адресу
169.254.169.123. Данный пул также использует Windows для
выдачи адресов сетевым адаптерам при отсутствии интернета от провайдера.

>>> timesync_addr = IPv4Address("169.254.169.123")
>>> timesync_addr.is_link_local
True
    

Модуль ipaddress
предоставляет набор свойств
для проверки того, относится ли адрес к специальным:

>>> IPv4Address("10.243.156.214").is_private
True
>>> IPv4Address("127.0.0.1").is_loopback
True
>>> [i for i in dir(IPv4Address) if i.startswith("is_")]
['is_global',
 'is_link_local',
 'is_loopback',
 'is_multicast',
 'is_private',
 'is_reserved',
 'is_unspecified']
    

Вот еще несколько
зарезервированных сетей:

  • 0.0.0.0/8 – адреса источников пакетов «своей» сети;
  • 127.0.0.0/8 – используется для локального хоста;
  • 169.254.0.0/16 – внутренние адреса;
  • 198.18.0.0/15 – для бенчмаркинга сетей.

В дополнение к хорошо документированному
API, исходный код CPython
и класс IPv4Address
показывают некоторые отличные идеи, как улучшить собственный код.

Компоновщик

Модуль ipaddress
использует преимущества шаблона проектирования «Компоновщик». Класс IPv4Address представляет собой компоновщик, который оборачивает обычное целое число.

Каждый экземпляр
IPv4Address имеет атрибут _ip, число типа int. Многие свойства и методы класса определяются
значением этого атрибута:

>>> addr = IPv4Address("220.14.9.37")
>>> addr._ip
3691907365
    

Атрибут _ip отвечает
за создание int(addr). Цепочка вызовов выглядит следующим образом:

Цепочка вызовов в компоновщике

Продемонстрируем силу . _ip путем расширения класса IPv4Address:

from ipaddress import IPv4Address
class MyIPv4(IPv4Address):
    def __and__(self, other: IPv4Address):
        if not isinstance(other, (int, IPv4Address)):
            raise NotImplementedError
        return self.__class__(int(self) & int(other))
    

Добавление .__and__()
позволяет использовать бинарный оператор &, чтобы применять маску к
IP-адресу:

>>> addr = MyIPv4("100.127.40.32")
>>> mask = MyIPv4("255.192.0.0")  # Соответствует префиксу /10
>>> addr & mask
MyIPv4('100.64.0.0')
>>> addr & 0xffc00000  # hex-литерал для 255.192.0.0
MyIPv4('100.64.0.0')
    

Метод __and__()
позволяет использовать либо другой IPv4Address, либо непосредственно int в
качестве маски. Поскольку MyIPv4 является подклассом IPv4Address, проверка
isinstance() в данном случае вернет True. 01]», «», binary_repr), 2) (строка 14) состоит
из двух частей:

  • удаление из входящей строки всего, кроме нулей и единиц;
  • анализ результата с помощью int(<string>, 2).

Методы binary_repr() и from_binary_repr() позволяют проводить двустороннюю конвертацию:

>>> MyIPv4("220.14.9.37").binary_repr
'11011100.00001110.00001001.00100101'
>>> MyIPv4("255.255.0.0").binary_repr  # Маска для префикса /16 
'11111111.11111111.00000000.00000000'
>>> MyIPv4.from_binary_repr("11011100 00001110 00001001 00100101")
MyIPv4('220.14.9.37')
    

Таким образом, мы разобрали несколько способов
использования преимуществ шаблона IP-as-integer, который может помочь расширить
функциональность IPv4Address с небольшим количеством дополнительного кода.

Заключение

Если вам нравится язык Python и вы хотите детально овладеть стандартной библиотекой, у нас есть множество родственных публикаций:

  • Как хранить объекты Python со сложной структурой (о модуле pickle)
  • Итерируем правильно: 20 приемов использования в Python модуля itertools
  • Не изобретать велосипед, или Обзор модуля collections в Python
  • Назад в будущее: практическое руководство по путешествию во времени с Python
  • Как подружить Python и базы данных SQL. Подробное руководство

Формат IP-адреса и таблица

следующий →
← предыдущая

IP-адрес — это сокращенная форма «Адрес интернет-протокола». Это уникальный номер, присваиваемый каждому устройству, подключенному к сети Интернет, например телефону Android, ноутбуку, Mac и т. д. IP-адрес представлен целым числом, разделенным точкой (.), например, 192.167.12.46.

Типы IP-адресов

IP-адрес подразделяется на два разных типа в зависимости от количества содержащихся в нем IP-адресов. Это:

  • IPv4 (интернет-протокол версии 4)
  • IPv6 (интернет-протокол версии 6)

Что такое IPv4?

IPv4 — это версия 4 IP. Это текущая версия и наиболее часто используемый IP-адрес. Это 32-битный адрес, записанный четырьмя числами, разделенными точкой (.), т. е. точками. Этот адрес уникален для каждого устройства. Например, 66.94.29.13

Что такое IPv6?

IPv4 выдаёт 4 миллиарда адресов, и разработчики думают, что этих адресов достаточно, но ошиблись. IPv6 — это следующее поколение IP-адресов. Основное различие между IPv4 и IPv6 заключается в размере IP-адресов. IPv4 — это 32-битный адрес, а IPv6 — 128-битный шестнадцатеричный адрес. IPv6 предоставляет большое адресное пространство и содержит простой заголовок по сравнению с IPv4.

Чтобы узнать больше о разнице между IPv4 и IPv6, ознакомьтесь с нашей статьей ipv4 и ipv6.

Формат IP-адреса

Первоначально IP-адреса были разделены на пять различных категорий, называемых классами . Эти разделенные классы IP: класс A, класс B, класс C, класс D и класс E. Из них классы A, B и C являются наиболее важными. Каждый класс адресов определяет разное количество битов для своего префикса сети (сетевого адреса) и номера хоста (адреса хоста) . Биты начального адреса определяют, к какому классу принадлежит адрес.

Сетевой адрес: Сетевой адрес указывает уникальный номер, присвоенный вашей сети. На приведенном выше рисунке сетевой адрес занимает два байта IP-адреса.

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

Формат адреса IPv4

Формат адреса IPv4 представлен в виде 4 октетов (32 бита), которые делятся на три разных класса, а именно класс A, класс B и класс C.

На приведенной выше диаграмме показан формат адреса IPv4. IPv4 — это 32-битный десятичный адрес. Он содержит четыре октета или поля, разделенные «точкой», и каждое поле имеет размер 8 бит. Число, которое содержит каждое поле, должно находиться в диапазоне от 0 до 255.

Класс А

Адрес класса A использует только первый октет (байт) более высокого порядка для идентификации префикса сети, а оставшиеся три октета (байта) используются для определения адресов отдельных узлов. Адрес класса A находится в диапазоне от 0.0.0.0 до 127.255.255.255. Первый бит первого октета всегда равен 0 (ноль), следующие 7 бит определяют сетевой адрес, а оставшиеся 24 бита определяют адрес хоста. Таким образом, первый октет находится в диапазоне от 0 до 127 (от 00000000 до 01111111).

Класс Б

Адреса класса B используют первые два октета (два байта) для идентификации префикса сети, а оставшиеся два октета (два байта) определяют адреса узлов. Адреса класса B находятся в диапазоне от 128.0.0.0 до 191.255.255.255. Первые два бита первого старшего октета всегда равны 10 (единичный и нулевой бит), следующие 14 бит определяют сетевой адрес, а оставшиеся 16 бит определяют адрес узла. Таким образом, первый октет находится в диапазоне от 128 до 191 (от 10000000 до 10111111).

Класс С

Адреса класса C используют первые три октета (три байта) для идентификации префикса сети, а оставшийся последний октет (один байт) определяет адрес хоста. Адрес класса C находится в диапазоне от 192.0.0.0 до 223.255.255.255. Первые три бита первого октета всегда равны 110, следующие 21 бит определяют сетевой адрес, а оставшиеся 8 бит определяют адрес хоста. Его первый октет находится в диапазоне от 192 до 223 (от 11000000 до 11011111).

Класс D

Класс D IP-адрес зарезервирован для групповых адресов. Его первые четыре бита первого октета всегда установлены на 1110, а остальные биты определяют адрес хоста в любом IP-адресе. Первые старшие биты октета всегда равны 1110, а остальные биты определяют адрес хоста. Адрес класса D находится в диапазоне от 224.0.0.0 до 239.255.255.255. При многоадресной рассылке данные не назначаются какой-либо конкретной хост-машине, поэтому не требуется находить адрес хоста по IP-адресу, а также в классе D отсутствует маска подсети.

Класс Е

IP-адрес класса E зарезервирован для экспериментальных целей и использования в будущем. В нем нет маски подсети. Первые старшие биты октета всегда равны 1111, а следующие оставшиеся биты определяют адрес хоста. Адрес класса E находится в диапазоне от 240.0.0.0 до 255.255.255.255.

В каждом классе IP-адресов все биты номера хоста задаются степенью двойки, которая указывает общее количество адресов хостов, которые могут быть созданы для определенного сетевого адреса. Адрес класса A может содержать не более 2 24 (16 777 216) номера узлов. Адреса класса B содержат максимальное количество 2 16 (65, 536) номеров хостов. А класс C содержит максимальное количество 2 8 (256) номеров хостов.

Адрес подсети IP-адреса, понять на примере:

Предположим, адрес класса A — 11.65.27.1, где 11 — сетевой префикс (адрес), а 65.27.1 указывает конкретный адрес узла в сети. Учтите, что сетевой администратор хочет использовать от 23 до 6 бит для идентификации подсети, а оставшиеся от 5 до 0 бит — для определения адреса хоста. Его можно представить в виде Маска подсети со всеми битами 1 от 31 до 6 и оставшимися (от 5 до 0) битами 0.

Маска подсети (двоичная): 11111111 11111111 11111111 11000000

IP-адрес (двоичный): 00001011 01000001 00011011 00000001

Теперь подсеть можно рассчитать, применив операцию И (1+1=1, 1+0=0, 0+1=0, 0+0=0) между полным IP-адресом и маской подсети. Результат:

00001011 01000001 00011011 00000000 = адрес подсети 11.65.27.0

Формат IP-адреса IPv6

Все адреса IPv6 представляют собой 128-битные шестнадцатеричные адреса, записанные в 8 отдельных разделах, каждый из которых имеет 16 бит. Поскольку адреса IPv6 представлены в шестнадцатеричном формате, их разделы варьируются от 0 до FFFF. Каждый раздел отделяется двоеточием (:). Это также позволяет удалить начальные нули (0) каждой 16-битной секции. Если два или более последовательных 16-битных раздела содержат все нули (0 : 0), они могут быть сжаты с использованием двойных двоеточий (::).

адресов IPv6 состоят из 8 различных разделов, каждый раздел имеет 16-битные шестнадцатеричные значения, разделенные двоеточием (:). Адреса IPv6 представлены в следующем формате:

хххх : хххх : хххх : хххх : хххх : хххх : хххх : хххх

Каждая группа «xxxx» содержит 16-битное шестнадцатеричное значение, а каждый «x» — 4-битное шестнадцатеричное значение. Например:

FDEC: BA98: 0000: 0000: 0600: BDFF: 0004: FFFF

Вы также можете удалить начальные нули (0) каждой 16-битной секции. Например, приведенный выше IPv6 можно переписать, опуская начальные нули (0), следующим образом:

.

FDEC : BA98 : 0 : 0 : 600 : BDFF : 4 : FFFF

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

FDEC : BA98 : : 600 : BDFF : 4 : FFFF

Таблица IP-адресов

На основе диапазонов IP-адреса подразделяются на пять классов адресов, которые приведены ниже.

Класс Старшие биты Биты сетевого адреса Биты адреса хоста Количество сетей Количество хостов в сети Диапазон
А 0 8 24 2 7 2 24 от 0. 0.0.0 до 125.255.255.255
Б 10 16 16 2 14 2 16 от 128.0.0.0 до 191.255.255.255
С 110 24 8 2 21 2 8 от 192.0.0.0 до 223.255.255.255
Д 1110 Не определено и зарезервировано на будущее Не определено и зарезервировано на будущее Не определено и зарезервировано на будущее Не определено и зарезервировано на будущее 224.0.0.0 – 239.255.255.255
Е 1111 Не определено и зарезервировано на будущее Не определено и зарезервировано на будущее Не определено и зарезервировано на будущее Не определено и зарезервировано на будущее 240.0.0.0 до 255.255.255.255

Следующая темаРазница между топологией шины и топологией кольца

← предыдущая
следующий →

Понимание адреса IPv4.

IP-адреса (интернет-протокола) действуют как… | by Bikram

3 min read

·

30 июня 2021 г.

IP-адреса (интернет-протокола) служат идентификатором для конкретной машины в конкретной сети.

  • IPv4-адреса представляют собой набор из четырех чисел — например, адрес может быть 19.2.158.1.38.
  • Каждый номер содержит от одной до трех цифр, разделенных одной точкой (.)
  • Каждое число в наборе может находиться в диапазоне от 0 до 255. Таким образом, полный диапазон IPv4-адресации идет от 0.0.0.0 до 255.255.255.255
  • адресов IPv4 имеют длину 32 бита (4 байта), а максимальное значение 32-битного числа составляет 2³²=4 294 967 296. Таким образом, максимальное количество адресов IPv4 составляет около 4,3 миллиарда.

32-битный IP-адрес делится на пять подклассов.

  • Класс A, Класс B, Класс C, Класс D, Класс E.
  • Обычно используются классы A, B, C, класс D используется только для многоадресной рассылки, а класс E зарезервирован исключительно для экспериментальных целей.

Сеть класса A:

  • Диапазон IP-адресов (1–127) от 1.0.0.1 до 126.255.255.254
  • Пример адреса класса A: 102.168.212.22 6.
  • Здесь «102» помогает идентифицировать сеть, а 168.212.226 определяет хост.
  • Поддерживает 16 миллионов (2²⁴) хостов в каждой из 127 сетей.
  • Используется для большого количества хостов.

Сеть класса B:

  • Диапазон IP-адресов (от 128 до 191) от 128.1.0.1 до 191.255.255.254
  • Пример IP-адреса класса B: 168.212. 226.204.
  • Здесь «168.212» определяет сеть, а «226.204» помогает определить сетевой узел.
  • Поддерживает 65 000 (2¹⁶) хостов в каждой из 16 000 сетей.
  • Используется для сетей среднего размера.

Сеть класса C:

  • Диапазон IP-адресов (от 192 до 223) от 192.0.1.1 до 223.255.254.254
  • Пример IP-адреса класса C: 192.168.1 78.67
  • Здесь «192. 168.178» означает сети, а «67» поможет вам идентифицировать сетевой хост.
  • Поддерживает 254 хоста в каждой из 2 миллионов сетей.
  • Используется для локальной сети.

Сеть класса D:

  • Диапазон IP-адресов (от 224 до 239) от 224.0.0.0 до 239.255.255.255
  • Пример IP-адреса класса D: 227.21.6.173
  • Зарезервирован для многозадачности и никогда не используется для обычных сетевых операций.

Сеть класса E:

  • Диапазон IP-адресов (от 240 до 254) от 240.0.0.0 до 254.255.255.254
  • Пример IP-адреса класса E: 243.164. 89.28
  • Зарезервировано для будущего использования или исследований и в целях разработки

Структура IPv4-адреса

Двоичное представление IP-адреса: 255.255.255.255

Из приведенного выше рисунка видно, что

  • IPv4-адреса всегда имеют десятичный формат, который люди могут читать и запоминать, а IP-адреса в двоичном формате понятны компьютерам.