Як працює підмережа IPv4?


439

Це канонічне запитання про підмережі IPv4.

Пов'язані:

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

  • Якщо у мене є мережа, як зрозуміти, як її розділити?
  • Якщо мені надають мережну маску, як я можу знати, що таке діапазон мережі?
  • Іноді є коса риса з наступною цифрою, що це за число?
  • Іноді є маска підмережі, але і маска підстановки, вони здаються однаковими, але вони різні?
  • Хтось згадав щось про те, щоб знати для цього бінарне?

Ця двоскладова відповідь пояснює все, що ви хотіли знати про обчислення адреси IPv4 та багато іншого.
Рон Моупін

Відповіді:


648

IP-підмережі існують, щоб маршрутизатори могли вибрати відповідні пункти призначення для пакетів. Ви можете використовувати IP-підмережі для розбиття великих мереж з логічних причин (брандмауер тощо) або фізичних потреб (менші домени широкомовного зв'язку тощо).

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

Відлік до 1

Якщо ви вже вільно володієте двозначними (базовими 2) позначеннями, ви можете пропустити цей розділ.

Тим із вас, хто залишився: соромтеся за те, що ви не володієте бінарними нотаціями!

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

Підрахунок у двійковій формі настільки простий, оскільки потрібно лише знати, як рахувати до 1!

Подумайте про «одометр» автомобіля, за винятком того, що на відміну від традиційного одометра кожна цифра може нараховувати до 1 від 0. Коли автомобіль свіжий із заводу, одометр пише «00000000».

Коли ви проїхали свою першу милю, одометр проголошує "00000001". Все йде нормально.

Коли ви проїхали другу милю, перша цифра одометра перекидається на "0" (оскільки максимальне значення - "1"), а друга цифра одометра перекидається на "1", завдяки чому одометр читається " 00000010 ". Це виглядає як число 10 у десятковій нотації, але насправді це 2 (кількість миль, якими ви проїхали машину поки що) у двійковій нотації.

Коли ви проїхали третю милю, одометр читає "00000011", оскільки перша цифра одометра знову повертається. Число "11", у двійковому позначенні, те саме, що і десяткове число 3.

Нарешті, коли ви проїхали свою четверту милю, обидві цифри (на яких було написано "1" в кінці третьої милі) відкотуються назад до нульової позиції, а третя цифра котиться до позиції "1", даючи нам " 00000100 ". Ось двійкове представлення десяткового числа 4.

Ви можете запам'ятати все це, якщо хочете, але вам справді потрібно лише зрозуміти, як маленький одометр «перекидається», коли кількість його підрахунків збільшується. Це точно так само, як і в традиційній операції з десятковим одометром, за винятком того, що кожна цифра може бути лише "0" або "1" на нашому вигаданому "бінарному одометрі".

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

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

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

Швидкий бік: Кожна цифра у двійковому числі відома як "біт". Це "b" від "двійкові" і "це" від "цифри". Біт - це двійкова цифра.

Перетворення двійкового числа, як, скажімо, "1101011", у десятковий - це простий процес із зручним маленьким алгоритмом.

Почніть з підрахунку кількості бітів у двійковому номері. У цьому випадку є 7. Зробіть 7 розділів на аркуші паперу (на увазі, в текстовому файлі тощо) і починайте заповнювати їх справа наліво. У крайньому правому слоті введіть число "1", тому що ми завжди будемо починати з "1". У наступному слоті зліва введіть подвійне значення в слоті праворуч (так, "2" в наступному, "4" в наступному) і продовжуйте, поки всі слоти не заповняться. (Ви будете запам'ятовувати ці числа, які є повноваженнями 2, оскільки ви робите це все більше і більше. У мене все в порядку до 131 072, але мені зазвичай потрібен калькулятор або папір).

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

 64    |    32    |    16    |    8    |    4    |    2    |    1    |

Перепишіть біти з двійкового числа під слотами, наприклад:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
  1          1          0         1         0         1         1

Тепер додайте кілька символів та обчисліть відповідь на проблему:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
       +          +          +         +         +         +         =

Виконуючи всю математику, вам слід придумати:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
 64    +    32    +     0    +    8    +    0    +    2    +    1    =   107

Ось і дійшло. "1101011" у десятці дорівнює 107. Це просто прості кроки та легка математика.

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

Скажіть, що ми хочемо перетворити число 218 у бінарне. Починаючи праворуч від аркуша паперу, запишіть цифру «1». Ліворуч подвойте це значення (так, "2") і продовжуйте рух вліво від паперу, подвоюючи останнє значення. Якщо число, яке ви збираєтеся написати, більше, ніж число, що перетворюється, припиніть писати. в іншому випадку продовжуйте подвоювати попереднє число та писати. (Перетворення великої кількості, наприклад 34,157,216,092, у двійкові, використовуючи цей алгоритм, може бути трохи стомлюючим, але це, безумовно, можливо.)

Отже, ви повинні мати на папері:

 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |

Ви перестали писати цифри на 128, оскільки подвоєння 128, що дало б вам 256, було б більшим, ніж число, що перетворюється (218).

Починаючи з лівого лівого числа, напишіть над ним "218" (128) і запитайте себе: "Чи більше 218 або дорівнює 128?" Якщо відповідь "так", скресліть "1" нижче "128". Вище "64" запишіть результат 218 мінус 128 (90).

Дивлячись на "64", запитайте себе: "На 90 більше чи дорівнює 64?" Так, тож ви напишете "1" нижче "64", а потім віднімете 64 від 90 і напишете вище "32" (26).

Якщо ви перейдете до "32", то виявите, що 32 не більше або дорівнює 26. У цьому випадку напишіть "0" нижче "32", скопіюйте число (26) зверху 32 "вище" 16 ", а потім продовжуйте задавати собі те саме питання з рештою номерів.

Коли все закінчиться, у вас повинно бути:

 218         90         26         26        10         2         2         0
 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |
   1          1          0          1         1         0         1         0

Цифри вгорі - це лише нотатки, які використовуються в обчисленні, і для нас мало значать. Проте внизу ви бачите двійкове число "11011010". Звичайно, 218, перетворений у двійковий, - це "11011010".

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

Розщеплення адрес

Подумайте про маршрутизацію IP, як доставку піци.

Коли вас попросять доставити піцу на "123 Main Street", вам, як людині, дуже зрозуміло, що ви хочете зайти до будівлі під номером "123" на вулиці під назвою "Main Street". Неважко дізнатись, що вам потрібно перейти до 100-квартала Майн-стріт, оскільки номер будівлі становить від 100 до 199, а більшість міських кварталів пронумеровані сотнями. Ви "просто знаєте", як розділити адресу.

Маршрутизатори доставляють пакети, а не піцу. Їх робота така ж, як у водія піци: Щоб максимально наблизити вантаж (пакети) до пункту призначення. Маршрутизатор підключений до двох або більше IP-підмереж (щоб бути корисним). Для прийняття рішень щодо доставки маршрутизатор повинен вивчити IP-адреси пакетів і розділити ці адреси адресатів на компоненти "назва вулиці" та "номер будівлі", як і драйвер піци.

Кожен комп'ютер (або "хост") в мережі IP налаштований унікальною IP-адресою та маскою підмережі. Цю IP-адресу можна розділити на компонент "номер будівлі" (наприклад, "123" у наведеному вище прикладі), названий "ідентифікатор хоста" та компонент "назва вулиці" (наприклад, "Головна вулиця" у прикладі вище), який називається " "ідентифікатор мережі". Для наших людських очей легко зрозуміти, де знаходиться номер будівлі та назва вулиці у "123 Main Street", але важче побачити цей поділ у "10.13.216.41 із маскою підмережі 255.255.192.0".

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

Почніть із запису IP-адреси у двійковій формі (використовуйте калькулятор, якщо ви ще не навчилися робити це в голові, але зробіть замітку, дізнайтеся, як це зробити - це дійсно, дуже просто і справляє враження протилежної статі на сторони):

      10.      13.     216.      41
00001010.00001101.11011000.00101001

Випишіть маску підмережі також у двійковій формі:

     255.     255.     192.       0
11111111.11111111.11000000.00000000

Написані поруч, ви бачите, що точка в масці підмережі, де "1" стоп "вирівнюється" до точки в IP-адресі. Це сенс, що мережевий ідентифікатор та ідентифікатор хоста розділилися. Отже, у цьому випадку:

      10.      13.     216.      41
00001010.00001101.11011000.00101001 - IP address
11111111.11111111.11000000.00000000 - subnet mask
00001010.00001101.11000000.00000000 - Portion of IP address covered by 1's in subnet mask, remaining bits set to 0
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

Маршрутизатори використовують маску підмережі, щоб "замаскувати" біти, охоплені 1-ю в IP-адресі (замінюючи біти, які не "замасковані" на 0), щоб витягнути ідентифікатор мережі:

      10.      13.     192.       0
00001010.00001101.11000000.00000000 - Network ID

Так само, використовуючи маску підмережі, щоб "замаскувати" біти, охоплені 0 у IP-адресі (замінивши біти, які не "замасковані" на 0 знову), маршрутизатор може витягти ідентифікатор хоста:

       0.       0.      24.      41
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

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

Тепер, коли ви можете розділити IP-адреси та маски підмережі на ідентифікатори хостів та ідентифікатори мережі, ви можете маршрутизувати IP так, як робить маршрутизатор.

Більше термінології

Ви побачите маски підмережі, написані по всьому Інтернету та протягом усієї іншої частини цієї відповіді як (IP / номер). Ця нотація відома як "Безкласова маршрутизація між доменами" (CIDR). "255.255.255.0" складається з 24 біт 1 на початку, і швидше записати це як "/ 24", ніж як "255.255.255.0". Щоб перетворити номер CIDR (наприклад, "/ 16") у маску з пунктирною десятковою підмережею, просто випишіть це число 1, розділіть його на групи з 8 біт і перетворіть у десяткові. (Наприклад, "/ 16" - "255.255.0.0").

Ще в "старі часи" маски підмережі не були вказані, а були отримані, переглядаючи певні біти IP-адреси. Наприклад, IP-адреса, що починається з 0 - 127, мала маску підмережі 255.0.0.0 (називається IP-адресою "класу А").

Ці маски на увазі підмережі сьогодні не використовуються, і я не рекомендую більше дізнаватися про них, якщо у вас не трапиться мати справу зі дуже старим обладнанням або старими протоколами (наприклад, RIPv1), які не підтримують безкласову IP-адресування. Я не збираюсь більше згадувати ці "класи" адрес, оскільки це сьогодні не застосовується і може заплутати.

Деякі пристрої використовують позначення під назвою "маски підстановки". "Маска підстановки" - це не що інше, як маска підмережі з усіма 0, де було б 1, і з 1, де було б 0. "Маска підстановки" / / 26 є:

 11111111.11111111.11111111.11000000 - /26 subnet mask
 00000000.00000000.00000000.00111111 - /26 "wildcard mask"

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

Як працює маршрутизатор

Як я вже говорив раніше, маршрутизатори IP мають аналогічну роботу з водієм доставки піци, оскільки їм потрібно доставити вантаж (пакети) до місця призначення. Коли він представлений пакетом, пов'язаним з адресою 192.168.10.2, IP-маршрутизатору необхідно визначити, який з його мережевих інтерфейсів найкраще набере цей пакет ближче до місця призначення.

Скажімо, ви IP-маршрутизатор і у вас підключені інтерфейси до вас:

  • Ethernet0 - 192.168.20.1, маска підмережі / 24
  • Ethernet1 - 192.168.10.1, маска підмережі / 24

Якщо ви отримуєте пакет для доставки з адресою призначення "192.168.10.2", досить легко сказати (людськими очима), що пакет повинен бути відправлений на інтерфейс Ethernet1, оскільки адреса інтерфейсу Ethernet1 відповідає призначенню пакета адреса. Усі комп'ютери, приєднані до інтерфейсу Ethernet1, матимуть IP-адреси, починаючи з "192.168.10.", Тому що мережевий ідентифікатор IP-адреси, призначеної для вашого інтерфейсу Ethernet1, становить "192.168.10.0".

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

  • Ідентифікатор мережі: 192.168.20.0 (11000000.10101000.00010100.00000000) - 24-бітна маска підмережі - Інтерфейс Ethernet0
  • Ідентифікатор мережі: 192.168.10.0 (11000000.10101000.00001010.00000000) - 24-бітна маска підмережі - Інтерфейс Ethernet1

Для нашого вхідного пакету, прив’язаного до "192.168.10.2", нам потрібно лише перетворити адресу цього пакета в двійкову (як люди - маршрутизатор отримує його як бінарний від дроту для початку) і намагатися зіставити його з кожною адресою в нашій маршрутизації таблиця (до кількості біт у масці підмережі), поки ми не збігнемося із записом.

  • Місце вхідного пакету: 11000000.10101000.00001010.00000010

Порівнюючи це із записами в нашій таблиці маршрутів:

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00010100.00000000 - Interface Ethernet0
!!!!!!!!.!!!!!!!!.!!!????!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00001010.00000000 - Interface Ethernet1, 24 bit subnet mask
!!!!!!!!.!!!!!!!!.!!!!!!!!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

Запис для Ethernet0 відповідає першим 19 бітам штрафу, але потім припиняє відповідати. Це означає, що це не належний інтерфейс призначення. Ви можете бачити, що інтерфейс Ethernet1 відповідає 24 бітам адреси призначення. А-а-а! Пакет пов'язаний для інтерфейсу Ethernet1.

У маршрутизаторі реального життя таблиця маршрутизації сортується таким чином, що найдовші маски підмережі перевіряються на відповідність спочатку (тобто найбільш конкретні маршрути), і чисельно, щоб, як тільки знайдено збіг, пакет може бути переведений і ніяких подальших спроб узгодження не потрібно (це означає, що 192.168.10.0 буде вказано першим, а 192.168.20.0 ніколи не буде перевірено). Тут ми трохи спростимо це. Фантастичні структури даних та алгоритми роблять швидші маршрутизатори IP, але прості алгоритми дадуть однакові результати.

Статичні маршрути

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

Почнемо, називаючи наш роутер із попередніх прикладів "Маршрутизатор А". Ви вже знаєте таблицю маршрутизації RouterA як:

  • Ідентифікатор мережі: 192.168.20.0 (11000000.10101000.00010100.00000000) - маска підмережі / 24 - Інтерфейс RouterA-Ethernet0
  • Ідентифікатор мережі: 192.168.10.0 (11000000.10101000.00001010.00000000) - маска підмережі / 24 - Інтерфейс RouterA-Ethernet1

Припустимо, є ще один маршрутизатор, "Маршрутизатор B", з IP-адресами 192.168.10.254/24 та 192.168.30.1/24, призначеними для його інтерфейсів Ethernet0 та Ethernet1. Він має таку таблицю маршрутизації:

  • Ідентифікатор мережі: 192.168.10.0 (11000000.10101000.00001010.00000000) - маска підмережі / 24 - Інтерфейсний маршрутизаторB-Ethernet0
  • Ідентифікатор мережі: 192.168.30.0 (11000000.10101000.00011110.00000000) - маска підмережі / 24 - Інтерфейсний маршрутизаторB-Ethernet1

У симпатичному мистецтві ASCII мережа виглядає так:

               Interface                      Interface
               Ethernet1                      Ethernet1
               192.168.10.1/24                192.168.30.254/24
     __________  V                  __________  V
    |          | V                 |          | V
----| ROUTER A |------- /// -------| ROUTER B |----
  ^ |__________|                 ^ |__________|
  ^                              ^
Interface                      Interface
Ethernet0                      Ethernet0
192.168.20.1/24                192.168.10.254/24

Ви можете бачити, що маршрутизатор B знає, як «дістатися» до мережі, 192.168.30.0/24, про що маршрутизатор A нічого не знає.

Припустимо, що ПК з IP-адресою 192.168.20.13, приєднаний до мережі, підключеної до інтерфейсу Ethernet0 маршрутизатора A, відправляє пакет на маршрутизатор A для доставки. Наш гіпотетичний пакет призначений для IP-адреси 192.168.30.46, це пристрій, приєднаний до мережі, підключеної до інтерфейсу Ethernet1 маршрутизатора B.

З таблицею маршрутизації, показаною вище, жоден запис у таблиці маршрутизації маршрутизатора A не відповідає призначенню 192.168.30.46, тому маршрутизатор A поверне пакет на ПК, що надсилає повідомлення, з повідомленням "Мережа призначення недоступна".

Щоб зробити маршрутизатор «обізнаним» про існування мережі 192.168.30.0/24, ми додамо наступний запис до таблиці маршрутизації на маршрутизаторі A:

  • Ідентифікатор мережі: 192.168.30.0 (11000000.10101000.00011110.00000000) - маска підмережі / 24 - Доступно через 192.168.10.254

Таким чином, маршрутизатор A має запис таблиці маршрутизації, який відповідає призначенню 192.168.30.46 нашого прикладу. Цей запис у таблиці маршрутизації фактично говорить: "Якщо ви отримали пакет, прив'язаний до 192.168.30.0/24, надішліть його на 192.168.10.254, оскільки він знає, як з цим боротися". Це аналогічна акція "роздача піци на стійці реєстрації", про яку я згадував раніше - передаючи пакунок іншому, хто знає, як наблизити його до місця призначення.

Додавання запису до таблиці маршрутизації "від руки" відоме як додавання "статичного маршруту".

Якщо маршрутизатор B хоче доставити пакети до мережі підключення 192.168.20.0 підмережі 255.255.255.0, йому знадобиться також запис у таблиці маршрутизації:

  • Ідентифікатор мережі: 192.168.20.0 (11000000.10101000.00010100.00000000) - маска підмережі / 24 - Доступно через: 192.168.10.1 (IP-адреса маршрутизатора A в мережі 192.168.10.0)

Це створило б шлях для доставки між мережею 192.168.30.0/24 та мережею 192.168.20.0/24 через мережу 192.168.10.0/24 між цими маршрутизаторами.

Ви завжди хочете бути впевнені, що маршрутизатори з обох сторін такої "проміжної мережі" мають запис таблиці маршрутизації для "дальнього кінця" мережі. Якби маршрутизатор B у нашому прикладі не мав запис таблиці маршрутизації для мережі "далекого кінця" 192.168.20.0/24, приєднаної до маршрутизатора A, наш гіпотетичний пакет з ПК за адресою 192.168.20.13 потрапив би до пристрою призначення за адресою 192.168.30.46, але будь-яка відповідь, яку 192.168.30.46 намагалися відправити назад, буде повернута маршрутизатором B як "Мережа призначення недоступна". Одностороння комунікація, як правило, небажана. Завжди будьте впевнені, що думаєте про рух потоку в обох напрямках, коли думаєте про спілкування в комп'ютерних мережах.

З статичних маршрутів ви можете отримати багато пробігу. Динамічні протоколи маршрутизації, такі як EIGRP, RIP тощо, насправді є не що інше, як спосіб маршрутизаторів обмінюватись інформацією про маршрутизацію між собою, що насправді може бути налаштовано статичними маршрутами. Однією з найбільших переваг використання динамічних протоколів маршрутизації над статичними маршрутами є те, що протоколи динамічної маршрутизації можуть динамічно змінювати таблицю маршрутизації на основі мережевих умов (використання пропускної здатності, інтерфейс "спад" тощо) і, таким чином, використання динамічного Протокол маршрутизації може призвести до конфігурації, яка "обводить" збої або вузькі місця в мережевій інфраструктурі. (Протоколи динамічної маршрутизації , однак , НАЙКЛЮЧІ за межами цієї відповіді.)

Ви не можете дістатися звідси

У випадку нашого прикладу маршрутизатора A, що відбувається, коли входить пакет, пов'язаний для "172.16.31.92"?

Дивлячись на таблицю маршрутизації маршрутизатора, жоден інтерфейс призначення або статичний маршрут не відповідають першим 24 бітам 172.18.31.92 (що становить 10101100.00010000.00011111.01011100, BTW).

Як ми вже знаємо, маршрутизатор A поверне пакет відправнику через повідомлення "Мережа недоступної мережі".

Скажіть, що за адресою "192.168.20.254" сидить ще один маршрутизатор (маршрутизатор C). Маршрутизатор C має підключення до Інтернету!

                              Interface                      Interface                      Interface
                              Ethernet1                      Ethernet1                      Ethernet1
                              192.168.20.254/24              192.168.10.1/24                192.168.30.254/24
                    __________  V                  __________  V                  __________  V
((  heap o  ))     |          | V                 |          | V                 |          | V
(( internet )) ----| ROUTER C |------- /// -------| ROUTER A |------- /// -------| ROUTER B |----
((   w00t!  ))   ^ |__________|                 ^ |__________|                 ^ |__________|
                 ^                              ^                              ^
               Interface                      Interface                      Interface
               Ethernet0                      Ethernet0                      Ethernet0
               10.35.1.1/30                   192.168.20.1/24                192.168.10.254/24

Було б непогано, якби маршрутизатор A міг би маршрутизувати пакети, які не відповідають жодному локальному інтерфейсу аж до маршрутизатора C, таким чином, щоб маршрутизатор C міг відправити їх в Інтернет. Введіть маршрут «шлюз за замовчуванням».

Додайте запис у кінці нашої таблиці маршрутів так:

  • Ідентифікатор мережі: 0.0.0.0 (00000000.00000000.00000000.00000000) - маска підмережі / 0 - маршрутизатор призначення: 192.168.20.254

Коли ми намагаємось зіставити "172.16.31.92" з кожним записом таблиці маршрутизації, ми в кінцевому підсумку потрапляємо на цей новий запис. Спочатку це трохи неприємно. Ми шукаємо, щоб відповідати нульовим бітам адреси призначення із ... зачекати ... що? Збіг нульових біт? Отже, ми взагалі не шукаємо сірника. Цей запис таблиці маршрутів в основному говорить: "Якщо ви потрапите сюди, а не відмовляєтесь від доставки, надішліть пакет на маршрутизатор за номером 192.168.20.254 і дозвольте йому впоратися".

192.168.20.254 цей напрямок , яке ми НЕ знаємо , як доставити пакет. Якщо ви стикаєтесь з пакетом, призначеним для пункту призначення, для якого у нас немає конкретної таблиці маршрутизації, ця запис "шлюзу за замовчуванням" завжди буде відповідати (оскільки відповідає нульовим бітам адреси призначення) і надає нам місце "останньої інстанції", яке ми можемо відправити пакети для доставки. Іноді ви почуєте шлюз за замовчуванням, який називається "крайнім шлюзом".

Для того, щоб маршрут шлюзу за замовчуванням був ефективним, він повинен звернутися до маршрутизатора, який можна отримати за допомогою інших записів у таблиці маршрутизації. Якщо ви спробували вказати на маршрутизаторі A шлюз за замовчуванням 192.168.50.254, доставка, наприклад, такий шлюз за замовчуванням не вдасться. 192.168.50.254 - це не адреса, яку маршрутизатор A знає, як доставити пакети для використання будь-якого іншого маршруту в таблиці маршрутизації, тому така адреса була б неефективною як шлюз за замовчуванням. Це можна сказати стисло: Шлюз за замовчуванням повинен бути встановлений для адреси, яка вже є доступною, використовуючи інший маршрут у таблиці маршрутів.

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

Містобудування та маршрутизація IP

Розбиття підмережі IP на менші підмережі IP - це містобудівне планування. У міському плануванні районування використовується для адаптації до природних особливостей ландшафту (річки, озера тощо), для впливу на транспортні потоки між різними частинами міста та для поділу різних типів землекористування (промислових, житлових тощо) . IP-підмережа насправді майже однакова.

Є три основні причини, через які ви підмережу в мережі:

  • Можливо, ви хочете спілкуватися на різних відміну від засобів масової інформації. Якщо у вас є T1 WAN-з'єднання між двома будівлями, IP-роутери можуть бути розміщені на кінцях цих з'єднань, щоб полегшити зв'язок по T1. Мережі на кожному кінці (і, можливо, "проміжна" мережа на самому T1) будуть призначені для унікальних IP-підмереж, щоб маршрутизатори могли приймати рішення про те, який трафік слід направляти через лінію T1.

  • У мережі Ethernet ви можете використовувати підмережу для обмеження кількості трансляційного трафіку в певній частині мережі. Протоколи рівня додатків використовують можливість широкомовної передачі Ethernet для дуже корисних цілей. По мірі того, як ви все більше й більше хостів набираються в одну і ту ж мережу Ethernet, відсоток трансляційного трафіку по проводу (або в ефірі, в бездротовій Ethernet) може збільшитися до такого моменту, що створить проблеми з доставкою не трансляційного трафіку. (За старих часів трафік трансляції міг переповнити центральний процесор хостів, змусивши їх вивчити кожен пакет мовлення. Це сьогодні менш вірогідне.) Надмірний трафік на комутованій Ethernet також може надходити у вигляді "затоплення кадрів до невідомих напрямків". Ця умова викликана тим, що комутатор Ethernet не може відслідковувати кожне місце призначення в мережі, і це є причиною того, що комутовані мережі Ethernet не можуть масштабуватись до нескінченної кількості хостів. Ефект затоплення кадрів до невідомих напрямків аналогічний ефекту надлишкового трансляційного трафіку для цілей підмережі.

  • Можливо, ви хочете "поліцейські" типи трафіку, що протікає між різними групами хостів. Можливо, у вас є пристрої сервера друку, і ви хочете лише, щоб авторизовані серверні комп'ютери черги друку надсилали їм завдання. Обмежуючи трафік, дозволений для надходження до підмережі пристрою сервера друку, користувачі не можуть налаштувати свої ПК для спілкування безпосередньо з пристроями сервера друку, щоб обходити облік друку. Ви можете розмістити пристрої сервера друку в підмережу все для себе і створити правило в маршрутизаторі або брандмауері, приєднаному до цієї підмережі, щоб контролювати список хостів, дозволених надсилати трафік на пристрої сервера друку. (Як маршрутизатори, так і брандмауери зазвичай можуть приймати рішення про те, як чи потрібно доставляти пакет, грунтуючись на вихідних та цільових адресах пакета. Брандмауери, як правило, є підвидом маршрутизатора з нав’язливою особистістю. Вони можуть бути дуже занепокоєні корисним навантаженням пакетів, тоді як маршрутизатори, як правило, ігнорують корисні навантаження та просто доставляють пакети.)

Плануючи місто, ви можете планувати, як вулиці перетинаються одна з одною, і можете використовувати поворотні, односторонні та тупикові вулиці для впливу на потоки руху. Можливо, ви хочете, щоб головна вулиця була завдовжки 30 блоків, в кожному блоці - до 99 будівель. Планувати нумерацію вулиць досить просто так, щоб кожен блок на головній вулиці мав діапазон номерів вулиць, що збільшуються на 100 для кожного блоку. Дуже легко дізнатися, яким повинен бути "стартовий номер" у кожному наступному блоці.

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

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

Продовження: Як працює підмережа IPv4?

(Так ... ми досягли максимального розміру відповіді (30000 символів).)


13
@ Джозеф: Це лекція, яку я занадто багато разів виголошував для власного блага. > посмішка <Я перегляну твій бінарний розділ. Мені не подобається вчити математику (що насправді є розумінням бінарного - підрахунок у базі 2), тому що я не дуже добре в цьому.
Еван Андерсон

2
Єдине питання, що стосується розбиття відповіді, полягає в тому, що потрібно зрозуміти, чому існує підмережа (маршрутизація IP), перш ніж можна зрозуміти, як ефективно розбити мережу IP на підмережі. Я ніколи не знаходив хорошого способу обговорити одну тему ізольовано від іншої. (Дійсно, проектування мережі IP з VLSM відбувається природно і "має сенс" після того, як ви зрозумієте маршрутизацію IP ...)
Еван Андерсон

28
Не розбивай це.
Джозеф Керн

3
+1 за найвичерпнішу публікацію, яку коли-небудь бачили на сервері за замовчуванням
Скотт Лундберг,

3
Оновлено лише метафорою Одометра. Тепер я знаю, як пояснити, як бінарний працює на людей.
фузіон

142

Продовження з: Як працює підмережа IPv4?

Ваш Інтернет-провайдер надає вам діапазон ідентифікатора мережі 192.168.40.0/24 (11000000.10101000.00101000.00000000). Ви знаєте, що ви хочете використовувати брандмауер / маршрутизатор для обмеження зв'язку між різними частинами вашої мережі (серверами, клієнтськими комп'ютерами, мережевим обладнанням) і, таким чином, ви хочете розбити ці різні частини вашої мережі в підмережі IP (між якими брандмауер / маршрутизатор може переходити між ними).

Ти маєш:

  • 12 серверних комп’ютерів, але ви можете отримати до 50% більше
  • 9 вимикачів
  • 97 клієнтських комп'ютерів, але ви можете отримати більше

Який хороший спосіб розбити 192.168.40.0/24 на ці шматки?

Розмірковуючи рівні сили в два і працюючи з більшою кількістю можливих пристроїв, ви можете придумати:

  • 18 серверних комп'ютерів - Наступна найбільша потужність з двох - 32
  • 9 вимикачів - Наступна найбільша потужність з двох - 16
  • 97 клієнтських комп'ютерів - Наступна найбільша потужність двох - 128

У даній підмережі IP є дві зарезервовані адреси, які не можуть бути використані як дійсні IP-адреси пристрою - адреса з усіма нулями в частині ідентифікатора хоста та адреса з усіма ними в частині ідентифікатора хоста. Таким чином, для будь-якої заданої підмережі IP кількість доступних адрес хостів дорівнює потужності кількості 32 мінус кількість бітів у масці підмережі мінус 2. Отже, у випадку 192.168.40.0/24 ми Видно, що маска підмережі має 24 біта. Це залишає 8 біт доступними для ідентифікаторів хоста. Ми знаємо, що потужність від 2 до 8 - це 256-- це означає, що 256 можливих комбінацій бітів вміщуються в слот шириною 8 біт. Оскільки комбінації "11111111" та "00000000" цих 8 біт не дозволяються для ідентифікаторів хоста, це залишає нам 254 можливих хостів, які можна призначити в мережі 192.168.40.0/24.

З цих 254 хостів, схоже, ми можемо помістити клієнтські комп'ютери, комутатори та серверні комп'ютери в цей простір, правда? Давай спробуємо.

У вас є 8 біт маски підмережі, щоб "грати з" (решта 8 біт IP-адреси 192.168.40.0/24, не охоплені маскою підмережі, наданою вашим провайдером). Ми повинні розробити спосіб використання цих 8 біт для створення декількох унікальних мережевих ідентифікаторів, які можуть вмістити пристрої вище.

Почніть з найбільшої мережі - клієнтських комп'ютерів. Ви знаєте, що наступна більша потужність двох з числа можливих пристроїв - 128. Число 128, у двійковій формі, - «10000000». На щастя для нас, що вписується у 8-бітовий слот, який ми маємо безкоштовно (якщо цього не сталося, це було б свідченням того, що наша стартова підмережа занадто мала для розміщення всіх наших пристроїв).

Візьмемо наш ідентифікатор мережі, як це надає наш Інтернет-провайдер, і додамо до нього один біт маски підмережі, розділивши його на дві мережі:

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.00000000 - Old subnet mask (/24)

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

Подивіться на це, поки це не має сенсу. Ми збільшили маску підмережі на один біт в довжину, внаслідок чого ідентифікатор мережі покрив один біт, який би використовувався для ідентифікатора хоста. Оскільки цей один біт може бути нульовим або одним, ми ефективно розділили нашу мережу 192.168.40.0 на дві мережі. Перша дійсна IP-адреса в мережі 192.168.40.0/25 буде першим ідентифікатором хоста з "1" в самому правому біті:

11000000.10101000.00101000.00000001 - 192.168.40.1 - First valid host in the 192.168.40.0/25 network

Перший дійсний хост в мережі 192.168.40.128 також буде першим ідентифікатором хоста з "1" в самому правому біті:

11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid host in the 192.168.40.128/25 network

Останнім дійсним хостом у кожній мережі буде ідентифікатор хоста з кожним бітом, за винятком самого правого біта, встановленого на "1":

11000000.10101000.00101000.01111110 - 192.168.40.126 - Last valid host in the 192.168.40.0/25 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid host in the 192.168.40.128/25 network

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

  • Клієнтські комп'ютери - 192.168.40.0/25 - Дійсні IP-адреси: 192.168.40.1 - 192.168.40.126

Тепер, щоб зламати другу мережу для наших серверів і комутаторів, робимо те саме.

У нас є 12 серверних комп’ютерів, але ми можемо придбати ще 6. Давайте плануємо на 18, що залишає нам наступну найвищу потужність 2 як 32. У двійковій системі 32 - "100000", що становить 6 біт. У нас залишилось 7 біт маски підмережі в 192.168.40.128/25, тому у нас є достатньо бітів, щоб продовжувати "грати". Додавання ще одного біта маски підмережі дає нам ще дві мережі:

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - Old subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid host in the 192.168.40.128/26 network
11000000.10101000.00101000.10111110 - 192.168.40.190 - Last valid host in the 192.168.40.128/26 network

11000000.10101000.00101000.11000000 - 192.168.40.192 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.11000001 - 192.168.40.193 - First valid host in the 192.168.40.192/26 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid host in the 192.168.40.192/26 network

Отже, зараз ми розділили 192.168.40.128/25 на ще дві мережі, кожна з яких має 26 біт маски підмережі або загалом 62 можливих ідентифікатора хоста-- 2 ^ (32 - 26) - 2.

Це означає, що обидві ці мережі мають достатньо адрес для наших серверів та комутаторів! Давайте зробимо примітки:

  • Сервери - 192.168.40.128/26 - Дійсні IP-адреси: 192.168.40.129 - 192.168.40.190
  • Вимикачі - 192.168.40.192/26 - Дійсні IP-адреси: 192.168.40.193 - 192.168.40.254

Ця методика називається маскуванням підмережі змінної довжини (VLSM) і, якщо її правильно застосувати, викликає у "основних маршрутизаторів" менші таблиці маршрутизації (через процес, який називається "підведення підсумків маршруту"). Що стосується нашого Інтернет-провайдера в цьому прикладі, вони можуть бути абсолютно невідомими, як ми підмережі 192.168.40.0/24. Якщо їх маршрутизатор має пакет, прив’язаний до 192.168.40.206 (один з наших комутаторів), їм потрібно лише знати, щоб передати його нашому маршрутизатору (оскільки 192.168.40.206 відповідає ідентифікатору мережі та масці підмережі 192.168.40.0/24 у таблиці маршрутизації їх маршрутизатора. ) і наш маршрутизатор доставить його до місця призначення. Це не дозволяє нашим маршрутам підмережі залишатись поза їх таблицями маршрутизації. (Я тут спрощую, але ви розумієте.)

Таким же чином можна планувати дуже географічно великі мережі. Поки ви робите правильне "містобудівне планування" наперед (передбачуючи кількість хостів у кожній підмережі з певною точністю та увагою до майбутнього), ви можете створити велику ієрархію маршрутизації, яка за основними маршрутизаторами "резюмує "на дуже малу кількість маршрутів. Як ми бачили вище, чим більше маршрутів знаходиться в таблиці маршрутизації маршрутизатора, тим повільніше він виконує свою роботу. Розробка IP-мережі з VLSM та збереження малих таблиць маршрутизації - це хороша річ (тм).

Нереалізм прикладів

Вигаданий світ у цій відповіді, очевидно, вигаданий. Зазвичай ви можете створювати підмережі на сучасних комутованих мережах Ethernet з більшою кількістю хостів, ніж 254 (залежно від профілю трафіку). Як було зазначено в коментарях, використання / 24 мереж між маршрутизаторами не відповідає реальному життю (tm). Це робить приємні приклади, але є марною витратою адресного простору. Як правило, мережа a / 30 або a / 31 (див. Http://www.faqs.org/rfcs/rfc3021.html для отримання детальної інформації про те, як / 31 працює; вони точно виходять за рамки цієї відповіді) посилання, які суворо посилаються між двома маршрутизаторами.


Невелика помилка: Код одразу після "Останній дійсний хост ..." повертається назад, називаючи його "першим дійсним хостом". Я припускаю, що все-таки слід сказати "останній".
JoeCool1986

@ JoeCool1986 - Хороший улов.
Еван Андерсон

2
Я збираюся підтримати цю відповідь, щоб переконатися, що дві відповіді зберігаються в порядку.
l46kok

З тієї частини, де ви створюєте дві підмережі з 192.168.40.128 та створюєте мережевий ідентифікатор 192.168.40.192, звідки цей 192?
user6607

@ user6607 Підмережі рахуються назад (без прогалин). Наприклад, перша підмережа 0представлена ​​як 00000000. Друга підмережа є 128такою, 10000000а третя підмережа 192представлена ​​як 11000000тощо. Просто продовжуйте рахувати назад, щоб знайти нові підмережі.
Джозеф Керн

76

Підмережа

Підмережа не є складною, але це може залякати. Тож почнемо з найпростішого можливого кроку. Навчитися рахувати у двійковій формі.

Двійкові

Двійкова система - це система рахунку 2. Складається лише з двох чисел (1 і 0). Підрахунок виручки таким чином.

1 = 001 ( 0 + 0 + 1 = 1)
2 = 010 ( 0 + 2 + 0 = 2)
3 = 011 ( 0 + 2 + 1 = 3)
4 = 100 ( 4 + 0 + 0 = 4)
5 = 101 ( 4 + 0 + 1 = 5)

Отже, якщо ви просто уявляєте, що кожен 1 є власником місця для значення (усі бінарні значення - це сили двох)

1     1     1     1     1 = 31
16  + 8  +  4  +  2  +  1 = 31

Отже ... 100000 = 32. І 10000000 = 128. І 11111111 = 255.

Коли я кажу: "У мене маска підмережі 255.255.255.0", я дійсно маю на увазі: "У мене є маска підмережі 11111111.11111111.11111111.00000000". Ми використовуємо підмережі як коротку руку.

Періоди в адресі розділяють кожні 8 двійкових цифр (октет). Ось чому IPv4 відомий як 32-бітний (8 * 4) адресний простір.

Чому підмережа?

Адреси IPv4 (192.168.1.1) не вистачають. Підмережа дає нам змогу збільшити кількість доступних мереж (або хостів). Це з адміністративних та технічних причин.

Кожна IP-адреса розбита на дві окремі частини - мережу та хост. За замовчуванням адреса класу C (192.168.1.1) використовує перші 3 октети (192.168.1) для мережевої частини адреси. і 4-й октет (.1) як головна частина.

За замовчуванням ip-адреса та маска підмережі для адреси класу C виглядають приблизно так

IP     192.168.1.1 
Subnet 255.255.255.0

У двійковій формі, як це

IP     11000000.10101000.00000001.00000001
Subnet 11111111.11111111.11111111.00000000

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

Враховуючи, що у мене є один октет для моєї хост-частини (у наведеному вище прикладі) Я можу ТІЛЬКИ колись мати 256 хостів (256 - це максимальне значення октету, рахуючи від 0). Але є ще одна невелика хитрість: потрібно відняти 2 адреси хостів із доступних (зараз 256). Перша адреса в діапазоні буде для мережі (192.168.1.0), а останньою адресою в діапазоні буде трансляція (192.168.1.255). Таким чином, ви дійсно маєте 254 доступних адреси для хостів в одній мережі.

Тематичне дослідження

Скажімо, я дав вам наступний аркуш паперу.

Create 4 networks with 192.168.1.0/24.

Давайте розглянемо це. / 24 називається позначенням CIDR. Замість того, щоб посилатися на 255.255.255.0, ми просто посилаємося на біти, необхідні для мережі. У цьому випадку нам потрібно 24 біт (3 * 8) з 32-бітної адреси. Виписання цього у двійковому

11111111.11111111.11111111.00000000 = 255.255.255.0
8bits   + 8bits  + 8bits  + 0bits   = 24bits

Далі ми знаємо, що нам потрібно розібратися, скільки підмереж нам потрібно. Виглядає як 4. Оскільки нам потрібно створити більше мереж (на даний момент у нас є лише одна), можна перевернути деякі біти

11111111.11111111.11111111.00000000 = 255.255.255.0   = 1 Network OR /24
11111111.11111111.11111111.10000000 = 255.255.255.128 = 2 Networks OR /25
11111111.11111111.11111111.11000000 = 255.255.255.192 = 4 Networks (remember powers of 2!) OR /26

Тепер, коли ми визначилися з / 26, почнемо виділяти хостів. Трохи проста математика:

32(bits) - 26(bits) = 6(bits) for host addresses.

У кожній мережі потрібно виділити 6 хотів. Пам'ятаючи, що нам потрібно відняти 2 для кожної мережі.

h = host bits    
2^h - 2 = hosts available

2^6 - 2 = 62 hosts 

Finally we have 62 hosts in 4 networks, 192.168.1.0/26

Тепер нам потрібно розібратися, куди їдуть господарі. Назад до бінарного!

11111111.11111111.11111111.00,000000 [the comma is the new network/hosts division]

Begin to calculate:

11000000.10101000.00000001.00,000000 = 192.168.1.0 [First IP = Network Adress]
11000000.10101000.00000001.00,000001 = 192.168.1.1 [First Host IP]
11000000.10101000.00000001.00,000010 = 192.168.1.2 [Second Host IP]
11000000.10101000.00000001.00,000011 = 192.168.1.3 [Third Host IP]

And so on ... until ...

11000000.10101000.00000001.00,111110 = 192.168.1.62 [Sixty Second Host IP]
11000000.10101000.00000001.00,111111 = 192.168.1.63 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.01,000000 = 192.168.1.64 [First IP = Network Address]
11000000.10101000.00000001.01,000001 = 192.168.1.65 [First Host IP]
11000000.10101000.00000001.01,000010 = 192.168.1.66 [Second Host IP]

And so on ... until ...

11000000.10101000.00000001.01,111110 = 192.168.1.126 [Sixty Second Host IP]
11000000.10101000.00000001.01,111111 = 192.168.1.127 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.10,000000 = 192.168.1.128 [First IP = Network Address]
11000000.10101000.00000001.10,000001 = 192.168.1.129 [First Host IP]

Etc ...

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

Дикі картки Маска підказки - це перевернута маска підмережі.

11111111.11111111.11111111.11000000 = 255.255.255.192 [Subnet]
00000000.00000000.00000000.00111111 = 0.0.0.63 [Wild Card]

Далі

Google для термінів "супермережа" та "VLSM (маска підмережі змінної довжини)" для більш складних тем.

Тепер я бачу, що мені було дуже довго відповідати ... зітхати


1
"З огляду на те, що у мене є один октет для моєї частини хоста (у наведеному вище прикладі). Я можу ВІНШЕ мати 255 хостів (255 - максимальне значення октету). Але є ще одна невелика хитрість: вам потрібно відняти 2 адреси хоста з доступних (зараз 255). Перша адреса в діапазоні буде для мережі (192.168.1.0), а останньою адресою в діапазоні буде трансляція (192.168.1.255). Отже, у вас дійсно є 253 доступних адреси для хостів в одній мережі. "... Це неправильно.
joeqwerty

1
Є 256 можливих значень для октету: 0 до 255, загалом 256. 256 -2 (мережеві та широкомовні адреси) = 254 можливих хост-адреси.
joeqwerty

На жаль Дякую! :-) Один за одним, я поняття не маю, як мені вдалося саме цим подвигом.
Джозеф Керн

1
-1 Вибачте, але "Заняття" не було з RFC 1519 в 1993 році, ніхто не повинен говорити про них поза історичним контекстом. Вони плутають і викликають масу помилок.
Chris S

Кріс, ти, мабуть, правий, але класи все ще викладалися на початку 2000-х років на CCNA та більшості курсів нижчого рівня.
Джозеф Керн

34

Короткий урок історії: спочатку одноадресні адреси IPv4 були розділені на 3 класи, кожен з пов'язаною довжиною маски за замовчуванням (називається класною маскою підмережі)

  • Клас А: Все, що знаходиться в інтервалі 1.0.0.0 -> 127.255.255.255. Класна маска підмережі 255.0.0.0 (/ 8 у позначенні CIDR)
  • Клас В: Все в діапазоні 128.0.0.0 -> 191.255.255.255. Класна маска підмережі 255.255.0.0 (/ 16 у позначенні CIDR)
  • Клас С: Все, що знаходиться в діапазоні 192.0.0.0 -> 223.255.255.255. Класна маска підмережі 255.255.255.0 (/ 24 у позначенні CIDR)

Ідея полягала в тому, що різним за розміром організаціям можна було б виділити різний клас IP-адреси, щоб ефективно використовувати простір IP-адрес.

Однак у міру зростання IP-мереж стало зрозуміло, що такий підхід мав свої проблеми. Щоб назвати лише три:

У класному світі всі підмережі повинні були мати маску / 8, / 16 або / 24. Це означало, що найменша підмережа, яку можна було налаштувати, була / 24, що дозволяло 254 адресам хостів (.0 та .255 зарезервуватись відповідно мережевими та широкомовними адресами). Це було надзвичайно марно, особливо на посиланнях "точка-точка" із приєднаними лише двома маршрутизаторами.

Навіть після зменшення цього обмеження попередні протоколи маршрутизації (наприклад, RIPv1 ) не рекламували довжину маски, пов'язану з префіксом IP. За відсутності конкретної маски, вона використовувала б або маску безпосередньо підключеного інтерфейсу в тій же класній мережі, або переходила б до використання маски класу. Наприклад, якщо ви хочете скористатися мережею 172.16.0.0 для посилань між маршрутизаторами з / 30 масками, всі підмережі від 172.16.0.0 - 172.16.255.255 повинні були мати маску / 30 (16384 підмереж, кожна з 2 корисними IP-адресами ).

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

Два пов'язані уточнення дозволили нам вийти за межі вищевказаних обмежень.

  1. Маски підмережі змінної довжини (VLSM)
  2. CIDR (Безкласна маршрутизація між доменами)

VLSM посилається на здатність протоколу маршрутизації підтримувати різні маски підмережі в межах однієї класичної мережі. Наприклад:

192.168.1.0/24

Можна розділити на:

192.168.1.0/25
192.168.1.128/26
192.168.1.192/27
192.168.1.224/27

Що дозволило набагато ефективніше використовувати адресний простір; підмережі можуть бути правильно розміщені для кількості хостів / маршрутизаторів, які будуть приєднані до них.

CIDR приймає VLSM і розширює його іншим способом; на додаток до розбиття однієї класової мережі на більш дрібні підмережі, CIDR дозволяє об'єднувати кілька класових мереж в єдиний підсумок. Наприклад, такі мережі класу B (/ 16):

172.16.0.0/16
172.17.0.0/16
172.18.0.0/16
172.19.0.0/16

Можна об'єднати / узагальнити одним префіксом:

172.16.0.0/14

Що стосується підмережі: маска підмережі має довжину 32 біти. Довжина маски позначає, скільки бітів ідентифікують мережеву частину адреси. Наприклад:

10.1.1.0/24
  • Класна маска підмережі становить / 8
  • Фактична маска підмережі становить / 24
  • 16 біт (24-8) були "запозичені" для використання підмережі.

Це означає, що, якщо припустити, що вся мережа 10.0.0.0/8 є підмережею в / 24s, в цьому діапазоні буде 65536 (2 ^ 16) підмереж. (Це припускаючи, що платформа, яку ви використовуєте, підтримує номери підмереж 0 і 255. Див. Ip підмережі Cisco-нуль).

Залишилося 8 біт у "хост-частині" адреси. Це означає, що є 256 доступних IP-адрес (2 ^ 8), з яких 2 зарезервовано (10.1.1.0 - мережева адреса, 10.1.1.255 - адресна широкомовна мережа). Це залишає 254 корисних IP-адреси в цій підмережі. ((2 ^ 8) - 2)


4
Насправді було 5 класів.
дбаснетт

5
Щоправда, але чи насправді нам потрібно потрапляти в багатоадресову та зарезервовану категорію Е для вирішення питання про вступ до підмережі? :)
Муралі Суріар

