Чому не можна використовувати всі нулі в хост-частині IP-адреси для хоста?


21

Я знаю, що якщо у мене є мережа, 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? Мені здається марним не допускати використання цієї адреси як адреси хоста.

Підводячи підсумок, мої запитання:

  1. Чи встановлено призначення IP-пакета для IP-адреси підмережі?
  2. Якщо так, то в яких випадках і чому?
  3. Якщо ні, то чому б не звільнити цю адресу для будь-якого хоста?

2
ifconfigне скаржиться, встановивши адресу хоста 24 мережі в 0 або 255. Просто спробуйте скористатися ним.
ott--

2
Я зробив. Здається, працює на .0. Але це може зламати старіше програмне забезпечення. .255 також буде працювати, якщо ви не використовуєте жодних протоколів, які потребують трансляції. Я думаю, ви можете налаштувати його, якщо вручну налаштувати таблиці ARP з постійними адресами на всіх комп’ютерах, але yuk!
Геннес


1
Я не згоден з тим Іваном. Я повторно перевірив це, і він не стосується конкретного заданого питання. Це скоріше крайній випадок.
Геннес

1
Це запитання також задається на веб-сайті або інженерній мережі. Ці відповіді (на http://networkengineering.stackexchange.com/questions/11200/what-is-the-purpose-of-network-address-aka-subnet-address ) є інформація , яка не є ще в Сервер Fault повідомлень .
Геннес

Відповіді:


12

Чи встановлено призначення IP-пакета для IP-адреси підмережі?

Так. Це дійсний IP-код, тому його можна використовувати.

Якщо так, то в яких випадках і чому?

Це просто один з 255 використаних IP-адрес в / 24

Якщо ні, то чому б не звільнити цю адресу для будь-якого хоста?

Якщо у вас є старовинне обладнання, вам потрібно перевірити, чи в якості мережевої адреси використовується перша чи остання адреса. (.0 або .255 для мереж з маскою FF.FF.FF.00)

Це робить доброю звичкою пропускати цю IP. А звички, засвоєні давно, важко ігнорувати.

А люди, які не знають тло, не використовують його "тому, що інші також не використовують його, тому його потрібно неправильно" або тому, що вони не усвідомлюють, що "0" може бути першим числом.

[Редагувати] Grezzo щойно перевірив його на Windows XP, де інтерфейс інтерфейсу Windows «з користю» запобіг цього налаштування. У Windows 7 така ж поведінка. Потім я спробував це на хості без вікон, де він просто працює. Якщо ви використовуєте Windows, вам, можливо, доведеться налаштувати свою мережу вручну через IPconfig, щоб встановити її на всі нулі.

192.168.1.0_on_win7 192.168.1.0_on_FreeBSD

[Редагувати 2]

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

Rfc4632 - Без класового міждоменного маршрутизації , схоже, це не забороняє, але й не дозволяє прямо.

У цій публікації ServerFault зазначається: "З історичних причин багато ОС вважають першу адресу як широкомовної. Наприклад, pinging xxx0 з ОС 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, ймовірно, AND ed з мережевою щоглою (швидка операційна техніка) перед порівнянням із записами в таблицях маршрутизації. Але:

(Напів випадковий 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 повідомляє, що:

  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.

Цитуючи @ylearn на нашому мережевому інженерному сайті

Я вважаю, що перша документація цього документа походить від RFC950, на яку посилаються RFC943 (яка застаріла RFC923 вище, але використовує ту ж мову для спеціальних адрес):

     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.

Щоб уточнити, ви хочете сказати, що xxx0 / 24 - дійсна IP-адреса для хоста? Якщо це так, то чому (коли я намагаюся встановити свою IP-адресу на 192.168.1.0 з мережевою маскою 255.255.255.0) Windows XP каже: " Поєднання IP-адреси та маски підмережі недійсне. Усі біти в Частина IP-адреси хоста IP-адреси встановлена ​​на 0. Будь ласка, введіть дійсну комбінацію IP-адреси та маски підмережі. "
Grezzo

3
Windows помиляється. (Або сказано з меншою силою: windows надто обережно працює з будь-якою комбінацією систем). Я просто спробував це на своїй системі Windows 7, і я отримав ту ж помилку, що і ви. Я встановив чисту систему FreeBSD і протестував її там, де вона просто працює. (Я додам це до допису)
Геннес

Спасибі, ви були дуже корисні. Просто хотів додати, що графічний інтерфейс в OS X також не дозволить вам це зробити, але я думаю, що, якщо це буде конфігурація. Я не можу зрозуміти, чому відповідь m0ntassar набрала більше голосів - він навіть не намагається відповісти на моє запитання. І ще одна річ; коли ви говорите : « Якщо у вас є давнє обладнання , то вам потрібно перевірити , якщо він використовує перший або останній адреса в якості адреси мережі. » Ви маєте в виду широкомовна адреса .
Греццо

Так, я мав на увазі адресу трансляції. Чорт, де ця кнопка "редагувати коментар старше 5 хвилин".
Геннес

Солодко, я просто спробував пінг .0 і .255, обидва рази мій PS3 відповів (все інше є бездротовим, тому я думаю, саме тому він потрапив туди спочатку) з .65, що підтверджує, що в моїй мережі обидва використовуються для трансляції, яка є чому (як правило) ми не повинні використовувати ні для реальної адреси хоста.
Греццо

15

Адреса з частиною хоста, що дорівнює нулю, стосується самої мережі, а не будь-якого конкретного хоста.

Історично ця нульова адреса хоста слугувала альтернативною широкомовною адресою, і пристрої все ще відповідають таким чином.

Отже, я маю згоду з деякими іншими відповідями: ні, нуль не є ідеально корисною адресою хоста. Якщо вам потрібно більше 254 адрес, вам доведеться створити більшу підмережу.

Подивіться, мій маршрутизатор Linksys, адреса якого .1відповідає pings .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), яка продовжувала працювати нормально, все було круто.


7

насправді це залежить від маски мережі, наприклад, для мережі 83.23.159.0/23, 83.23.159.0 є ідеально корисною ip адресою


3
+1 - 83.23.158.255 також буде дійсною адресою хоста. Люди зациклюються на правилах 0 і 255, не враховуючи маску підмережі.
joeqwerty

1
Я знаю, що адреса xxx0 дійсна з мережевою маскою менше, ніж 24, але зауважте, що в своєму запитанні я вказав маску / / 24, тому ви не відповіли на моє запитання. Я не говорив про всі 0 або 255 в останньому квартеті / байті, я сказав, що всі 0 або 255 в "хості" IP-адреси. При цьому враховується мережна маска.
Греццо

2
@Grezzo коротка відповідь: не-CIDR та застарілі речі розриваються з .0, MS просто відключає це повністю. Але IPv6 неминучий, тож навіщо турбуватися? ;)
Саммітч

