Вопрос: Как работает подсети IPv4?


Это Канонический вопрос о подсети IPv4.

Связанный:

Как работает подсети и как вы это делаете рукой или в голове?  Может ли кто-то объяснить и концептуально, и несколько примеров? Ошибка сервера вызывает много вопросов о домашней задаче подсети, поэтому мы могли бы использовать ответ, чтобы указать на них на «Ошибка сервера».

  • Если у меня есть сеть, как мне понять как разбить его?
  • Если мне дана сетевая маска, как мне знать, что такое диапазон сети для Это?
  • Иногда происходит слеш по количеству, что это за число?
  • Иногда есть маска подсети, но и маску подстановочных знаков, они кажутся одинаковыми, но они разные?
  • Кто-то упомянул о знании бинарного для этого?

418
2017-08-04 15:51


Источник




Ответы:


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

Проще говоря, IP-маршрутизаторы используют IP-подсети для принятия решений о маршрутизации. Понимать, как эти решения работают, и вы можете понять, как планировать IP-подсети.

Подсчет до 1

Если вы уже свободно владеете двоичной (базой 2) записью, вы можете пропустить этот раздел.

Для тех из вас, кто остался: вам стыдно за то, что вы не владеете бинарной нотацией!

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

Подсчет в двоичном формате так прост, потому что вам нужно только знать, как считать до 1!

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

Когда вы проехали свою первую милю, одометр читает «00000001». Все идет нормально.

Когда вы проехали свою вторую милю, первая цифра одометра возвращается назад к «0» (так как это максимальное значение «1»), а вторая цифра одометра перевернется на «1», заставляя одометр читать " 00000010" . Это похоже на цифру 10 в десятичной нотации, но на самом деле это 2 (количество миль, которые вы довели до сих пор) в двоичной нотации.

Когда вы проехали третью милю, одометр считывает «00000011», так как первая цифра одометра снова поворачивается. Число «11» в двоичной записи совпадает с десятичным числом 3.

Наконец, когда вы проехали четвертую милю, обе цифры (которые были прочитаны «1» в конце третьей мили) откат назад до нулевой позиции, а 3-я цифра сворачивается в положение «1», 00000100" . Это двоичное представление десятичного числа 4.

Вы можете запомнить все это, если хотите, но вам действительно нужно только понять как маленький одометр «перекатывается», поскольку число, которое он подсчитывает, становится больше. Это точно так же, как и традиционная операция одинарного десятичного одометра, за исключением того, что каждая цифра может быть только «0» или «1» на нашем вымышленном «двоичном одометре».

Чтобы преобразовать десятичное число в двоичный код, вы можете прокручивать одометр вперед, галочкой по галочку, считая вслух, пока вы не прокатили его несколько раз, равное десятичному числу, которое вы хотите преобразовать в двоичный. Независимо от того, что отображается на одометре после того, как все, что couting и roll будут бинарным представлением десятичного числа, которое вы подсчитали до.

Поскольку вы понимаете, как продвигается одометр вперед, вы также поймете, как он тоже откатывается назад. Чтобы преобразовать двоичный номер, отображаемый на одометре, до десятичного числа, вы можете прокручивать одометр обратно по одному тику за раз, считая вслух, пока одометр не прочитает «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-блок Main Street, потому что номер здания составляет от 100 до 199, а большинство городских кварталов пронумерованы сотнями. Вы «просто знаете», как разделить адрес вверх.

Маршрутизаторы поставляют пакеты, а не пиццу. Их работа такая же, как у пиццы: чтобы получить груз (пакеты) как можно ближе к месту назначения. Маршрутизатор подключается к двум или более IP-подсетям (чтобы быть полезным). Маршрутизатор должен проверять IP-адреса назначения пакетов и разбивать адреса получателей на свои компоненты «имя улицы» и «номер здания», как и драйвер для пиццы, для принятия решений о доставке.

