Почему сетевой адрес не может быть действительным адресом хоста?

18

Итак ... Я учился на CCNA и тому подобное и работал с IP-сетями как минимум последние 8 лет или около того. Я всегда видел и говорил, что сетевой адрес для подсети не является действительным адресом хоста. Сначала я скажу, что знаю, что это правда. Мой вопрос больше ... есть ли техническая причина, по которой он не может быть использован, или он был просто произвольно согласован при разработке спецификации? Я понимаю, почему широковещательный адрес не может быть использован (потому что он фактически используется). Дело в том, что когда я вижу используемый сетевой адрес, он обычно используется только в маршрутизации, которая использует адреса NETWORK. В этом случае (сетевые адреса используются только тогда, когда вы ожидаете сетевой адрес), есть ли какая-то техническая причина, по которой они не могут иметь сетевой адрес как действительный действительный адрес хоста?

Goblinlord
источник

Ответы:

16

Насколько я понимаю, «сетевой адрес» как специальный адрес является артефактом из классных IP-сетей прошлого. Сегодня мы используем бесклассовую междоменную маршрутизацию ( CIDR ) в Интернете, которая не имеет понятия сетевого адреса (если вы посмотрите на ссылку RFC 4632, приведенную выше, вы увидите, что в ней перечислены 256 возможных IP-адресов на унаследованную версию). Блок «C», например, нет зарезервированных адресов ни для сети, ни для широковещательного адреса (хотя широковещательные рассылки определены как важные в других RFC).

При этом вам все равно не следует назначать сетевой адрес какому-либо конкретному хосту в сети: сетевой адрес необходим для маршрутизации. Эта концепция широко используется в RFC ( RFC 1812 ). Просто посмотрите на таблицы маршрутизации ( routeкоманда), вы увидите, как ваш локальный сетевой адрес используется для отделения трафика локальной сети от того, что должно проходить через маршрутизатор. Что если этот локальный сетевой адрес был назначен какому-либо узлу?

Еще хуже: лучше не назначать IP-адреса, оканчивающиеся на ноль, даже если этот адрес не является сетевым адресом. Например, если ваша сеть 10.10.0.0/255.255.0.0, IP-адрес 10.10.5.0 не является вашим сетевым адресом, но вам лучше не назначать такой IP-адрес, даже если он полностью действителен даже в классных IP-сетях. Некоторые устаревшие программные / IP-стеки могут иметь проблемы с этим.

ОБНОВЛЕНИЕ: гоблинлордом

Согласно RFC 1812 (раздел 5.3.5.2) то, что мы называем сетевым адресом, первоначально использовалось для «направленных широковещательных рассылок », которые отправляли широковещательный пакет в нужную сеть. Эта функция устарела из-за SMURF-атак. Функция была официально изменена в RFC 2644 . Впоследствии, дальнейшие реализации должны молча отбрасывать пакеты с адресом источника, как описано (сетевой адрес). Хотя это то, что должно произойти, мне любопытно, сколько реализаций на самом деле делают это.

Это дополнительно добавляется в RFC 3021, когда была решена подсеть / 31.

haimg
источник
5
@ grawity: не всегда. Только в сети больше / 31. Например, P2P может иметь два адреса и не иметь широковещательного адреса.
Haimg
3
Хммм ... мне нравится первая часть ответа ... что это артефакт из классных IP-сетей. Моя проблема снова со второй частью заключается в том, что таблицы маршрутизации используются специально для маршрутизации в сеть. Насколько я понимаю, таблица маршрутизации просматривается только для маршрутизации в сеть, к которой не подключен получатель (dest IP не является частью вашей подсети / сети). В этом случае ... при просмотре таблицы маршрутизации становится ясно, что адреса в ней являются сетевыми адресами, а не адресами хоста, поэтому отделяют его от IP-адреса пакета хоста. В реальном трафике dest IP сетевого адреса никогда не используется.
Гоблинлорд
1
Итак ... есть ли причина специально зарезервировать его, если эти 2 экземпляра уже разделены (сетевой адрес в таблице маршрутизации и адрес Dest IP при определении необходимости просмотра таблицы маршрутизации).
Гоблинлорд
1
@ Гоблинлорд: Нет официальной причины, которую я мог бы найти (последние RFC и т. Д.). Однако так много программного обеспечения создается с предположением, что сетевой адрес является «специальным», что на практике вам лучше не использовать его в качестве IP-адреса хоста.
Haimg
1
Существует запись конфигурации cisco, которая позволяет сетевому адресу также быть хостом, который существует не менее 10 лет ... Я никогда не использовал его и даже не тестировал его, и из-за возможных проблем со стеком, как уже упоминалось, специально не позволять хостам заканчиваться на .0 или .255 в сетях, за которые я отвечал, хотя я не сталкивался с другими сетевыми или широковещательными адресами, используемыми меньше / 24s, в @Home, и хотя CoreOS хотела выдавая середину .0 и .255 как хосты в / 23 и / 21s sanbrunocable, я их вручную зарезервировал.
Невин Уильямс
5

