Почему не может все нули в части, относящейся к хосту IP-адреса использоваться для хоста?

О, мальчик, Вы парни, очевидно, пропускали утилиту "Unison". Я поддерживал некоторые главные США/евро инфраструктуры "в реальном времени", и я должен сказать, что у всех есть очень похожие проблемы..., как копировать и смочь быть активно-активными все время..., если Вы не заботитесь о персистентности сессии затем, этой вещью является бомба... лучшая вещь, которую я нашел в solaris отдельно оплачиваемых предметах :-)

21
задан 24 November 2012 в 13:10
8 ответов

Установлен ли когда-либо адресат IP-пакета на IP-адрес подсети?

Да. Это действующий IP-адрес, поэтому его можно использовать.

Если да, то в каких случаях и почему?

Это просто один из 255 используемых IP-адресов в / 24

Если нет, то почему бы не освободить этот адрес для любого хоста?

Если у вас есть древнее оборудование, то вам нужно проверить, использует ли оно первый или последний адрес в качестве сетевого адреса. (.0 или .255 для сетей с маской FF.FF.FF.00)

Это делает хорошей привычкой пропускать этот IP-адрес. А давно усвоенные привычки трудно игнорировать.

И люди, не знающие основы, не используют ее ».

[Edit] Grezzo только что протестировал его в Windows XP, где графический интерфейс Windows «услужливо» предотвратил эту настройку. Windows 7 ведет себя так же. Затем я попробовал его на хосте, отличном от Windows, где он просто работает. Если вы используете Windows, возможно, вам придется настроить сеть вручную через IPconfig, чтобы установить все нули.

192.168.1.0_on_win7 192.168.1.0_on_FreeBSD

[Edit 2]

Чем дольше я работаю с этим, тем больше я запутываюсь.

Rfc4632 - Бесклассовая междоменная маршрутизация не запрещает это, но и не разрешает явно.

В этом сообщении ServerFault упоминается: «По историческим причинам многие операционные системы обрабатывают первый адрес как широковещательный. Например, эхо-запрос xxx0 из OS X, Linux и Solaris в моей локальной (/ 24) сети получают ответы. Windows не позволяет вам пинговать первый адрес по умолчанию, но вы можете включить его с помощью метода SetIPUseZeroBroadcast WMI. Интересно, сможете ли вы обойтись без использования .0 в качестве адреса хоста во всей сети Windows. ".

Это тот же вопрос, но не ответ.

Сетевой адрес также используется в таблицах маршрутизации. Но я не понимаю, почему это не сработает из-за этого. Такое же обозначение в таблицах маршрутизации будет направлено в нужную сеть. Попав в нужную сеть, он попадет на ПК с IP 0. Если вы использовали 192.168.0 / 23, тогда 192.168.1.0 было бы допустимым и безопасным значением в середине диапазона)

[Edit 3]

Еще одна ссылка на тот же вопрос. Это кажется довольно популярным при обмене стеками:

https://superuser.com/questions/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


[Edit 4 - Long after this answer was written - I might need to rewrite the entire post due to this new information ]

RFC923 states on page 3 that:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Quoting @ylearn on our networkengineering site

I believe the first documentation of that comes from RFC950 which references RFC943 (which obsoleted RFC923 above but uses the same language for special addresses):

     It is useful to preserve and extend the interpretation of these
     special addresses in subnetted networks.  This means the values
     of all zeros and all ones in the subnet field should not be
     assigned to actual (physical) subnets.
12
ответ дан 2 December 2019 в 20:04

Адрес с нулевой частью хоста относится к самой сети, а не к какому-либо конкретному хосту.

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

Итак, я вынужден не согласиться с некоторыми другими ответами: нет, ноль - не идеальный адрес хоста. Если вам нужно более 254 адресов, вам необходимо создать подсеть большего размера.

Смотрите, мой маршрутизатор Linksys с адресом .1 отвечает на эхо-запросы .0 . (Сетевая маска 255.255.255.0 , поэтому последний октет соответствует номеру хоста.)

webserver:~# ping  192.168.1.0
Do you want to ping broadcast? Then -b
webserver:~# ping -b 192.168.1.0
WARNING: pinging broadcast address
PING 192.168.1.0 (192.168.1.0) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.46 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.812 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.819 ms