Каждый компьютер (или «хост») в IP-сети настроен с уникальным IP-адресом и маской подсети. Этот IP-адрес можно разделить на компонент «номер здания» (например, «123» в примере выше), называемый «идентификатор хоста» и компонент «название улицы» (например, «Main Street» в приведенном выше примере), называемый «ID сети». Для наших человеческих глаз легко увидеть, где номер здания и название улицы находятся на «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 / number). Эта нотация известна как «Бесклассовая междоменная маршрутизация» (CIDR). «255.255.255.0» состоит из 24 бит 1 в начале, и быстрее записать это как «/ 24», чем «255.255.255.0». Чтобы преобразовать номер CIDR (например, «/ 16») в маска подсети с десятичной запятой, просто запишите это число 1, разделите на группы по 8 бит и преобразуйте их в десятичные. (Например, «A / 16» - «255.255.0.0»).

В «старые дни» маски подсети не указывались, а скорее были получены путем поиска определенных битов IP-адреса. Например, IP-адрес, начинающийся с 0 - 127, имел скрытую маску подсети 255.0.0.0 (называемый IP-адресом класса A).

Эти подразумеваемые маски подсети сегодня не используются, и я больше не рекомендую их изучать, если у вас нет несчастья иметь дело с очень старым оборудованием или старыми протоколами (например, 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».

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

  • ID сети: 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-маршрутизаторы, но простые алгоритмы будут давать одинаковые результаты.

Статические маршруты

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

Начнем с вызова нашего маршрутизатора из более ранних примеров «Router A». Вы уже знаете таблицу маршрутизации RouterA как:

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

Предположим, что есть еще один маршрутизатор «Router B» с IP-адресами 192.168.10.254/24 и 192.168.30.1/24, назначенными его интерфейсам Ethernet0 и Ethernet1. Он имеет следующую таблицу маршрутизации:

  • Идентификатор сети: 192.168.10.0 (11000000.10101000.00001010.00000000) - маска подсети / 24 - Интерфейс RouterB-Ethernet0
  • Идентификатор сети: 192.168.30.0 (11000000.10101000.00011110.00000000) - маска подсети / 24 - Интерфейс RouterB-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

Вы можете видеть, что Router B знает, как «добраться до» сети, 192.168.30.0/24, что Router A ничего не знает.

Предположим, что ПК с IP-адресом 192.168.20.13, подключенным к сети, подключенной к интерфейсу Ethernet0 маршрутизатора A, отправляет пакет в Router 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, потому что он знает, как с этим справиться». Это аналогичная операция «hand-off pizza at the desk desk», о которой я упоминал ранее, передавая пакет кому-то еще, кто знает, как приблизить его к месту назначения.

Добавление записи в таблицу маршрутизации «вручную» называется добавлением «статического маршрута».

Если маршрутизатор B хочет доставлять пакеты в сеть 255.255.255.0 сети подсети 192.168.20.0, ему также потребуется запись в своей таблице маршрутизации:

  • ID сети: 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 и т. Д., На самом деле не являются чем-то большим, чем способ для маршрутизаторов обмениваться информацией о маршрутизации между собой, что фактически может быть настроено на статические маршруты. Однако одним большим преимуществом использования динамических протоколов маршрутизации по статическим маршрутам является то, что протоколы динамической маршрутизации могут динамично изменить таблицу маршрутизации на основе сетевых условий (использование полосы пропускания, интерфейс «вниз» и т. д.), и, таким образом, использование протокола динамической маршрутизации может привести к конфигурации, которая «маршрутизирует» сбои или узкие места в сетевой инфраструктуре. (Протоколы динамической маршрутизации ПУТЬ вне сферы действия этого ответа.)

Вы не можете добраться туда отсюда

В случае нашего примера Router A, что происходит, когда приходит пакет, привязанный к «172.16.31.92»?

Глядя на таблицу маршрутизации Маршрутизатор, ни целевой интерфейс, ни статический маршрут не совпадают с первыми 24 битами 172.18.31.92 (что составляет 10101100.00010000.00011111.01011100, BTW).

Как мы уже знаем, маршрутизатор A вернет пакет отправителю через сообщение «Недоступная сеть назначения».

Скажем, что есть еще один маршрутизатор (Router C), расположенный по адресу «192.168.20.254». Маршрутизатор 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

Было бы неплохо, если Router A мог маршрутизировать пакеты, которые не соответствуют локальному интерфейсу до Router C, чтобы Router 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 - это пункт назначения, который мы ДЕЛАТЬ знаете, как доставить пакет. Когда столкнулся с пакетом, привязанным к месту назначения, для которого у нас нет конкретной записи таблицы маршрутизации, эта запись «по умолчанию» всегда будет соответствовать (поскольку она соответствует нулевым битам адреса назначения) и дает нам «последнее средство», которое мы можем отправлять пакеты для доставки. Иногда вы слышите шлюз по умолчанию, называемый «шлюзом последней инстанции».

Для того, чтобы маршрут по умолчанию был эффективен, он должен ссылаться на маршрутизатор, доступный с использованием других записей в таблице маршрутизации. Если вы попытались указать шлюз по умолчанию 192.168.50.254 в Router A, например, доставка на такой шлюз по умолчанию не удалась. 192.168.50.254 не является адресом, который Router A знает, как доставлять пакеты для использования любого из других маршрутов в своей таблице маршрутизации, поэтому такой адрес будет неэффективным в качестве шлюза по умолчанию. Это можно кратко сформулировать: шлюз по умолчанию должен быть установлен на адрес, который уже доступен, используя другой маршрут в таблице маршрутизации.

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

Городское планирование и маршрутизация IP-адресов

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

Существуют три основные причины, по которым вы будете подсеть сети:

  • Возможно, вам захочется общаться на разных непохожих средствах коммуникации. Если у вас есть соединение T1 WAN между двумя зданиями, IP-маршрутизаторы могут быть размещены на концах этих соединений для облегчения связи через T1. Сети на каждом конце (и, возможно, «межстраничная» сеть на самом T1) будут назначены уникальным IP-подсетям, чтобы маршрутизаторы могли принимать решения о том, какой трафик должен быть отправлен по линии T1.

  • В сети Ethernet вы можете использовать подсети для ограничения объема широковещательного трафика в определенной части сети. Протоколы прикладного уровня используют широковещательные возможности Ethernet для очень полезных целей. По мере того, как вы получаете все больше и больше хостов, упакованных в одну и ту же сеть Ethernet, хотя процент широковещательного трафика на проводе (или в эфире, в беспроводном Ethernet) может увеличиться до такой степени, что создает проблемы для доставки не-широковещательного трафика. (В прежние дни широковещательный трафик мог перегружать ЦП хостов, заставляя их исследовать каждый широковещательный пакет. Это менее вероятно сегодня.) Чрезмерный трафик на коммутируемой сети Ethernet также может быть вызван «наводнением кадров в неизвестные адресаты». Это обусловлено тем, что коммутатор Ethernet не может отслеживать каждый пункт назначения в сети и является причиной, по которой коммутируемые сети Ethernet не могут масштабироваться до бесконечного числа хостов. Эффект наводнения кадров в неизвестных направлениях аналогичен эффекту избыточного широковещательного трафика для целей подсети.

  • Вы можете «полировать» типы трафика, проходящего между различными группами хостов. Возможно, у вас есть серверные устройства печати, и вы только хотите, чтобы авторизованные серверы очереди печати отправляли задания на них. Ограничивая поток трафика, разрешенный для потока в подсеть устройства сервера печати, пользователи не могут настроить свои ПК на прямой разговор с устройствами сервера печати, чтобы обойти учет печати. Вы можете поместить устройства сервера печати в подсеть все для себя и создать правило в маршрутизаторе или брандмауэре, подключенном к этой подсети, для управления списком хостов, которому разрешено отправлять трафик на устройства сервера печати. (Как маршрутизаторы, так и брандмауэры обычно могут принимать решения о том, как или доставить пакет на основе исходных и целевых адресов пакета. Брандмауэры, как правило, являются подвидом маршрутизатора с навязчивой личностью. Они могут быть очень, очень обеспокоены полезная нагрузка пакетов, тогда как маршрутизаторы обычно игнорируют полезную нагрузку и просто доставляют пакеты.)

При планировании города вы можете планировать, как улицы пересекаются друг с другом, и могут использовать поворотные, односторонние и тупиковые улицы, чтобы влиять на потоки трафика. Вы можете захотеть, чтобы Main Street составляла 30 блоков, каждый из которых имел до 99 зданий каждый. Планировать нумерацию улиц довольно легко, так что каждый блок на главной улице имеет ряд номеров улиц, увеличивающихся на 100 для каждого блока. Очень легко понять, что должно означать «начальный номер» в каждом последующем блоке.

При планировании IP-подсетей вы занимаетесь построением правильного количества подсетей (улиц) с нужным количеством доступных идентификаторов хоста (номерами зданий) и использованием маршрутизаторов для подключения подсетей друг к другу (пересечения). Правила о разрешенных адресах источника и получателя, указанные в маршрутизаторах, могут дополнительно контролировать поток трафика. Брандмауэры могут действовать как навязчивые полицейские.

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

Продолжение: Как работает подсети IPv4?

(Да ... мы достигли максимального размера ответа (30000 символов).)


625
2017-08-04 15:58



@Joseph: Это лекция, которую я поставил слишком много раз для себя. > smile <Я посмотрю ваш двоичный раздел. Я не хочу преподавать математику (что на самом деле то, что понимает двоичный код - подсчет в базе 2), потому что я не очень хорош в этом. - Evan Anderson
Моя единственная проблема с распадом ответа заключается в том, что нужно понять, почему подсеть существует (IP-маршрутизация), прежде чем можно понять, как эффективно разбить IP-сеть на подсети. Я никогда не находил хороший способ обсудить одну тему в изоляции от другой. (Действительно, проектирование IP-сети с VLSM происходит естественно и «имеет смысл» после того, как вы понимаете IP-маршрутизацию ...) - Evan Anderson
Не расстраивайся. - Joseph Kern
+1 для наиболее полного сообщения, когда-либо увиденного на сервере - Scott Lundberg
Приостановлено, если только для метафоры одометра. Теперь я знаю, как объяснить, как работает бинарный процесс для людей. - phuzion


Продолжение: Как работает подсети IPv4?

Ваш интернет-провайдер дает вам сетевой ID 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 бит. Так как комбинации из этих 8 бит «11111111» и «00000000» недопустимы для идентификаторов хостов, это оставляет нам 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 и сохранение небольших таблиц маршрутизации - это хорошая вещь (tm).

Нереализм примеров

Вымышленный мир в этом ответе, очевидно, вымышленный. Как правило, вы можете создавать подсети на современной коммутируемой сети Ethernet с большим количеством хостов, чем 254 (зависит от профиля трафика). Как отмечалось в комментариях, использование / 24 сетей между маршрутизаторами несовместимо с Real Life (tm). Он делает для симпатичных примеров, но является пустой тратой адресного пространства. Как правило, a / 30 или a / 31 (см. http://www.faqs.org/rfcs/rfc3021.html для получения подробной информации о том, как / 31 работа - они выходят за рамки этого ответа) сеть используется для ссылок, которые строго связаны между двумя маршрутизаторами.


134
2017-08-04 15:53



Небольшая ошибка: код сразу после «Последний действительный хост ...» возвращается к вызову «первый допустимый хост». Я предполагаю, что все равно должен сказать «последний». - JoeCool1986
@ JoeCool1986 - Хорошая добыча. - Evan Anderson
Я собираюсь поддержать этот ответ, чтобы убедиться, что два ответа сохранены в порядке. - l46kok
Со стороны, где вы создаете две подсети от 192.168.40.128 и создаете сетевой идентификатор 192.168.40.192, откуда взялись 192? - user6607
@ user6607 Подсети подсчитываются назад (без пробелов). Например, первая подсеть 0 представляется как 00000000, Вторая подсеть 128 так 10000000 и третья подсеть 192 представляется как 11000000и т. д. Просто продолжайте считать назад, чтобы найти новые подсети. - Joseph Kern


Sub-сетчатые

Подвивка не сложна, но может быть пугающей. Итак, давайте начнем с самого простого возможного шага. Научиться считать в двоичном формате.

двоичный

Двоичная система подсчета базы 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 (маска подсети с переменной длиной)» для более сложных тем.

Теперь я вижу, что я слишком долго отвечал ... вздох


71
2017-08-04 15:12



«Учитывая, что у меня есть один октет для моей части хоста (в приведенном выше примере), я могу ТОЛЬКО когда-либо иметь 255 хостов (255 - максимальное значение октета). Но есть еще один небольшой трюк: вам нужно вычесть два адреса хоста из доступных (в настоящее время 255). Первый адрес в диапазоне будет для сети (192.168.1.0), а последний адрес в диапазоне будет широковещательным (192.168.1.255). Таким образом, у вас действительно есть 253 доступных адреса для хостов в одной сети. "... Это неверно. - joeqwerty
Для октета доступно 256 возможных значений: от 0 до 255, в общей сложности 256. 256 -2 (сетевых и широковещательных адресов) = 254 возможных адресов хоста. - joeqwerty
К сожалению. Благодаря! :-) Отключись, я понятия не имею, как я справился с этим особым подвигом. - Joseph Kern
-1 Извините, но в 1993 году с RFC 1519 не было «Классы», никто не должен говорить о них за пределами исторического контекста. Они сбивают с толку и вызывают много заблуждений. - Chris S
Крис, вы, вероятно, правы, но занятия по-прежнему преподавались в начале 2000-х годов в CCNA и большинстве курсов уровня бакалавра. - Joseph Kern


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

  • Класс A: все в диапазоне 1.0.0.0 -> 127.255.255.255. Классная маска подсети 255.0.0.0 (/ 8 в нотации CIDR)
  • Класс B: Все в диапазоне 128.0.0.0 -> 191.255.255.255. Классная маска подсети 255.255.0.0 (/ 16 в нотации CIDR)
  • Класс C: Все в диапазоне 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-zero).