2
Це насправді не відповідь, оскільки питання насправді не про нумерологію позначень крапок, а про статус / значення 0 хост-адреси в будь-якій підмережі ширини.
Каз

2
Я не бачу, чому за цю відповідь так багато голосів. 83.23.159.0/23 "технічно" не є дійсною мережею. 83.23.159.0 з 23-маскою - це фактично ip в середині мережі 83.23.158.0/23. Питання не було "чому я не можу мати .0 в кінці ip", це було "чому я не можу використовувати адресу з частиною хоста всі нулі". У вашому прикладі адреса "всі нулі хоста" буде 83.23.158.0. Як вже згадувалося в інших відповідях, це історично непридатна адреса ("мережева адреса"), і хоча вона може працювати на деяких ОС, не варто її намагатися використовувати.
Метт США

3

Здається, що тут є невелика плутанина з базовими мережами.

"Древнє обладнання", згадане в одній з відповідей, не використовувало б IP-підмережу Zero - використання ip адреси xxx0 з мережею, налаштованою для / 24 CIDR або 255.255.255.0 маски підмережі - це зовсім інше питання.

Нульова підмережа IP

  • Старі апаратні засоби не використовуватимуть IP Subnet Zero - це означає, що вони не використовуватимуть першу підмережу в багатомережевій мережі. Так у мережі a / 23 або 255.255.254.0 підмережа XXX0 і всі її адреси не використовуються. Сучасні маршрутизатори не мають цього обмеження, але вони можуть бути налаштовані на використання цієї старої моделі IE, якщо не потрібно використовувати нульову підмережу.