2
Ви ввели історію у вступне запитання ... Потім залишили її незавершеною. Не впевнений, що гірше.
Chris S

7

Діапазони мережі: на мережі завжди посилаються два числа: одне визначає мережу, а інше визначає, який комп'ютер (або хост) знаходиться в цій мережі. Оскільки адреса кожної нервової мережі має 32 біти, обидві цифри повинні відповідати цим 32 бітам.

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

Номер мережі не фіксований певною кількістю біт - наприклад, якби у мене було лише 200 машин для управління, я був би абсолютно задоволений номером мережі, який використовував 24 біти, залишаючи мені лише 8 біт - що вистачає до 255 господарів. Оскільки номер мережі використовує 24 біти, ми можемо мати їх багато, тобто багато людей можуть мати власні мережі.

Раніше це називали мережею класу С. (клас B використовував 16 біт для номера мережі, а клас A використовував 8 біт, тому існує лише кілька мереж класу A).

Сьогодні ця конвенція про іменування вийшла з моди. Він був замінений на концепцію під назвою CIDR. CIDR явно ставить кількість бітів для ваших хостів після косої риски. Отже, мій приклад вище (клас C) тепер називається CIDR / 24.

Це дає нам трохи більше гнучкості, перш ніж у мене було 300 хостів для управління, мені знадобиться мережа класу B! Тепер я просто можу отримати / 23 CIDR, тому у мене є 9 біт і 23 біт для номера мережі. ICANN може не мати таких типів мереж, але якщо у мене є внутрішня мережа або я орендую часткову мережу в Інтернет-провайдера, це полегшує управління - тим більше, що всі їх клієнти можуть отримати а / 29 (залишаючи мене. 3 біти або максимум 8 машин), що дозволяє більшості людей мати власний невеликий фрагмент доступних IP-адрес. Поки ми не отримаємо IPv6, це досить важливо.