Если бы я назначил адрес .0 какому-либо хосту, я бы не стал возможность пинговать его без участия маршрутизатора в его ответах. И, как видите, некоторые инструменты, такие как версия ping этого маршрутизатора, рассматривают 0 как широковещательную рассылку.

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

Показательный пример.

Я работал в компании, которая проектировала сетевой узел, построенный в шасси с 14 слотами, запускающий множество независимых образов ОС на нескольких типах карт, все общаются через объединительную плату. Была сетевая настройка через объединительную плату с условием, что 127.X.0.Y - это внутренний IP-адрес узла Y в слоте X, все пронумерованы от 1.

Мы в основном разбили петлю на подсети. адрес для наших собственных целей. Чтобы заставить его работать, нам пришлось исправить ядро ​​Linux кое-где и IIRC, немного места для пользователя.

Поскольку эта сеть использовалась только внутри коробки, и большинство программ, требующих обратной связи, используют сеть 127.0. * (и фактически конкретный адрес 127.0.0.1 ), который продолжает для нормальной работы все было круто.

По сути, мы разбили адрес обратной связи на подсети для наших собственных целей. Чтобы заставить его работать, нам пришлось исправить ядро ​​Linux кое-где и IIRC, немного места для пользователя.

Поскольку эта сеть использовалась только внутри коробки, и большинство программ, требующих обратной связи, используют сеть 127.0. * (и фактически конкретный адрес 127.0.0.1 ), который продолжает для нормальной работы все было круто.

По сути, мы разбили адрес обратной связи на подсети для наших собственных целей. Чтобы заставить его работать, нам пришлось исправить ядро ​​Linux кое-где и IIRC, немного места для пользователя.

Поскольку эта сеть использовалась только внутри блока, и большинство программ, требующих обратной связи, используют сеть 127.0. * (и фактически конкретный адрес 127.0.0.1 ), который продолжает для нормальной работы все было круто.

15
ответ дан 2 December 2019 в 20:04

actually it depends on the netmask, for example, for the network 83.23.159.0/23, 83.23.159.0 is a perfectly usable ip address

7
ответ дан 2 December 2019 в 20:04

Похоже, здесь есть небольшая путаница с базовой сетью.

«Старое оборудование», упомянутое в одном из ответов, не будет использовать нулевую подсеть IP - использование IP-адреса xxx0 с сетью, настроенной для / 24 CIDR или маска подсети 255.255.255.0 - это совершенно другая проблема.

IP-подсеть Zero

  • Старое оборудование не будет использовать IP-подсеть Zero - это означает, что они не будут использовать первую подсеть в сетевой системе с несколькими подсетями. Таким образом, в сети / 23 или 255.255.254.0 подсеть XXX0 и все ее адреса использоваться не будут. Современные маршрутизаторы не имеют этого ограничения, но могут быть настроены на использование этой старой модели IE без использования нулевой подсети, если это необходимо.

Используемые IP-адреса хоста в подсети

  • Базовая сеть:
    • With /24 i.e. subnet mask of 255.255.255.0
    • x.x.x.0 is reserved as the network address. Routers and routing protocols (EIGRP, RIP2, etc.) use the network address to define network segments for moving packets within and across network network boundaries.
    • x.x.x.255 is reserved for the broadcast address
    • It is common practice to use the addresses .1 or .254 on routers so that leaves 253 usable IP numbers.

Both the network address and the broadcast address are reserved and cannot (by current and previous network standards) be assigned to a device. Using x.x.x.0 for a host address on a /24 system is wrong. Even if Linux lets you use it does not mean that it is right, it just means that Linux thinks that you know what you are doing.

If your system is letting you assign x.x.x.0 as an IP4 address to a host and it appears to be working - chances are that particular host is receiving ALL traffic targeted to ANY device on that network so its networking is probably not working optimally.

3
ответ дан 2 December 2019 в 20:04

На самом деле ответ - это основы разбиения на подсети. IP-адрес вашей подсети "все нули" в сочетании с идентификатором сети используется для расчета, куда должен быть отправлен пакет.

В вашем примере у вас есть подсеть 255.255.255.0. Любое устройство, которому известен протокол TCP / IP, будет использовать сетевую маску в сочетании с IP-адресом, чтобы вычислить, предназначен ли пакет для локальной сети (путем выполнения операции логического И) или что он должен быть отправлен через шлюз / маршрутизатор.