Таким образом, практический ответ: это действительно зависит. Это зависит от:

  • Точный адрес и его значения во многих RFC
  • Версия и версия вашей операционной системы
  • ... и вашего роутера, и любого другого вышестоящего роутера
  • ... И интеллект и сложность всех сетевых администраторов этих маршрутизаторов ...

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

Я уверен, что есть аналитики и хакеры по безопасности, которые имеют безумно подробную статистику о том, сколько именно вариантов реализации стека TCP-IP существует и что делать, а что не разрешать и не разрешать, и как именно и где они пропускают свой след. ,

На самом деле, я просматриваю и публикую это с моего сетевого адреса.

Не называйте меня плохим интернетом, если у вас нет лучшего решения починить этот карточный домик: реальность такова, что, если это возможно, это случится. Реальность такова, что никто по-настоящему умный не сел и не продумал все это во всех возможных итерациях, чтобы придумать абсолютно надежный дизайн, прежде чем люди начнут его использовать - как и в большинстве случаев в жизни. Результат? Стандарты, в которых многие вещи не суммируются и / или теряются в переводе.

Добро пожаловать в реальный мир. Не позволяйте этому отговаривать вас от погони за неуловимыми оптимальными идеалами ... Просто не ждите поддержки от «официальных» каналов или форумов, если вы не хотите запачкать руки и посвятить этому свое время и жизнь, создавая необходимый консенсус и навигация по политике вокруг этого.

Итак, я думаю, что другие авторы пытались сказать: если вы хотите сделать эту официальную политику и использовать ее в производстве, вы сами по себе. (Но разве не так ли?) Может, нам повезет, и компьютерный интеллект разработает для нас IPv8, который обратно совместим с IPv4 и IPv6 и всеми их испорченными реализациями.

Dagelf
источник
Конечно, когда вы используете свой сетевой адрес, устройство, которому оно назначено, может получать все виды широковещательного трафика, так как некоторые сетевые стеки рассматривают его как широковещательную рассылку. Тем не менее, они, как правило, не сильно мешают, так как просто молча отбрасываются. Мне любопытно, сколько сетевых эксплойтов полагаются на особенности, связанные с этим, однако ...
Dagelf
2

Я новичок в сети, но я также дам свои 2 цента.

Если у меня есть подсеть / 28 из xxx0 - xxx15 Согласно предопределенным правилам, у нас будет 14 используемых хостов и 2 оставшихся. остальные для сети и широковещания.

Позволяет вместо того, чтобы следовать правилу выше, фактически использовать все 16 хостов. Тогда в этом случае все будет хорошо, никаких проблем. Но если бы коммуникация была необходима вне сети, это было бы невозможно из-за нехватки ресурсов для отправки или получения информации.

Я не очень хорош в объяснении, но, говоря иначе.

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

Мой почтовый адрес будет варьироваться от 1-14 Personal Street, Off Network Road.

Это не будет проблемой для почтальона. Теперь предположим, что разработчики стали жадными, добавили еще 2 дома и избавились от переулков.

Тогда мой новый почтовый адрес будет варьироваться от 1-16 Personal Street

В этом случае почтальон будет в беде.

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