Однак ... поки я знаю, що / 24 CIDR є еквівалентом старої мережі класу C, а / 16 - класом B, а / 8 - класом A ... я все ще спотикаюся, намагаючись обчислити / 22 в моя голова. На щастя, є інструменти, які роблять це для мене :)

Однак - якщо ви знаєте, що a / 24 - це 8 біт для хостів (і 24 біт для мережі), то я знаю, що / 23 дає мені додатковий біт, який подвоює кількість хостів.


-1 Вибачте, але згадування занять поза "історичною" довідкою в наші дні недоцільно. Вони не «випадають з моди», вони були офіційно зневажені RFC 1519 в 1993 році. Вони заплутані, як і всі h * ll, і спричиняють купу помилок.
Chris S

Деякі реалізації протоколів динамічної маршрутизації підсумовуються за межами класу, тому корисно їх знати.
Бен-

5

Я буду ставити та відповідати на декілька пов’язаних питань:

  • Чому ти 255.255.255.0так часто бачишся?
  • Чому 192.168.0.1?
  • Чому 127.0.0.1?

Чому такі дивні числа - 255, 192, 168, 127?


8 + 8 + 8 + 8-розрядні крапки з десятком

Інтернет-адреси, такі як 194.60.38.10, використовують пунктирно-десяткові позначення, щоб розділити 32 біти на 8 + 8 + 8 + 8 біт. Десяткова крапка означає перетворення кожного числа у двійкове, а потім додавання його зліва 0'.

