Почему у нас нет пригодного для использования IP-адреса в диапазоне 127.0.0.0?

Почему у нас нет пригодного для использования IP-адреса в диапазоне 127.0.0.0?

Теоретически каждая часть IP-адреса представляет собой число от 0 до 255 (всего 256 используемых слотов).

Но почему 0в четвертой части IP-адресов не используется , а при расчетах IP-адресов они всегда начинаются с 1?

Например:

127.0.0.1 <=== logically this should start from 0 as the first usable IP address.
192.168.0.1 <=== for example even default router IP address is set to 1 rather than to be 0
10.10.0.1
.
.

Почему 0слот в последней части всегда пропускается?

решение1

Но почему в четвертой части IP-адресов не используется 0, а вычисления IP-адресов всегда начинаются с 1?

С уважением кзаголовоквашего вопроса, по крайней мере под Linux, 127.0.0.0является совершенно полезным адресом (который, как и любой другой 127.*адрес, сопоставляется с интерфейсом обратной связи).

Например, я могу запустить веб-сервер на 127.0.0.0:8080:

docker run -d --rm --hostname node1 --name node1 -p 127.0.0.0:8080:8080 alpine \
  sh -c "apk add --update darkhttpd; mkdir /srv; hostname > /srv/index.html; darkhttpd /srv --port 8080"

А затем начните еще один, связанный с 127.0.0.1:8080:

docker run -d --rm --hostname node2 --name node2 -p 127.0.0.1:8080:8080 alpine \
  sh -c "apk add --update darkhttpd; mkdir /srv; hostname > /srv/index.html; darkhttpd /srv --port 8080"

И теперь я могу получить доступ к этим серверам по их соответствующим адресам:

$ curl 127.0.0.0:8080
node1
$ curl 127.0.0.1:8080
node2

решение2

В IPv4 первый адрес подсети зарезервирован по...неясным причинам, на самом деле, но, скорее всего, потому чтоочень давноРаньше это был «широковещательный» адрес. (Позже последний адрес стал стандартным широковещательным адресом.)

Таким образом, в настоящее время технически возможно использовать первый адрес, но большинство существующих сетевых стеков по-прежнему считают его «зарезервированным» (что-то вроде того, как все пространство бывшего «класса E» 240.0.0.0/4 случайно стало непригодным для использования).

Обратите внимание, что это именнопервый адрес подсети,и не всегда 0адрес. Они совпадают только в случае подсети /24. Но, например, подсеть /16 будет иметь .0.0зарезервированный, нонет .1.0или .47.0– они находятся в середине /16, поэтому это совершенно допустимые адреса хостов.

(С другой стороны, меньшая подсеть /27 может начинаться не только с , .0но и с .32или .192– они снова будут зарезервированы в /27, даже если они не зарезервированы в /24.)

Также обратите внимание, что это применимо только к широковещательным подсетям (например, Ethernet). Такие адреса по-прежнему могут использоваться в соединениях точка-точка или маршрутизироваться индивидуально как /32.

решение3

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

Обновлять:Нет ничего магического в том, что он заканчивается на «.0», просто это самый низкий адрес в подсети (который не всегда может быть .0).

Первоначально IPv4 был классовым и делился на 5 классов: A, B, C, D и E. Сети класса A — это все IP-адреса, у которых самый старший значащий бит равен 0 или, другими словами, IP-адреса от 0.0.0.0 до 127.255.255.255. Адреса IPv4, у которых два верхних бита равны 10, относятся к классу B, что соответствует адресам от 128.0.0.0 до 191.255.255.255. Класс C начинается с 110xxxxx в первом октете или адресам от 192.0.0.0 до 223.255.255.255. Класс D имеет первый октет, соответствующий 1110xxxx, что дает им IP-адреса от 224.0.0.0 до 239.0.0.0. Наконец, класс E — это 1111xxxx или IP-адреса от 240.0.0.0 до 255.255.255.255. Адреса класса E считаются зарезервированными и не имеют определенного использования, за исключением 255.255.255.255. Класс D — это многоадресные адреса, используемые для отправки пакетов группам компьютеров вместе. Классы AC — это ваши обычные одноадресные IP-адреса, где отдельные устройства получают IP в некоторой сети.

