Чи завжди підмережі є суміжними 1-ма? [дублікат]


25

Я розумію основну передумову масок підмережі, таких як 255.255.255.0. Але всі приклади підмережі, які я бачив, були (зліва направо) суміжними знаками 1 (біти HI). Наприклад, 255.255.0.0( /16) перекладається на такі октети:

11111111 . 11111111 . 00000000 . 00000000

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

11111111 . 00010001 . 11111111 . 00000000
  • Чи станеться це коли-небудь? Або неможливо існування підмереж без суміжних 1-х? Якщо так, то чому?
  • Інакше, якщо це можливо зробити, то навіщо ви (кілька конкретних прикладів)?

@MSalters Просто для того, щоб ви знали, автоматичний коментар тепер змінено, щоб сказати "Можливий дублікат ...", тому вам більше не потрібно вводити коментар вручну. ;-)
Кріс Єстер-Янг

Коротка відповідь: так, ви праві.
Восьминіг

Відповіді:


18

У розділі 3.1 в RFC показані дозволені маски в безкласовій міждоменній маршрутизації. Для правильної роботи маршрутизації біти повинні бути суміжними.

Крім того, коли логічно мислити, не було б сенсу мати дивні випадкові мережеві маски.


28

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

RFC 1219 стверджує, що більш рання RFC 950 допускає безперервні біти. Насправді, RFC 950, сторінка 15 (розділ 3) чітко містить приклад, який "ілюструє непоміжні біти підмережі". Однак, немає можливості перетворити такі підмережі в нотації CIDR. Позначення в стилі CIDR - це те, що використовується IPv6 (на принаймні з моменту RFC 1884, сторінка 7 , перше речення розділу 2.4), тому безперервні біти ніколи не були широко підтримувані для мереж IPv6. Метод RFC 1219 вказує, що "біти підмережі (маска = 1) призначаються з найбільш значущих бітових робочих до найменшого ". ( Розділ 3.1 RFC 4632 , згаданий у відповіді Самі, вказує на офіційний стандарт, що обговорює позначення CIDR.)

RFC 1878 на сторінці 2 показано стандартне позначення "маски підмережі" для всіх підмереж IPv4, за винятком /0.

Однак я збираюся докладніше розглянути відповідь Самі, вивчивши "чому" (на конкретному прикладі, як запитували запитання) ...

Деяке обладнання Cisco професійного рівня підтримує щось, що називається «маска підстановки», яка перетворює біти. Отже, нормальна підмережа може бути представлена ​​чимось так званим 00000000.00000000.00000000.11111111.

У масках підстановки Cisco не було правила, що всі нулі повинні пройти першими. Таким чином, ви можете використовувати 00000000.00000000.00000000.11111110.

Це призвело б до створення групи, яка містила б усі IP-адреси з парними номерами.

Це було насправді важливо знати, адже навчання Cisco охоплювало це, і тому процес іспиту на професійні сертифікати Cisco може запитати про таке.

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

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

Я думаю, що Cisco зрештою погодився, що немає ніякого сенсу в таких нетрадиційних масках підмережі, оскільки вони врешті-решт відмовилися від підтримки «масок підстановки». Старіші брандмауэры Pix підтримують «маски підстановки», але нові підрозділи ASA замість цього використовують стандартні «маски підмережі». .

Я б навіть не намагався створити мережу з суміжними «бітами підмережі» в масці, тому що багато програмного забезпечення слід за новими тенденціями / стандартами і відкидало б такий дизайн мережі. Навіть якщо я використовував більш старе програмне забезпечення, я, певно, хотів би, щоб моя мережа була легко модифікована, щоб мати можливість використовувати новіше програмне забезпечення, не потребуючи перепроектування мережі. Отже, суміжні «біти підмережі» - єдиний шлях.

Якщо вам поставлять запитання на тесті, я б впевнено сказав, що всі значки повинні бути на початку адреси. Ось чому хотів би будь-який розумний тестувальник, щоб більшість учнів навчалися в цей день та вік.


+1 - Єдиний раз, коли я бачив маски підстановки, які використовуються без усіх 1-го кінця, - це маски, введені неправильно.
Марк Хендерсон

2