Корисні IP адреси хостів у підмережі

  • Основні мережі:
    • З / 24, тобто маска підмережі 255.255.255.0
    • xxx0 зарезервовано як мережева адреса. Маршрутизатори та протоколи маршрутизації (EIGRP, RIP2 тощо) використовують мережеву адресу для визначення мережевих сегментів для переміщення пакетів у межах та через межі мережі.
    • xxx255 зарезервовано для адреси широкомовної програми
    • Загальна практика використовувати адреси .1 або .254 на маршрутизаторах, щоб залишати 253 корисних IP-номера.

Як мережева, так і широкомовна адреса зарезервовані, і їх не можна (за чинними та попередніми мережевими стандартами) призначити пристрою. Неправильно використовувати xxx0 для адреси хоста в системі / 24. Навіть якщо Linux дозволяє вам використовувати це не означає, що це правильно, це просто означає, що Linux думає, що ви знаєте, що ви робите.

Якщо ваша система дозволяє призначити xxx0 як IP4-адресу хосту, і, здається, це працює - ймовірно, що конкретний хост отримує ВСІЙ трафік, орієнтований на будь-який пристрій у цій мережі, тому його мережа, ймовірно, не працює оптимально.


1
Ви сказали, що " xxx0 зарезервовано як мережеву адресу (думайте про це як глобальну адресу або вказівник на всю підмережу) ", але не пояснив, для чого він насправді використовується, а тому не пояснив, чому його не можна використовувати для хоста
Grezzo

2
Оновлено мою публікацію. Підсумок полягає в тому, що присвоєння мережевої адреси пристрою не відповідає специфікаціям, і, хоча ви можете уникнути використання його в невеликій заглушці, ви все одно ризикуєте, що якщо маршрутизатор отримає оновлення програмного забезпечення (або якщо ви зміните маршрутизатори ) що пристрій або вся ваша мережа можуть перестати працювати належним чином.
TheSteven

3

RFC 1122 ("Вимоги до Інтернет-хостів - шари зв'язку") забороняє це:

IP-адреси не можуть мати значення 0 або -1 для будь-якого з полів <Номер хоста>, <Номер мережі> або <Номер підмережі>


1
Правда, наскільки це йде. Але якщо ви дійсно перейдете до розділу 3.3.6, як це радить, ви отримаєте повне пояснення.
Майкл Хемптон

@MichaelHampton Оскільки BSD 4.2 використовує 0 як трансляцію?
Греццо

3
@Grezzo Досить. Ви зациклювались на цьому, тому що 80-ті просто не помруть.
Майкл Хемптон

0

Насправді відповідь є основою підмережі. IP "всі нулі" вашої підмережі в поєднанні з мережевим ідентифікатором використовується для обчислення, куди потрібно надіслати пакет.

У вашому прикладі ви маєте підмережу 255.255.255.0. Будь-який пристрій, який знає протокол TCP / IP, буде використовувати мережну маску в поєднанні з IP-адресою, щоб обчислити, чи призначений пакет для локальної мережі (виконуючи логічну операцію AND) або що він повинен бути відправлений через шлюз / маршрутизатор.

Тому я здогадуюсь, що IP не може бути використана в тому, що вона вже використовується для "визначення" мережевих меж разом із мережевою маскою.


Ви говорите, що " Будь-який пристрій, який знає протокол TCP / IP, буде використовувати мережну маску в поєднанні з IP-адресою, щоб обчислити, чи призначений пакет для локальної мережі (виконавши логічну операцію AND) ", але ANDing 83.23.159.0 з 255.255 .255.0 і ANDing 83.23.159.1 з 255.255.255.0 дають такий же результат (83.23.159.0), тому використовуючи цей розрахунок, щоб з'ясувати, чи призначений він для мережі або маршрутизатора, все ще працює, навіть якщо хост має адресу .0
Grezzo

0

Було запропоновано переслати свою відповідь від 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 у хост-частині адреси). Однак, як це було визначено "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-адреси, буде достатньо лише однієї адреси? Набагато простіше додати другу підмережу або збільшити поточну підмережу, потенційно даючи вам багато адрес, а не лише одну, не вносячи жодних істотних змін до будь-якого програмного забезпечення / обладнання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.