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

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

Небольшое отступление: каждая цифра в двоичном числе называется «бит». Это «б» от «двоичного» и «это» от «цифры». Бит - это двоичная цифра.

Преобразование двоичного числа, например, «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

Аналогично, используя маску подсети для «маскировки» битов, покрываемых нулями в 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 битов единиц, и записать его как «/ 24» быстрее, чем как «255.255.255.0». Чтобы преобразовать число CIDR (например, «/ 16») в десятичную маску подсети с точками, просто запишите это число 1, разделите его на группы по 8 бит и преобразуйте в десятичное число. (Например, "/ 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».

Для маршрутизатора этот процесс выбора маршрута выполняется путем построения таблицы маршрутизации и обращения к таблице каждый раз при доставке пакета. Таблица маршрутизации содержит идентификатор сети и имена интерфейса назначения. Вы уже знаете, как получить идентификатор сети по 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-маршрутизаторы быстрее, но простые алгоритмы дают те же результаты.

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

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

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

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

Предположим, что есть еще один маршрутизатор, «Маршрутизатор 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

Вы можете видеть, что маршрутизатор 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, мы добавляем следующую запись в таблицу маршрутизации на маршрутизаторе А:

  • Идентификатор сети: 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 хочет доставить пакеты в сеть с маской подсети 255.255.255.0 192.168.20.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 прикрепленной к маршрутизатору А наш гипотетический пакету с ПК на 192.168.20.13 бы добраться до устройства назначения на 192.168.30.46, но любой ответ, который 192.168.30.46 попытался отправить обратно, будет возвращен маршрутизатором B как «Сеть назначения недоступна». Одностороннее общение обычно нежелательно. Всегда думайте о трафике в обоих направлениях, когда вы думаете об общении в компьютерных сетях.

Вы можете получить много пробега из статических маршрутов. Протоколы динамической маршрутизации, такие как EIGRP, RIP и т. Д., На самом деле представляют собой не что иное, как способ для маршрутизаторов обмениваться друг с другом информацией о маршрутизации, которая фактически может быть настроена со статическими маршрутами. Однако одним из больших преимуществ использования протоколов динамической маршрутизации над статическими маршрутами является то, что протоколы динамической маршрутизации могут динамически изменять таблицу маршрутизации в зависимости от условий сети (использование полосы пропускания, интерфейс отключается и т. Д.) И, как таковые, с использованием динамического протокола. Протокол маршрутизации может привести к конфигурации, которая «обходит» сбои или узкие места в сетевой инфраструктуре. (Протоколы динамической маршрутизации ПУТЬ выходит за рамки этого ответа, хотя.)

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

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

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

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

Скажите, что есть другой маршрутизатор (Маршрутизатор 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

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

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

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

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

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

Есть три основные причины, по которым вы бы подключили сеть:

  • Вы можете хотеть общаться через различные в отличие от средств коммуникации. Если у вас есть W1-соединение T1 между двумя зданиями, на концах этих соединений могут быть размещены 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 за самый полный пост, когда-либо замеченный на serverfault
Скотт Лундберг

3
Проголосовал хотя бы за метафору Одометра. Теперь я знаю, как объяснить людям, как работает бинарный файл.
Фузион

142

Продолжение: Как работает подсеть 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 бит. Так как комбинации «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 бит. У нас осталось 19 битов маски подсети в 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). Это делает для симпатичных примеров, но это пустая трата адресного пространства. Как правило, / 30 или / 31 ( подробности о том, как работает / 31, см. На http://www.faqs.org/rfcs/rfc3021.html - они, безусловно, выходят за рамки этого ответа), сеть используется в ссылки, которые являются строго двухточечными между двумя маршрутизаторами.


Небольшая ошибка: код сразу после «Последний действительный хост ...» возвращается к названию «первый действительный хост». Я предполагаю, что все еще должен сказать «последний».
JoeCool1986

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

2
Я собираюсь поддержать этот ответ, чтобы убедиться, что два ответа поддерживаются в порядке.
l46kok

В той части, где вы создали две подсети из 192.168.40.128 и создали сетевой идентификатор 192.168.40.192, откуда появились 192?
user6607

@ user6607 Подсети подсчитываются в обратном направлении (без пробелов). Например, первая подсеть 0представлена ​​как 00000000. Вторая подсеть 128так 10000000и третья подсеть 192представлена как 11000000и т.д. Просто продолжайте отсчитываемся , чтобы найти новые подсети.
Джозеф Керн

76

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

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


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 году, никто не должен говорить о них вне исторического контекста. Они сбивают с толку и вызывают много заблуждений.
Крис С

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

34

Краткий урок истории: изначально одноадресные 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 находится в подсетях / 24 с, в этом диапазоне будет 65536 (2 ^ 16) подсетей. (Это предполагает, что используемая платформа поддерживает номера подсетей от 0 до 255. См. Ip subnet-zero Cisco).

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


4
Было на самом деле 5 классов.
dbasnett

5
Верно, но нужно ли нам переходить к многоадресной и зарезервированной адресации класса E для вопроса «введение в подсеть»? :)
Мурали Суриар

2
Вы привнесли историю во вступительный вопрос ... Затем оставили ее незавершенной. Не уверен, что хуже.
Крис С

7

Диапазоны сети: на сеть всегда ссылаются 2 числа: одно для определения сети, а другое для определения того, какой компьютер (или хост) находится в этой сети. Поскольку каждый адрес нервной системы имеет длину 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, это очень важно.


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

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


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

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

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's.

Например .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, который первоначально написал « Король дороги» , заменив «У меня нет большой подсети» на «У меня нет сигарет». ».

Я курю свои сигареты до задницы

(Почему маски с таким низким числом заполнены? Потому что, как рассказчик Миллера, маски подсетей подсчитывают все, чего у вас нет .)


Что означает косая черта после 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 (количество адресов в последнем октете), чтобы получить 4096. Если оба последних двух октета равны 0 (например, 255.240.0.0), то мы берем результат вычитания из второго октета (скажем, снова 16), умножим, но 256 (адреса в третьем октете), умножим снова на 256 (адреса в последнем октете), чтобы получить 1 048 576 адресов. Так просто! (Итак, обратное немного сложнее. Если нам нужна подсеть с 1 048 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 символов.)
Джонатан Дж

2

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

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

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

Полную информацию можно найти в Википедии , но, например, рассмотрим маршрутизатор Wi-Fi с 2 подключенными к нему устройствами. Общественности 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(который на самом деле находится в другой подсети с маршрутизатором):

  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.