Уильям
источник
0

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

Представьте себе таблицу маршрутизации, подобную этой: (этот ПК имеет параллельное соединение с другим ПК и сетевой картой)

Dest           Mask    Dev
192.168.0.123  /32     plip0   # This is a single host
192.168.0.0    /24     eth0    # This is a network

AND между IP-адресом и маской сети дает именно то, что вам нужно, 4-байтовое число, которое можно сравнить с каждой строкой без дальнейших вычислений.

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

Если вы решили использовать номер сети в качестве номера хоста, это приведет к появлению такой таблицы:

Dest           Mask    Dev
192.168.0.0    /32     eth0    # This is the host (it's a redundant line)
192.168.0.0    /24     eth0    # This is the network

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

Ну ... на самом деле все не так просто. Я решил попробовать (!!!):

# route add -net 192.168.0.0/32 eth0
# ping 192.168.0.0
Do you want to ping broadcast? Then -b
# telnet 192.168.0.0
Trying 192.168.0.0...
telnet: connect to address 192.168.0.0: Network is unreachable

В настоящее время сетевые программы не позволяют мне использовать номер сети в качестве обычного адреса.

Дэвид Коста
источник
Рассматривая ваш первый пример таблицы маршрутизации, я думаю, что это действительно плохой способ сделать что-то ... если у вас есть другие хосты в вашей подсети .0.0, как они правильно взаимодействуют друг с другом, а также с хостом .0.123 без статической установки маршрутов на каждый хост? Это действительно не похоже на правильный способ делать вещи.
Гоблинлорд
Это всего лишь вымышленный пример, я бы никогда не настроил такую ​​таблицу :-). Хост .123 связан с двухточечным соединением, а остальное - обычная сеть Ethernet. Если вы хотите, чтобы другие машины имели доступ к хосту .123, вам нужно проделать дополнительную работу, но это не невозможно.
Дэвид Коста
0

В поисках ответа на этот вопрос я наткнулся на эту статью от Cisco. Следующая цитата из этой статьи хорошо подытоживает, я думаю.

[...] рассмотрим IP-адрес 172.16.1.10. Если вы подсчитаете адрес подсети, соответствующий этому IP-адресу, вы получите ответ 172.16.0.0 (ноль подсети). Обратите внимание, что этот адрес подсети идентичен сетевому адресу 172.16.0.0, который был в первую очередь подсетью, поэтому всякий раз, когда вы выполняете подсеть, вы получаете сеть и подсеть (нулевая подсеть) с неразличимыми адресами. Раньше это было источником большой путаницы .

Избежать путаницы - это достаточно веская причина для меня.

Сэмюэл Хармер
источник
Я знаю, что этот вопрос был задан давно, но я только что пересмотрел этот материал. В цитируемой вами статье говорится о «нулевой подсети» или первой подсети в сетевом адресе. Это нечто совершенно другое, и в любой современной сети, с которой я работал, на каждом коммутаторе включена функция «ip subnet-zero». В нем также упоминается, что в настоящее время он включен по умолчанию на всех их коммутаторах (начиная с версии 12, выпущенной в 2003 году).
Гоблинлорд
0

RFC 1122 («Требования к интернет-хостам - коммуникационные уровни») запрещает это:

IP-адресам не разрешается иметь значение 0 или -1 для любого из полей <Host-number>, <Network-number> или <Subnet-number>

Bryan
источник
0

Сетевой адрес не считается адресом хоста, это всего лишь число. В областях с ограниченным адресом, таких как двухточечные сети, маска / 30 часто используется, но все еще использует адреса хоста. Менее практичным, но достигающим того же принципа, является использование маски / 31 и использование одного конца в качестве сетевого адреса, а другого - в качестве широковещательной передачи.

Ex.

Router(config)#int gi0/0
Router(config-if)#ip add 10.0.0.0 255.255.255.254
Router(config-if)#no shut


Router2(config)#int gi0/0
Router2(config-if)#ip add 10.0.0.1 255.255.255.254
Router2(config-if)#no shut


        .0        .1
[Router]-----------[Router2]
   network      broadcast
CMD
источник