В «хост-части» адреса есть 8 бит. Это означает, что имеется 256 доступных IP-адресов (2 ^ 8), из которых 2 зарезервированы (10.1.1.0 - это сетевой адрес, 10.1.1.255 - адрес широковещательной передачи, подсети). Это оставляет 254 доступных IP-адреса в этой подсети. ((2 ^ 8) - 2)


30



На самом деле было 5 классов. - dbasnett
Правда, но нужно ли нам входить в многоадресную и зарезервированную адресацию класса E для вопроса «intro to subnetting»? :) - Murali Suriar
Вы ввели историю в интро-вопрос ... Затем оставили ее неполной. Не уверен, что хуже. - Chris S


Сетевые диапазоны: на сети всегда ссылаются 2 номера: один для определения сети, а другой - для определения того, какой компьютер (или хост) находится в этой сети. Поскольку каждый номер nertwork имеет длину 32 бита, оба числа должны соответствовать этим 32 битам.

Нумерация сетей важна, так как это позволяет ICANN выходить, когда вы запрашиваете сетевой диапазон IP. Если бы у нас его не было, никто бы не смог сказать разницу между моей сетью и AT & Ts. Поэтому, пока эти числа должны быть уникальными, никто не хочет назначать номера хостам, которые находятся в моей сети. Следовательно, раскол - первая часть управляется сетевыми людьми, вторая часть - все мое, чтобы дать любой машине, которую я хочу.

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