RFC 950 говорить у розділі 2.2:

 To support subnets, it is necessary to store one more 32-bit
  quantity, called my_ip_mask.  This is a bit-mask with bits set in
  the fields corresponding to the IP network number, and additional
  bits set corresponding to the subnet number field.

 The code then becomes:

   IF bitwise_and(dg.ip_dest, my_ip_mask)
                               = bitwise_and(my_ip_addr, my_ip_mask)
         THEN
             send_dg_locally(dg, dg.ip_dest)
         ELSE
             send_dg_locally(dg,
                    gateway_to(bitwise_and(dg.ip_dest, my_ip_mask)))

тому пропозиція стосувалася простої бітової операції, яка не стосується суміжних бітів.

У 1985 році процесор і пам'ять були набагато обмеженішими, тому будь-які складніші операції просто не вписувалися б у час.

Це стає ще більш чітким у розділі 3:

і що в мережі використовується 3-бітове поле підмережі (01011000), тобто адресна маска - 255.255.255.88.

Однак, здається, ці RFC застаріли. Наприклад, у Windows 7 SP1, наприклад, не можна встановити таку маску підмережі:

Суміжна маска підмережі, необхідна в Windows 7

Навіть у Windows XP SP2 це неможливо було більше:

Маска підмережі Windows XP SP2

Клон Windows 98 ReactOS, однак, дозволяє встановити "дивну" мережну маску:

Маска підмережі ReactOS


1

Я згоден з відповіддю @Sami Kuhmonen:

У розділі 3.1 в RFC показані дозволені маски в безкласовій міждоменній маршрутизації. Для правильної роботи маршрутизації біти повинні бути суміжними. Крім того, коли логічно мислити, не було б сенсу мати дивні випадкові мережеві маски.

Однак, навіть якщо це не бажано або дозволено, все-таки можна визначити маску підмережі з непослідовних 1-х. Причина цього:
ідентифікатор мережі та ідентифікатор хоста обчислюються з IP-адреси та маски підмережі, використовуючи двійкові операції AND та XOR. Все інше не має значення.

Я перевірив, що років тому на Win 2000, він працює. Обидва комп'ютери мали 255.160.0.0 маску. Вони були в локальній мережі без маршрутизатора, тому я не можу розповісти про поведінку маршрутизатора (як правило, ви можете встановити маску маршрутизатора лише у своєму веб-інтерфейсі, який відкине його).
Ви також не можете ввести таку "недійсну" маску підмережі у відповідне поле мережевих налаштувань; GUI відмовляється його приймати. Але можна обдурити, змінивши його безпосередньо в реєстрі. Після цього перезавантажте або відключіть + увімкніть NIC, щоб зміни стали активними.
Мета цього всього: ум, мабуть, жодна.


Дякуємо за спільний доступ, але це не є окремою відповіддю. Це повинен бути коментар до відповіді Самі Кухмонена.
agtoever

2
Шлях занадто довгий для коментаря ... Також я не очікую, що це буде позначено як відповідь.
Тобіас Кнаус

@agtoever: Після редагування та додавання додаткових деталей, я думаю, що він зараз кваліфікується як окрема відповідь, оскільки він має багато інформації, яка не є частиною інших відповідей.
Тобіас Кнаус

"Робота над однією реалізацією" , однак, не є гарною відповіддю. І це не просто "працює на одній ОС", ні, ви, мабуть, протестували один конкретний ПК із (що важливо) однією мережею. Це означає, що ви не перевірили, чи працює код маршрутизації підмережі в Windows 2000, і саме там потрібні ідентифікатори мережі. Не могли б ви прокласти маршрут між двома сусідніми 255.160.0.0мережами?
MSalters

@MSalters Робота над однією реалізацією все ще означає, що вона працює. Я не претендував говорити про всі можливі конфігурації ОС. Крім того, як ви думаєте, як пакети потрапляють з одного ПК на інший? Комп'ютер повинен знати маршрут. Тому він повинен обчислити, чи перебуває цільовий комп'ютер в одній підмережі (відправляти пакет безпосередньо) або далеко (запитувати налаштований шлюз для маршруту). // Ні, я не думаю, що я міг би здійснити таку маршрутизацію, тому що ці маски підмережі не були призначені для використання. Я продемонстрував випадок, якщо це працювало, але без іншої підмережі. Можливо, це теж працює, хто знає ...
Тобіас Кнаус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.