Наприклад .60.→ 60 = 32 + 16 + 8 + 4 → 111100.00111100..

Таким чином, 194.60.38.10 є пунктирно-десятковою для 4 × 8 = 32-бітової адреси 11000010.00111100.00100110.00001010, оскільки 38 → 100110, 10 → 1010тощо. 194 вимагає всіх 8 біт; решта - підкладки.

підкладка

Якщо ви подумаєте про 255, 192 та 127 у 8-бітовій двійковій формі, ви можете легше зрозуміти, чому певні десяткові числа такі поширені:

  • 255 = 11111111
  • 192 = 11000000
  • 127 = _1111111
  • 128 = 10000000

Ці десяткові цифри представляють візуально зручні 8-бітні блоки, такі як ■■■■■■■■, ■ □□□□□□□ та □ ■■■■■■■. Таким чином, ви ніколи не бачили 256 = 2⁹ через 8-бітову межу, а 127 = 128−1 = 2⁸ − 1 - це бітове перевертання потужності двох - і потужність-два є 10………00000в двійкові.

  • 168 = 10101000

Маски підмережі: те, що моє, моє + те, що твоє, це твоє

Потім маски підмережі розбивають кожну 32-бітну Інтернет-адресу на ідентифікатор мережі та ідентифікатор хоста. Тоді як інтернет-адреси можуть містити будь-яку суміш 1 і 0, маски підмережі починаються лише з 1 та закінчуються лише 0.

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□ subnet