Раньше это называлось сетью класса C. (класс B использовал 16 бит для сетевого номера, а в классе A использовалось 8 бит, поэтому существует только несколько сетей класса A).

В настоящее время это соглашение об именах вышло из моды. Он был заменен концепцией CIDR. CIDR явно помещает количество бит для ваших хостов после косой черты. Поэтому мой пример выше (класс C) теперь называется CIDR / 24.

Это дает нам немного большую гибкость, раньше, если бы у меня было 300 хостов для управления, мне нужна сеть класса B! Теперь я могу получить / 23 CIDR, поэтому у меня есть 9 бит для меня и 23 бита для номера сети. Возможно, у ICANN нет таких сетей, но если у меня есть внутренний или я арендую частичную сеть у интернет-провайдера, это упростит управление, тем более, что всем своим клиентам может быть предоставлен / 29 (оставляя меня. 3 бита или максимум 8 машин), что позволяет большему количеству людей иметь собственный небольшой фрагмент доступных IP-адресов. До тех пор, пока мы не получим IPv6, это очень важно.


Однако ... хотя я знаю, что CIDR эквивалентен старой сети класса C, а a / 16 - класс B, а a / 8 - класс A ... Я все еще в тупике, пытаясь вычислить a / 22 in моя голова. К счастью, есть инструменты, которые делают это для меня :)

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


