Я знаю, что если у меня есть сеть, 83.23.159.0/24
то у меня есть 254 используемых IP-адреса хоста, потому что:
83.23.159.0 (in binary: host portion all zeros) is the subnet address
83.23.159.1-254 are host addresses
83.23.159.255 (in binary: host portion all ones) is the broadcast address
Я понимаю использование широковещательного адреса, но не понимаю, для чего когда-либо использовался адрес подсети. Я не вижу причин, по которым адрес назначения IP-пакета будет установлен на адрес подсети, так почему же самой подсети нужен адрес, если она никогда не станет конечной точкой для потока IP AN? Мне кажется, что это пустая трата - не разрешать использовать этот адрес в качестве адреса хоста.
Подводя итог, мои вопросы:
- Установлен ли в качестве получателя IP-адреса IP-адрес подсети?
- Если да, то в каких случаях и почему?
- Если нет, то почему бы не освободить этот адрес для использования любым хостом?
ifconfig
не жалуется, когда вы устанавливаете адрес хоста 24-сети на 0 или 255. Просто попробуйте его использовать.Ответы:
Да. Это действительный IP-адрес, поэтому его можно использовать.
Это просто один из 255 используемых IP-адресов в / 24
Если у вас устаревшее оборудование, вам нужно проверить, использует ли оно первый или последний адрес в качестве сетевого адреса. (.0 или .255 для сетей с маской FF.FF.FF.00)
Это делает хорошей привычкой пропускать этот IP. И привычки, усвоенные давно, трудно игнорировать.
И люди, которые не знают фон, не используют его, «потому что другие тоже не используют его, поэтому его использование должно быть неправильным» или потому, что они не понимают, что «0» может быть первым числом.
[Редактировать] Grezzo только что протестировал его в Windows XP, где графический интерфейс Windows Network 'услужливо' предотвратил эту настройку. Windows 7 имеет такое же поведение. Я тогда попробовал это на хосте не-Windows, где это только работает. Если вы используете Windows, вам, возможно, придется настроить сеть вручную через IPconfig, чтобы установить для нее все нули.
[Редактировать 2]
Чем дольше я работаю с этим, тем больше путаюсь.
Rfc4632 - Бесклассовая междоменная маршрутизация , по-видимому, не запрещает это, но и явно не допускает.
В этом посте ServerFault упоминается: «По историческим причинам многие операционные системы рассматривают первый адрес как широковещательный. Например, пинг xxx0 из OS X, Linux и Solaris в моей локальной (/ 24) сети получает ответы. Windows не позволяет вам пинговать первый адрес по умолчанию, но вы можете включить его с помощью метода SetIPUseZeroBroadcast WMI. Интересно, можете ли вы использовать .0 в качестве адреса хоста в сети, работающей под управлением Windows? " ,
Это тот же вопрос, но не ответ.
Сетевой адрес также используется в таблицах маршрутизации. Но я не понимаю, почему это не сработает из-за этого. Те же обозначения в таблицах маршрутизации будут направлены в нужную сеть. Оказавшись в нужной сети, он достигнет ПК с IP 0.
(Все это для 192.168.1 / 24.
Если вы используете 192.168.0 / 23, то 192.168.1.0 будет допустимым и безопасным значением в середине диапазона)
[Редактировать 3]
Еще одна ссылка на тот же вопрос. Похоже, что-то популярное в обмене стека:
/superuser/379451/why-can-a-network-address-not-be-a-valid-host-address
И одна мысль:
Destination_IP вероятно И эды с сетевой мачтой (быстрая операция в аппаратных средств) перед тем , как по сравнению с записями в таблицах маршрутизации. Но:
(Полуслучайный IP) 192.168.0.42 И 255.255.255.0 дадут 192.168.0.0,
но 192.168.0.0 И 255.255.255.0 также дадут 192.168.0.0
[Изменить 4 - Задолго после того, как этот ответ был написан - возможно, мне придется переписать весь пост из-за этой новой информации ]
RFC923 утверждает на странице 3, что:
Цитирование @ylearn на нашем сайте сетевой инженерии
Я полагаю, что первая документация этого поступает из RFC950, который ссылается на RFC943 (который устарел RFC923 выше, но использует тот же язык для специальных адресов):
источник
Адрес с нулевой частью хоста относится к самой сети, а не к какому-либо конкретному хосту.
Исторически этот нулевой адрес хоста служил альтернативным широковещательным адресом, и устройства по-прежнему отвечают таким образом.
Итак, я должен не согласиться с некоторыми другими ответами: нет, ноль - не совсем удобный адрес хоста. Если вам нужно более 254 адресов, вам нужно создать большую подсеть.
Смотри, мой маршрутизатор Linksys, адрес которого
.1
отвечает на пинги.0
. (Маска сети есть255.255.255.0
, поэтому последний октет соответствует номеру хоста.)Если бы я назначил
.0
адрес некоторому хосту, я не смог бы пропинговать его без того, чтобы маршрутизатор также включал его ответы. И как вы можете видеть, некоторые инструменты , такие как версию этого маршрутизатора вping
лакомстве в0
качестве вещания.Вы можете изменить правила, если хотите исправлять все стеки протоколов и другое программное обеспечение, на которое влияет такое изгибание. В противном случае придерживайтесь правил.
Дело в точке.
Я работал в компании, которая проектировала сетевой узел, построенный на 14-слотовом шасси, на котором работали многочисленные независимые образы ОС на нескольких типах карт, и все они общались через объединительную плату. Была создана сетевая настройка через объединительную панель с соглашением, что
127.X.0.Y
внутренний IP-адрес узла Y в слоте X, все пронумерованы от 1.В основном мы использовали подсеточный адрес для наших собственных целей. Чтобы заставить его работать, нам пришлось исправлять ядро Linux тут и там, и IIRC, немного пользовательского пространства.
Так как эта сеть использовалась только внутри коробки, и большинство программ, которые требуют обратной связи, используют
127.0.*
сеть (и фактически конкретный адрес127.0.0.1
), которая продолжала работать нормально, все было круто.источник
на самом деле это зависит от маски сети, например, для сети 83.23.159.0/23, 83.23.159.0 - это идеально используемый IP-адрес
источник
Похоже, здесь есть небольшая путаница с базовыми сетями.
«Старое оборудование», упомянутое в одном из ответов, не будет использовать ноль IP-подсети - использование ip-адреса xxx0 с сетью, настроенной на / 24 CIDR или маску подсети 255.255.255.0, является совершенно другой проблемой.
IP Подсеть Ноль
Используемые IP-адреса хоста в подсети
Сетевой адрес и широковещательный адрес зарезервированы и не могут (по текущим и предыдущим сетевым стандартам) быть назначены устройству. Использование xxx0 для адреса хоста в системе / 24 является неправильным. Даже если Linux позволяет вам использовать его, это не значит, что он прав, это просто означает, что Linux думает, что вы знаете, что делаете.
Если ваша система позволяет вам назначить хосту xxx0 в качестве IP4-адреса, и он, кажется, работает - возможно, конкретный хост получает ВСЕ трафик, предназначенный для ЛЮБОГО устройства в этой сети, поэтому его сеть, вероятно, не работает оптимально.
источник
RFC 1122 («Требования к интернет-хостам - коммуникационные уровни») запрещает:
источник
На самом деле ответ является основой подсетей. IP-адрес "все нули" вашей подсети в сочетании с идентификатором сети используется для расчета того, куда должен быть отправлен пакет.
В вашем примере у вас есть подсеть 255.255.255.0. Любое устройство, которое знает протокол TCP / IP, будет использовать маску сети, объединенную с IP-адресом, чтобы вычислить, предназначен ли пакет для локальной сети (путем выполнения логической операции И) или что он должен быть отправлен через шлюз / маршрутизатор.
Поэтому я предполагаю, что причина того, что IP не может быть использован, заключается в том, что он уже используется для «определения» границ сети вместе с маской сети.
источник
Мне было предложено опубликовать свой ответ от NetworkEngineering , поэтому я сделаю это с некоторыми изменениями для этого сайта.
В RFC919 он ссылается на общее принятие сетевого адреса:
Это обеспечивает соглашение, которое должно прояснить наше понимание, если кто-то упомянул «10.1.2.0» как сеть, а не как хост в сети.
Оттуда использование «0» в IP-адресах было определено в RFC923 и перенесено в последовательных RFC:
В этом примере указан конкретный хост в текущей сети (0.0.0.37) с использованием 0 в сетевых частях адреса, но в действительности он не проясняет противоположный случай (0 в хостовой части адреса). Однако, поскольку это действительно определяет "0" как "это".
В RFC1060 адрес «0.0.0.0» был четко задокументирован как «этот хост в этой сети»:
Поскольку все нули для части адреса узла означают «этот узел», из этого логически следует, что он непригоден в качестве адреса узла.
Возвращаясь к непосредственному ответу на ваши вопросы:
Согласно тому, что я нахожу в RFC, это не должно использоваться. Я признаю, что это не так четко определено, как хотелось бы, но это часто встречается во многих стандартах. Когда стандарты немного менее точны, отрасль, похоже, «соглашается» на общепринятую интерпретацию.
Кроме того, на основе содержимого программного обеспечения RFC может быть написано предположение, что этот адрес используется для адресации сети, а не конкретного хоста. Или даже более буквально, как своего рода «петля» (то есть этот хост в указанной сети).
Так почему же некоторые ОС явно разрешают его использование? Я хотел бы представить, как многие вещи, которые сводятся к времени / ресурсам разработчика, или никто действительно не думал, чтобы добавить проверку достоверности. Логика должна быть немного более сложной, чем «если она заканчивается на 0», так как большая подсеть (a / 23 или больше) будет содержать действительный IP-адрес .255 и .0 (т. Е. 10.1.2.0/23 содержит оба действительных IP-адреса адрес 10.1.2.255 и 10.1.3.0). Хотя некоторые организации также избегают использования этих действительных адресов в больших подсетях, чтобы избежать каких-либо странных проблем с программным обеспечением, которое не поддерживает современные подсети правильно.
Что касается того, почему бы не освободить этот один IP-адрес, это просто сводится к стоимости / выгоде. Потребовалось бы много времени и усилий, чтобы внести это изменение, чтобы получить обратно один IP-адрес на подсеть, и в скольких случаях, когда вам нужны дополнительные IP-адреса, будет ли достаточно только одного адреса? Гораздо проще добавить вторую подсеть или увеличить текущую подсеть, потенциально предоставляя вам много адресов для использования вместо одного, при этом не внося существенных изменений в любое программное или аппаратное обеспечение.
источник