Адреса IPv4 имеют ширину 32 бита, поэтому размер адресного пространства составляет 2 32 , или 4 294 967 296. Однако это только теоретическая верхняя граница. Это не точное представление всех адресов, которые могут фактически использоваться в общедоступном Интернете.
Для целей этой задачи предполагается, что вся адресация является классной . В действительности, классовое подразделение адресного пространства было заменено CIDR (Бесклассовая междоменная маршрутизация и VLSM (Маскировка подсети переменной длины) , но это игнорируется для этой задачи.
Согласно классной адресной схеме, существует 3 класса:
- Класс А -
0.0.0.0
чтобы127.255.255.255
с/8
NETMASK длиной - Класс B -
128.0.0.0
чтобы191.255.255.255
с/16
NETMASK длиной - Класс C -
192.0.0.0
чтобы223.255.255.255
с/24
NETMASK длиной
Классы D (многоадресная) и E (зарезервированные) также определены, но они не используются для общедоступных одноадресных адресов.
Каждый класс подразделяется на сети в соответствии с маской сети для этого класса.
Таким образом, 3.0.0.0
пример сети класса А. Длина маски подсети для класса А составляет 8, так что полное адресное пространство этой сети , 3.0.0.0
чтобы 3.255.255.255
. Однако первый адрес ( 3.0.0.0
) зарезервирован как сетевой адрес, а последний адрес ( 3.255.255.255
) зарезервирован как широковещательный адрес для этой сети. Таким образом, фактический диапазон используемых адресов 3.0.0.1
для 3.255.255.254
которого составляет 2 24 - 2 (= 16,777,214) весь адрес.
Точно так же 200.20.30.0
пример сети класса C. Длина маски подсети для класса С составляет 24, так что полное адресное пространство этой сети , 200.20.30.0
чтобы 200.20.30.255
. Удаление сети и широковещательные адреса оставляют фактический диапазон используемых адресов 200.20.30.1
для 200.20.30.254
которого составляет 2 8 - 2 (= 254) весь адрес.
Существуют дополнительные ограничения на диапазоны адресов, которые могут использоваться для одноадресной рассылки. Согласно RFC 6890 запрещенные диапазоны:
0.0.0.0/8
- Локальные сети10.0.0.0/8
- Частное использование100.64.0.0/10
- Общее адресное пространство127.0.0.0/8
- петля169.254.0.0/16
- Ссылка Локальная172.16.0.0/12
- Частное использование192.0.0.0/24
- Назначения протокола IETF192.0.2.0/24
- Зарезервировано для использования в документации192.88.99.0/24
- 6to4 эстафета Anycast192.168.0.0/16
- Частное использование198.18.0.0/15
- Бенчмаркинг198.51.100.0/24
- Зарезервировано для использования в документации203.0.113.0/24
- Зарезервировано для использования в документации
Обратите внимание, что в приведенном выше списке используются маски VLSR для эффективного указания диапазона. Во всех случаях, кроме одного, заданная длина маски имеет специфичность, меньшую или равную нормальной длине классной маски для начала диапазона. Таким образом, каждый из этих диапазонов VLSR эквивалентен одной или нескольким классным сетям. Например , 172.16.0.0/12
эквивалентна сети класса B 172.16.0.0
до 172.31.0.0
или диапазон адресов 172.16.0.0
к 172.31.255.255
.
Исключением из этого правила является 100.64.0.0/10
диапазон VLSR, который является более конкретным, чем содержащий 100.0.0.0
диапазон класса A. Таким образом, 100.0.0.0
будет обрабатываться, как и другие диапазоны класса A, за исключением того, что в середине имеется дыра с 4 194 304 адресами. Действительными адресами в этом диапазоне класса А будут 100.0.0.0
до 100.63.255.255
и 100.128.0.0
до 100.255.255.254
, всего 2 24 - 2 22 - 2 (= 12 582 910) адресов.
Цель этой задачи состоит в том, чтобы вывести все IPv4-адреса классов A, B и C одноадресной рассылки, которые могут быть правильно назначены общедоступному узлу Интернета (т.е. исключая адреса, подробно описанные выше).
Вклад не будет дан, и не следует ожидать.
Вывод может быть в любой форме, удобной для вашего языка, например, массив, список, строка с разделителями. Адреса должны выводиться в стандартном десятичном формате с точками.
Порядок вывода не имеет значения.
Встроенные функции, которые специально предоставляют требуемые диапазоны адресов, запрещены. Точно так же запрещены любые методы динамической проверки таблицы маршрутизации BGP (или другого протокола) для общедоступного Интернета.
Численно самый низкий адрес будет, 1.0.0.1
а численно самый высокий будет 223.255.255.254
.
Эта задача аналогична распечатке всех адресов IPv6 , но из-за ограничений должна требоваться нетривиально другая реализация.
@echo off
.