Вилучення перших 8 + 8 + 8 = 24 біт і відбілювання останніх 8 біт - це спосіб поділу IP ■■ □□□□ ■ □ | □□ ■■■■ □□ | □□ ■ □□ ■ ■ □ | □□□□ ■ □ ■ □ на дві частини:

■■□□□□■□|□□■■■■□□|□□■□□■■□          network
                             □□□□■□■□ host

Якщо власник підмережі (скажімо, OmniCorp ) хотів більше внутрішніх IP-адрес, вони могли б придбати більше (скажімо, 8 + 8 = 16 біт) правої частини мережі, як це:

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|□□□□□□□□|□□□□□□□□ subnet
■■□□□□■□ □□■■■■□□                    network
                   □□■□□■■□ □□□□■□■□ host

Зрозуміло, що в адресному просторі з опцією 32-біт = 2³² = 4 294 967 296 можливий компроміс: якщо ви купуєте більше ідентифікаторів мережі (зліва), у вашій внутрішній мережі є можливість присвоїти більше ідентифікатора хоста (праворуч).

Тому дешеві люди мають маску підмережі

255.255.255.0 = ■■■■■■■■■ | ■■■■■■■■■ | ■■■■■■■■■ | □□□□□□□□.

Навіть дешевші люди

255.255.255.128 = ■■■■■■■■■ | ■■■■■■■■ |