С учетом сказанного, размер каждой сети определяет ее класс. Сети класса A определяются так, что первые 8 бит или первый октет являются сетевой частью адреса, а остальные 24 бита являются специфичной для хоста частью адреса в одной сети IPv4. Класс B разделяет его на 16 бит и 16 бит или 2 октета каждый. Сети класса C используют первые 24 бита как сетевую часть и последние 8 бит как хостовую часть. Говоря современным языком, сеть класса A имеет подсеть /8, класс B — подсеть /16, а класс C — подсеть /24. Разделение между сетевой и хостовой частью адреса IPv4 важно для маршрутизации пакетов и является тем, как любое устройство решает, может ли оно отправить его напрямую в систему в локальной сети или ему нужно отправить его на маршрутизатор для пересылки в другое место. До того, как сетевые стеки и протоколы IPv4 реализовали подсети, это различие было жестко запрограммировано в самом IP.

Вы можете увидеть остатки этого в протоколах, таких как протокол маршрутизации RIPv1. Он объявляет только IP-адреса, а не маски подсети, поэтому различие между адресом хоста и сетевым адресом было ключевым. Если адрес RIPv1 объявлял адрес 192.0.0.0, то это самый низкий адрес в сети класса B, поэтому это сетевой адрес для всей этой сети. Он сообщал бы другим устройствам, что все системы от 192.0.0.0 до 192.0.255.255 доступны по этому маршруту (поскольку класс B использует первые два октета для сети, 192.0 в этом примере). Однако, если он объявлял 192.0.0.1, то это не самый низкий адрес в этой сети, поэтому это адрес хоста. Это означает, что RIPv1 объявляет маршрут для одного конкретного хоста, а не для всей сети. Возможно, это модем коммутируемой линии или есть какая-то другая причина получить уникальный маршрут, но это объявление касается только этого одного хоста.

Теперь, когда подсети стали обычным явлением, а новые протоколы, такие как RIPv2, отправляют маску подсети вместе с IP, вся концепция сетевого адреса немного избыточна, но мы застряли с ней по историческим причинам. Маршрут, специфичный для хоста, может быть объявлен с маской подсети 255.255.255.255, но нам все равно придется поддерживать совместимость с программным обеспечением, которое предполагает, что сетевой адрес присутствует в нижней части сетевого диапазона.

Обновлять:Для дальнейшего пояснения приведем несколько примеров. Если бы вы разделили диапазон IP-адресов 10.xxx на подсети /26, то каждая подсеть получила бы 64 общих адреса (62 из которых можно использовать для хостов), поскольку для хостовой части осталось бы только 6 бит из 32-битного IP. Первые пять сетевых адресов подсети были бы 10.0.0.0, 10.0.0.64, 10.0.0.128, 10.0.0.192 и 10.0.1.0. Их широковещательные адреса по умолчанию были бы наивысшим адресом в подсети и соответствовали бы 10.0.0.63, 10.0.0.127, 10.0.0.191 и 10.0.1.63 соответственно. Если бы вместо этого использовалась подсеть /23, каждая сеть имела бы 512 адресов (510 из которых можно использовать). Первые пять подсетей — 10.0.0.0, 10.0.2.0, 10.0.4.0 и 10.0.6.0. Соответствующие широковещательные адреса — 10.0.1.255, 10.0.3.255, 10.5.255 и 10.7.255. Обратите внимание, что в этом последнем примере 10.0.1.0, 10.0.3.0 и т. д. не являются сетевыми адресами. Они прекрасно подходят для использования в качестве обычных IP-адресов для хостов, поскольку находятся в середине диапазона подсети. Только самые первый и последний адреса являются специальными. 10.0.0.255 также можно использовать в качестве обычного хоста.

решение4

В IPv4 любой IP, заканчивающийся на .0, означает, что это (адрес сети по умолчанию) при использовании префикса /24. Вы не можете использовать этот адрес и назначить его компьютеру. «Разрешенные» IP-адреса для назначения находятся в диапазоне от .1 до .254. Вы также не можете использовать .255, поскольку он используется как «широковещательный» адрес для сети.

Связанный контент