6



-1 Извините, но упоминание классов за пределами «исторической» ссылки в наши дни не подходит. Они не «вышли из моды», они были официально осуждены RFC 1519 в 1993 году. Они сбивают с толку, как все, и вызывают кучу заблуждений. - Chris S
Некоторые реализации динамических протоколов маршрутизации суммируются по классовым границам, поэтому их полезно знать. - Ben


Хотя приведенное выше верно (извините, 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 является очень важным числом


3



спасибо. Но я все еще не понятен, как компьютер использует маску подсети. Когда приложение на ПК хочет отправить данные, оно инкапсулирует его в пакет. Маска подсети определяет, как пакет инкапсулируется? Например, если компьютер захотел отправить пакет в локальную сеть, он использовал бы Ethernet-фрейм en.wikipedia.org/wiki/Ethernet_frame и если он захочет за пределами сети, он будет использовать пакет tcp en.wikipedia.org/wiki/... ? - aquagremlin
В принципе, я не знаю, КАК ПК определяет, куда отправлять свои данные. Сеть ethernet похожа на шину - она ​​идет повсюду. Вывод пакета через гнездо ethernet на ПК является общим событием, поэтому сам пакет должен определить, кто ему отвечает. Пакет, который предназначен для захвата локальным устройством (коммутатором или другим ПК на сервере), должен выглядеть иначе, чем пакет, который будет собираться маршрутизатором. - aquagremlin
Это происходит на уровне ниже TCP. Каждое устройство имеет аппаратный адрес (MAC), который связан с IP-адресом в таблице ARP каждого устройства. Это построено путем обнаружения. Когда пакет предназначен для хоста в локальной сети, он помечен MAC для целевого устройства. Когда пакет предназначен для удаленного хоста, он помечен MAC для маршрутизатора в локальной сети. По мере прохождения через маршрутизатор MAC удаляется, а затем помещается MAC следующего маршрутизатора. Подсеть просто определяет область действия локальной сети. (Это простая версия с 500 символами). - Jonathan J


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

NAT (преобразование сетевых адресов) - это метод (обычно), используемый для создания частных сетей путем сопоставления одного адресного пространства (IP: порт) с другим. В основном это используется для создания частной сети с несколькими частными IP-адресами за одним общедоступным адресом, например, в маршрутизаторах Wifi, организациями (например, университетом или корпорацией), или иногда провайдерами.

Фактический перевод адреса выполнен прозрачно в узлах, поддерживающих NAT, обычно маршрутизаторы. Это может быть множество форм: полный конус, ограничение по адресам, ограничение по портам и т. Д. Или их смесь, которая определяет, как можно инициировать соединения через узел.

Полную информацию можно найти на Википедия, но, например, рассмотрим 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, (который на самом деле находится в другой подсети w.r.t маршрутизатора здесь):

  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.21, src Порт: 14567) и отправить пакеты ответов с этими значениями в целевых полях.
  4. R проверяет порт назначения, который 14567 и пересылает пакет в A,
  5. A получает пакет ответа.

В приведенной выше ситуации, если B попытался открыть соединение на том же исходном порту (14567), он будет сопоставлен с другим портом R(и порт в исходящем пакете изменен) перед отправкой S, То есть, вместо IP-адреса будет также перенос портов.

Здесь есть две вещи:

  1. Из-за такого перевода адреса часто не удается инициировать подключение к устройствам в частной сети, не используя некоторые специальные методы.
  2. Ограничение общих TCP-соединений с одного и того же устройства на сервер (65536 = 2 ^ 16) теперь применяется совместно ко всем устройствам за NAT в форме NAT, используемой выше.

0