або 255.255.255.192 = ■■■■■■■■■ | ■■■■■■■■■ | ■■■■■■■■■ | ■■ □□□□□□.

Згідно з фольклором, це був насправді не Роджер Міллер, а низький сисадмін з маскою 255.255.255.254, який спочатку написав King of the Road , замінивши "Я не маю великої підмережі" на "У мене немає сигарет ”.

Я палю сигарети аж до прикладу

(Чому маски низько заповнених такими високими цифрами? Тому що, як і оповідач Міллера, маски підмережі рахують усі речі, яких у вас немає .)


Що означає косою косою рисою після IP-адреси? (наприклад, 194.60.38.10/24)

Оскільки маски підмережі (які поділяють "їх" від "наших") завжди починаються з 1"s", і оскільки ми ненавидимо підсумовувати потужність-дві навіть більше, ніж ми ненавидимо в першу чергу фіксувати сили-два, хтось вигадав CIDR (косою рисою після IP).

194.60.38.10/24 означає "підмаска має 24 одиниці, то решта - нулі", так

■■■■■■■■■ | ■■■■■■■■■ | ■■■■■■■■ | □□□□□□□□ з 8 + 8 + 8 бітами, що належать "їм" та 8 бітам належність до "нас".

Перевернувши гімн хобо,

  • /31 - автор пісень
  • /24середнього класу ( 255.255.255.0= ■■■■■■■■ | | ■■■■■■■■ | ■■■■■■■■■ | □□□□□□□□
  • /16 багатий ■■■■■■■■ | ■■■■■■■■ | □□□□□□□□ | □□□□□□□□
  • /8 надзвичайно багатий ■■■■■■■■ | □□□□□□□□ | □□□□□□□□ | □□□□□□□□
  • /1або /0буде IANA чи щось таке.





† Використовуйте, bc -l; obase=10; 60наприклад.


Яке відношення до відповіді мають малюнки в ній? Чи просто зосередитись на відповіді? :)
simhumileco

