15

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

7 ответов7

14

Насколько я понимаю, "сетевой адрес" как специальный адрес является артефактом из классных 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.

4

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

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

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

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

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

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

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

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

2

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

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

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

Я не очень хорош в объяснении, но говоря по-другому.

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

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

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

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

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

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

0

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

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

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

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
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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .