Чому мережева адреса не може бути дійсною адресою хоста?


18

Отже ... я вчився на CCNA і таке, і працював з мережею IP щонайменше останні 8 років. Я завжди бачив і мені говорили, що мережева адреса для підмережі не є дійсною адресою хоста. Зараз спочатку я розпочну з того, що я знаю, що це правда. Моє запитання більше ... чи є технічна причина, яку він не може бути використаний, або це було просто довільно узгоджено, коли специфікація була розроблена? Я розумію, чому не можна використовувати адресу широкомовної передачі (тому що вона використовується АКТУАЛЬНО). Річ у тім, що коли я бачу мережеву адресу, яка використовується, це зазвичай тільки в маршрутизації, яка спеціально використовує адреси NETWORK У цьому випадку (мережеві адреси використовуються лише тоді, коли ви очікуєте мережевої адреси) чи є якась технічна причина того, що вони не могли мати, щоб адреса мережі була дійсно дійсною адресою хоста?

Відповіді:


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 можуть мати проблеми з цим.

ОНОВЛЕННЯ: від goblinlord

Відповідно до RFC 1812 (Розділ 5.3.5.2), те, що ми називаємо мережевою адресою, спочатку використовувалося для "спрямованих трансляцій", які направляли б пакет широкомовної передачі до потрібної мережі. Ця функція стала застарілою через атаки SMURF. Функція офіційно була змінена в RFC 2644 . Згодом подальша реалізація повинна мовчки скидати пакети з адресою джерела, як описано (мережева адреса). Хоча це має статися, мені цікаво, скільки реально це зробити.

Це додатково додається до RFC 3021, коли було вирішено / 31 підмережу.


5
@grawity: Не завжди. Тільки в мережі більше / 31. Напр., P2P може мати дві адреси та без широкомовної адреси.
haimg

3
Гммм ... мені подобається перша частина відповіді ... що це артефакт з класних мереж IP. Моя проблема знову з другою частиною полягає в тому, що таблиці маршрутизації використовуються спеціально для маршрутизації до мережі. Як я розумію, таблиця маршрутизації розглядається лише для маршруту до мережі, до якої приймач не включений (dest IP не є частиною вашої підмережі / мережі). Це так ... коли дивишся таблицю маршрутизації, зрозуміло, що адреси в ній є мережевими адресами, а не адресами хостів, тому відокремлюючи це від IP хосту пакета. В реальному трафіку IP-адреса dest чистої адреси ніколи не використовується.
Гоблінлорд

1
Отже ... чи є якась причина спеціально зарезервувати це, якщо ці 2 екземпляри вже відокремлені (мережева адреса в таблиці маршрутизації та dest IP при визначенні того, чи потрібно дивитися на таблицю маршрутизації).
Гоблінлорд

1
@Goblinlord: Жодної офіційної причини, яку я міг би знайти (останні RFC тощо). Однак стільки програмного забезпечення побудовано з припущенням, що мережева адреса "особлива", що на практиці вам краще не використовувати її як IP-адресу хоста.
haimg

1
Існує запис конфігурації cisco, який дозволяє мережевій адресі також бути хостом, який існує вже принаймні 10 років ... Я ніколи не використовував його і навіть не перевіряв, а через можливі проблеми зі стеком, як згадувалося, спеціально didn Я не дозволяю хостам закінчувати .0 або .255 у мережах, за які я відповідав, хоча я не натрапив на іншу мережу чи широкомовні адреси, які використовувались менше / 24, в @Home, а CoreOS хотів видайте середину .0 та .255 як хостів у sanbrunocable's / 23's та / 21s, я вручну зарезервував їх.
Невін Вільямс

5

Тож практична відповідь така: Це дійсно залежить. Це залежить від:

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

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

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

Справа в тому, що я переглядаю і публікую це з моєї мережевої адреси.

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

Ласкаво просимо в реальний світ. Не дозволяйте це відвернути вас від гнатися за незмінно оптимальними ідеалами ... Просто не сподівайтесь на підтримку від "офіційних" каналів чи форумів, якщо ви не готові забруднити руки і присвятити їй свій час і життя, будуючи необхідний консенсус та орієнтація на політику навколо цього.

Отже, я думаю, що намагалися сказати інші афіші: Якщо ви хочете скласти цю офіційну політику і використовувати її у виробництві, ви самостійно. (Але чи не так?) Можливо, нам пощастить, і комп'ютерний інтелект розробить нам IPv8, який сумісний з IPv4 та IPv6 та всіма їхніми зламаними реалізаціями.


Звичайно - коли ви використовуєте свою мережеву адресу, пристрій, якому призначено, може отримувати всі види трансляційного трафіку, оскільки деякі мережеві стеки трактують це як мовлення. Вони, як правило, не сильно заважають, оскільки їх просто мовчки скинули. Мені цікаво, скільки мережевих подвигів покладаються на особливості навколо цього, однак ...
Дагельф

2

Я новачок у мережі, але я також дам свої 2 копійки.

Якщо у мене є підмережа / 28 від xxx0 - xxx15 Відповідно до заздалегідь визначених правил, у нас було б 14 корисних хостів і ще 2. решта - для мережі та мовлення.

Давайте, замість того, щоб дотримуватися правила вище, насправді використовувати всі 16 хостів. Тоді в цьому випадку все було б нормально, жодних проблем. Але якщо комунікація була потрібна поза мережею, то це не було б можливим через відсутність ресурсів для надсилання або отримання інформації.

Я не великий в поясненні, але кажу іншим способом.

Якби я жив у будинку на вулиці, а на вулиці містилося 14 будинків. Проїзд та виїзд для виходу на головну дорогу.

Моя поштова адреса варіюватиметься від 1-14 Особиста вулиця, поза мережевою дорогою.

Це не було б проблемою для пошти. Тепер припустимо, що розробники жадібно додали ще 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

ІД між 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 для будь-якого поля <Номер хоста>, <Номер мережі> або <Номер підмережі>


0

Мережева адреса не вважається адресою хоста, але це лише число. У обмежених адресах областях, таких як мережі "точка-точка", маска / 30 використовується часто, але все ще використовує адреси хоста. Менша практика, але досягає того ж принципу - використовувати маску / 31 та використовувати один кінець як мережеву адресу, а другий - як широкомовний.

Вих.

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