4

Хоча вищесказане правильно (вибачте, TL; DR), обчислення підмереж все ще викликає у багатьох адміністраторів мережі багато горя. Насправді є дуже простий спосіб зробити підрахунок підмережі, більшу частину цього можна зробити в голові, і запам’ятати дуже мало. У більшості додатків навіть не потрібно розуміти бінарне представлення, хоча це корисно для повного розуміння підмережі. Тут я обговорю лише IPv4; IPv6 не входить в рамки цієї дискусії.

Запам'ятай це:

Необхідно пам’ятати три основні речі: всі підмережі засновані на потужностях двох, і є два ключових числа: 256 і 32. Детальніше про це пізніше.

Спочатку давайте подивимось на таблицю, що містить потужності 2:

2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256

Обчислити потужність 2 просто: кожне ціле збільшення потужності подвоює результат. 1 + 1 = 2, 2 + 2 = 4, 4 + 4 = 8, 8 + 8 = 16 тощо. Загальна кількість адрес у підмережі завжди повинна бути потужністю 2 .

Оскільки кожен октет підмережі IPv4 досягає 256, 256 є дуже важливим числом і складає основу для решти математики.

Розміри підмережі

Почнемо з простого запитання: "скільки адрес у підмережі, якщо маска 255.255.255.248?" Ми проігноруємо перші три октети зараз і подивимось на останні. Ось як легко: відняти 248 від 256. 256 мінус 248 дорівнює 8. Є 8 доступних адрес (включаючи мережеві та широкомовні адреси). Реверс також працює: "Якщо я хочу мати підмережу з 16 адресами, якою буде маска підмережі?" 256 мінус 16 дорівнює 240. Маска підмережі складе 255,255,255,248.

