Кажется обычной практикой не использовать первый адрес в подсети, то есть IP-адрес. 192.168.0.0/24
, или более экзотическим примером будет 172.20.20.64/29
.
В ipcalc
инструмент, который я часто использую, следует той же практике:
$ ipcalc -n -b 172.20.20.64/29
Address: 172.20.20.64
Netmask: 255.255.255.248 = 29
Wildcard: 0.0.0.7
=>
Network: 172.20.20.64/29
HostMin: 172.20.20.65
HostMax: 172.20.20.70
Broadcast: 172.20.20.71
Hosts/Net: 6 Class B, Private Internet
Но почему это HostMin
это не просто 64
в таком случае? В 64
адрес действительный адрес, верно? И каков бы ни был ответ, применимо ли то же самое к IPv6?
Возможно, немного связано: также кажется возможным использовать TCP-порт 0 и UDP-порт 0. Они действительны или где-то используются?
Я знаю, что это старый поток, но я исследовал это сам и не остановился на том, что «нулевой хост не используется, потому что это номер сети», потому что я не мог понять, почему это имеет значение. Даже если это номер сети, он не должен останавливать его использование в качестве действительного адреса, поскольку механизм определения номера сети (операция AND над маской сети) все равно будет работать с ним для определения номера сети.
Не использовать универсальный адрес хоста, потому что он совпадает с широковещательным адресом, который мне удобен, поскольку это уже действительный адрес назначения, поэтому при его использовании было бы невозможно различить их.
Более подробно объясненная причина, по которой мы не можем использовать нулевой хост, заключается в том, что это также широковещательный адрес, хотя RFC1812 раздел 4.2.3.1 заявляет, что маршрутизатор, получающий адресованные ему пакеты, «ДОЛЖЕН молча отбрасывать» их (их акцент - не мой). Однако тот же параграф разрешает рассматривать эти пакеты как широковещательные.
Вот полный подраздел
(2) SHOULD silently discard on receipt (i.e., do not even deliver to
applications in the router) any packet addressed to 0.0.0.0 or {
<Network-prefix>, 0 }. If these packets are not silently
discarded, they MUST be treated as IP broadcasts (see Section
[5.3.5]). There MAY be a configuration option to allow receipt
of these packets. This option SHOULD default to discarding
them.
Потому что первый адрес в подсети относится к самой подсети и используется для целей маршрутизации.
Как указали Уэсли, Чоппер3 и Вилли, в современном соглашении для подсети используется первый адрес (номер хоста, состоящий только из нулей), а в качестве широковещательного адреса - последний адрес (номер хоста, состоящий из всех единиц).
По историческим причинам многие операционные системы обрабатывают первый адрес как широковещательный. Например, проверка связи x.x.x.0 из OS X, Linux и Solaris в моей локальной (/ 24) сети дает ответы. Windows не позволяет вам пинговать первый адрес по умолчанию, но вы можете включить его с помощью метода SetIPUseZeroBroadcast WMI. Интересно, могли бы вы обойтись без использования .0 в качестве адреса хоста во всей сети Windows.
На заре интернета x.x.x.0 использовался в качестве широковещательного адреса для сети. Позже он был изменен на x.x.x.255. Я помню, что в SunOS были опции для настройки широковещания либо как .0, либо .255 в течение этого периода. Поэтому я полагаю, что для безопасности .0 и .255 всегда были зарезервированными числами.
Первое число в подсети - это адрес самой сети. поэтому 192.168.0.0/24 - это номер, который используется для обозначения этой подсети. Конечно, последний адрес - это широковещательный адрес, на который отправляются широковещательные сообщения, а затем передаются всем клиентам в этой подсети. В IP-сети вы всегда удаляете 2 из широковещательного адреса, чтобы найти общее количество адресуемых IP-адресов. 192.168.0.0/24 имеет широковещательную рассылку 192.168.0.255 и, следовательно, 253 адресных адреса. 192.168.0.0/26 имеет широковещательную рассылку 192.168.0.64 и, следовательно, 62 адресных адреса.
(Чоп и Вилли опередили меня, но я сварливый и не хочу удалять свой пост. =))
x.x.x.0 (или первый адрес в подсети) - это сетевой адрес, который используется для определения того, какой трафик находится в той же подсети, а какой должен быть перенаправлен в другую сеть.
На каждый блок CIDR приходится два зарезервированных IP-адреса. Один - это сетевой номер, и он будет выключен (бит 0). Другой - это направленная трансляция (широковещательная рассылка по подсети), и в ней для хост-части сети будут заданы все единицы (нечетное число). Вот пример из моего калькулятора подсети:
Network Net Broadcast CIDR Mask UsableHosts
192.168.254.0 192.168.254.31 27 255.255.255.224 30 AVL isPrivate, isClassC
192.168.254.32 192.168.254.47 28 255.255.255.240 14 AVL isPrivate, isClassC
192.168.254.48 192.168.254.55 29 255.255.255.248 6 AVL isPrivate, isClassC
192.168.254.56 192.168.254.59 30 255.255.255.252 2 REQ 2 isPrivate, isClassC
192.168.254.60 192.168.254.63 30 255.255.255.252 2 REQ 2 isPrivate, isClassC
Номер хоста 0 в каждый Подсеть зарезервирована в первую очередь потому, что раньше была широковещательным адресом.
RFC перефразирует следующее: следует отбросить, но в качестве альтернативы использовать в качестве широковещательной передачи, но также можно использовать в качестве номера хоста с помощью некоторой опции, отличной от значения по умолчанию.
Сейчас, октет 0, как в xyz0, вполне может быть совершенно допустимым ненулевым номером хоста CIDR, но в прошлом у него очень редко возникали проблемы на изолированных сайтах из-за ошибок реализации (возможно, оставшегося кода полного класса) в HW или SW сайта .
Сегодня октет 0 работает достаточно хорошо, чтобы его могли назначать интернет-провайдеры и облачные платформы, хотя, несомненно, некоторые службы намеренно не раздают его, основываясь на прошлом опыте.
Достаточно интересно, что все, что потребуется для поддержки хоста 0 на любом конкретном сайте, - это поддержка конкретных устройств, присутствующих в локальной подсети ... после того, как пакет будет агрегирован в восходящем направлении, даже невозможно будет узнать, что он действительно имел (CIDR ) используется хост номер 0. Глобальной сети все равно.
Наконец, если хосты локальной подсети используют номер хоста all-1 для широковещательных рассылок и не используют особый случай номера хоста all-0, вы можете оставить маршрутизатор по умолчанию и иметь локальную «скрытую» станцию. Это может быть полезно для защиты встроенных систем, таких как дешевые потребительские маршрутизаторы, подверженные взлому ...