Итак, я предполагаю, что причина того, что IP не может использоваться, заключается в том, что он уже используется для «определения» границ сети вместе с сетевой маской по дизайну.

0
ответ дан 2 December 2019 в 20:04

RFC 1122 ("Требования к Интернет-хостам -- Слоям связи") запрещает:

IP-адреса не могут иметь значения 0 или -1 для любой из <номеров хоста>, <номеров сети> или <номеров подсети... number> fields

3
ответ дан 2 December 2019 в 20:04

Мне было предложено опубликовать свой ответ из NetworkEngineering , поэтому я сделаю это с некоторыми изменениями для этого сайта.

В RFC919 делается ссылка на общее принятие сетевой адрес:

However, as a notational convention, we refer to
networks (as opposed to hosts) by using addresses with zero fields.
For example, 36.0.0.0 means "network number 36"

Это обеспечивает соглашение, которое должно прояснить наше понимание, если кто-то упоминает «10.1.2.0» в качестве сети, а не хост в сети.

Отсюда использование «0» в IP-адреса были определены в RFC923 и переносятся в последующих RFC:

Special Addresses:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

В этом примере предоставляется конкретный хост в текущей сети (0.0.0.37) с использованием нулей в сетевых частях адреса, но это фактически не проясняет противоположный случай (0 в части адреса, связанной с хостом). Однако, поскольку он определил «0» как «это».

В RFC1060 адрес «0.0.0.0» был четко задокументирован как «этот хост в этой сети»:

     (a)   {0, 0}

        This host on this network.  Can only be used as a source
        address (see note later).

Поскольку все нули в части адреса хоста означают «этот хост», это логически следует, что его нельзя использовать в качестве адреса хоста.

Возвращаясь к непосредственному ответу на ваши вопросы:

  1. Установлен ли когда-либо адресат IP-пакета на IP-адрес подсети?
  2. Если да, то в каких случаях и почему?
  3. Если нет, то почему бы не освободить этот адрес для использования любым хостом?

Согласно тому, что я нашел в 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-адреса, будет ли достаточно только одного адреса? Гораздо проще добавить вторую подсеть или расширить текущую подсеть, потенциально давая вам много адресов для использования вместо одного, не внося при этом никаких серьезных изменений в какое-либо программное / аппаратное обеспечение.

0
ответ дан 2 December 2019 в 20:04

Во-первых, стоит отметить, что полностью нулевые адреса в IPv6 определяются RFC4291 как «Требуемый адрес Anycast», который является адресом, который по крайней мере один маршрутизатор в сегменте, но не обязательно все им, ответит. (Адреса произвольной рассылки как в IPv6, так и в IPv4 могут иметь ненулевые части хоста.) Таким образом, для IPv6 ответ однозначно «нет», если только вы не используете его для предоставления услуг произвольной рассылки.

Как упоминалось в других ответах, небезопасно использовать эти IPv4-адреса в качестве адресов хостов на широковещательном носителе: по историческим причинам многие хосты будут отвечать на пакеты с этими адресами, как если бы они были широковещательными пакетами. Однако также небезопасно запрещать использование этих адресов в восходящем направлении, даже если у вас есть четкое указание (из записи маршрутизации), что адрес находится в нижней части подсети... адрес может использоваться в нешироковещательной сети. подсети, такой как пул NAT, или /31, используемый в качестве сетевого адреса маршрутизатора. Это означает, что защита от DoS, подобная «смурфу», относится, если это вообще возможно, к непосредственно подключенному маршрутизатору, который должен знать, является ли носитель широковещательным доменом или нет. И эти средства защиты присутствуют в обычном случае, так что это вторая причина, по которой использование этих адресов в качестве одноадресных адресов на широковещательных носителях не будет работать: маршрутизатор не может пропустить к ним трафик вне сегмента.

Если экстраполировать из RFC923, нулевой хост будет «Этот хост в определенной сети». Делать такую ​​экстраполяцию небезопасно, потому что RFC обращается только к сетевому адресу, а не к адресу хоста.Однако вполне возможно, что может быть развернут некоторый протокол согласования IP-адресов, когда хост знает подсеть, к которой он хочет принадлежать, но не знает своего адреса хоста и запрашивает автоматическую настройку в этой конкретной сети, указав нулевой адрес хоста. Это еще одна возможная интерпретация, на которую стоит обратить внимание.

0
ответ дан 15 January 2021 в 21:02

Теги

Похожие вопросы