Тепер, якщо ми хочемо розширитись за межами 256 адрес (історично "клас C"), це стає лише трохи складніше: якщо наш останній октет дорівнює 0, а наш третій октет - скажімо, 240, (255.255.240.0), то ми робимо математику на третьому октеті і виявляємо, що було б 16 адрес. Тому ми множимо 16 на 256 (кількість адрес в останньому октеті), щоб отримати 4 096. Якщо обидва останні два октети дорівнюють 0, (наприклад, 255.240.0.0), тоді ми беремо результат віднімання з другого октету (ми скажемо, що це знову 16), помножимо, але 256 (адреси в третьому октеті), помножимо ще раз на 256 (адреси в останньому октеті), щоб отримати 1048 576 адрес. Просто так! (Гаразд, тому реверс трохи складніше. Якщо нам потрібна підмережа з 1048 576 адресами, нам доведеться розділити це число на 256 в кілька разів, щоб отримати число, яке ми можемо відняти від 256.)

Мережева адреса

Тепер, коли ми знаємо, як обчислити маску підмережі, як ми з'ясуємо, що таке мережева адреса? Це легко: це завжди кратна кількість адрес у нашій підмережі. Отже, якщо в нашій підмережі 16 адрес, можливі мережеві адреси будуть до 0, 16, 32, 48, 64 і так далі до 240. (Зауважте, що 0 - дійсне кратне будь-якого числа, як і будь-яке число, помножене на 0 дорівнює 0.)

І, звичайно, адреса мовлення буде останньою адресою в області застосування. Отже, якщо у нашій підмережі 16 адрес, і ми вибрали мережеву адресу 10.3.54.64, то трансляція буде (64 + 16-1 = 79) 10.3.54.79.

Позначення CIDR

То як щодо носіїв CIDR? Як перевести це на маску підмережі в стилі IPv4?

Пам'ятаєте наші сили двох? Ну, тепер у нас є ще одне ключове число, яке слід пам’ятати, окрім 256: 32. Пам'ятайте, що позначення CIDR описує кількість значущих бітів у IPv4-адресі, а в IPv4-адресі є 32 біти, 8 для кожного октету. Отже, якщо у нас є маска підмережі 255.255.255.240, це 16 адрес. Якщо ми подивимось на нашу таблицю "сили 2" вище, то побачимо, що 16 - це дві до четвертої сили (2 ^ 4). Отже, ми віднімаємо число потужності - 4 - від 32 і отримуємо 28. Наше позначення CIDR для маски підмережі 255.255.255.240, наше позначення CIDR - / 28.

І якщо нам дають CIDR / 28, віднімаємо (28) від 32, щоб отримати 4; підняти 2 до тієї (4-ї) потужності (2 ^ 4), щоб отримати 16; потім відніміть, що (16) від 256, щоб отримати 240; або 255.255.255.240.


дякую. Але я все ще нечіткий, як ПК використовує маску підмережі. Коли програма на ПК хоче надіслати дані, вона інкапсулює їх у пакет. Чи визначає маска підмережі, як інкапсульований пакет? Наприклад, якщо ПК хотів би надіслати пакет в локальній мережі, він використовував би кадр Ethernet en.wikipedia.org/wiki/Ethernet_frame, і якби він захотів за межами мережі, він би використовував пакет tcp en.wikipedia.org/wiki /… ?
аквагремлін

В основному, я не знаю, як ПК визначає, куди надсилати свої дані. Мережа Ethernet схожа на шину - вона іде скрізь. Виведення пакету через гніздо Ethernet ПК є загальною подією, тому сам пакет повинен визначати, хто на нього реагує. Пакет, призначений для отримання локальним пристроєм (комутатором або іншим ПК на локальній мережі), повинен виглядати інакше, ніж пакет, який збирається забрати маршрутизатором.
аквагремлін

Це відбувається на шарі нижче TCP. Кожен пристрій має апаратну адресу (MAC), пов’язану з IP-адресою в таблиці ARP кожного пристрою. Це будується за допомогою відкриття. Коли пакет призначений для хоста в локальній мережі, він позначається MAC для пристрою призначення. Коли пакет призначений для віддаленого хоста, він позначається MAC для маршрутизатора в локальній мережі. Під час проходження через маршрутизатор MAC знімається, а потім позначається MAC наступного хоп-роутера. Підмережа лише визначає сферу локальної мережі. (Це проста <500 символьна версія.)
Джонатан J

2

Я також вважаю, що принаймні слід згадати про NAT, оскільки вони використовуються так часто в сучасних мережах замість підмереж, через вичерпання адреси IPv4, серед іншого. (Крім того, коли я вперше дізнався про підмережі, мене дуже розгубило те, як підмережа стосується мереж, створених WiFi-роутерами).

NAT (трансляція мережевих адрес) - це техніка (зазвичай), яка використовується для створення приватних мереж шляхом зіставлення одного адресного простору (IP: порт) в інший. Здебільшого це використовується для створення приватної мережі з декількох приватних IP-адрес за однією публічною адресою, наприклад, в маршрутизаторах Wifi, організаціями (наприклад, університетом чи корпорацією) або іноді Інтернет-провайдерами.

Фактичний переклад адрес здійснюється прозоро в NAT-вузлах, зазвичай маршрутизаторах. Він може бути безлічі форм, Full Cone, Address Restricted, Port ограниченим тощо, або їх суміш, яка диктує, як можуть бути ініційовані з'єднання через вузол.

Повні деталі можна знайти у Вікіпедії , але, наприклад, розглянемо маршрутизатор Wifi з двома підключеними до нього пристроями. Загальнодоступна IP-адреса маршрутизатора є 10.9.20.21/24, а IP-адреса пристроїв (приватних IP-адрес) є A: 192.168.0.2, B: 192.168.0.3а сама маршрутизатор є R: 192.168.0.1. Таким чином, якщо Aхочеться підключитися до сервера S: 10.9.24.5/24, (який насправді знаходиться в іншій підмережі wrt, то маршрутизатор тут:)

  1. A відправляє пакет IP R(який би був шлюзом за замовчуванням) з вихідним IP 192.168.0.2, портом src (скажімо) 14567та пунктом призначення IP: 10.9.24.5(Хоча порт фактично є частиною заголовка TCP).
  2. Маршрутизатор (який підтримує NAT) відображає порт 14567на пристрій Aі змінює джерело з IP-пакету на 10.9.20.21(що є загальнодоступним IP-адресом маршрутизатора). Це на відміну від описаної вище підмережі, де IP-пакети насправді ніколи не змінюються .
  3. Sотримує серію TCP-пакетів (з src IP:, 10.9.20.21src Port:) 14567і надсилає відповідні пакети з цими значеннями в полях призначення.
  4. Rперевіряє порт призначення, який є 14567і пересилає пакет на A.
  5. A отримує пакет відповідей.

У вищевказаній ситуації, якщо Bспробувати відкрити з'єднання на одному і тому ж вихідному порту ( 14567), воно буде перенесено на інший порт R(і порт у вихідному пакеті змінено) перед відправкою на S. Тобто, також був би переклад портів, а не просто IP.

Тут слід зазначити дві речі:

  1. Завдяки такому перекладу адрес часто неможливо ініціювати підключення до пристроїв приватної мережі без використання деяких спеціальних прийомів.
  2. Обмеження на загальне з'єднання TCP від ​​одного пристрою до сервера (65536 = 2 ^ 16) тепер колективно застосовується до всіх пристроїв позаду NAT у формі NAT, що використовується вище.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.