Продвинутые знания CIDR
Предыстория и история
Если вы инженер DevOps или SRE, вы должны использовать одну из этих двух команд: ifconfig
и ip addr
. Для устранения неполадок в сети обычно вы входите на хост и проверяете конфигурацию и состояние сети, запустив:
root@test:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::f816:3eff:fec7:7975/64 scope link valid_lft forever preferred_lft forever
Эта команда показывает все сетевые карты на этой машине. Как видите, каждая сетевая карта имеет IP-адрес. IP-адрес — это коммуникационный адрес сетевой карты в сетевом мире, который эквивалентен номеру дома в нашем реальном мире.
Поскольку это номер дома, он не может быть одинаковым для всех, иначе будут конфликты. Например, если бы все звонили №1001, блок 6, экспресс-доставки было бы некуда. Поэтому иногда на нашем компьютере возникает конфликт сетевых адресов, и возникает ситуация, когда он не может получить доступ к Интернету, большинство из которых - конфликты IP-адресов.
Как показано выше, 10.100.122.2
— это IP-адрес. Адрес разделен точками на четыре части по 8 бит каждая, поэтому всего адрес IPv4 составляет 32 бита. Поскольку адреса IPv4 недостаточно, был изобретен IPv6, который в приведенном выше выводе равен inet6 fe80::f816:3eff:fec7:7975/64
. Это 128 бит, которых пока достаточно, но кто знает, что будет в будущем?
Изначально 32-битных IP-адресов было недостаточно, и они были разделены на 5 категорий. Если подумать сейчас, когда тогда выделялись адреса, это была роскошь.
В сетевом адресе, по крайней мере на момент проектирования, есть две основные части для классов A, B и C, первая часть — это номер сети, а вторая часть — номер хоста.
В следующей таблице подробно показано количество хостов, которые могут быть включены в три типа адресов A, B и C.
Вы видите, что максимальное количество хостов, которое может содержать адрес класса C
, слишком мало, всего 254. А максимальное количество хостов, которое может содержать адрес класса B
, слишком велико. В одну сеть помещается более 60 000 машин, и среднее предприятие в принципе не может достичь такого масштаба, а неиспользуемые адреса тратятся впустую.
CIDR
Бесклассовая междоменная маршрутизация (CIDR) — это метод распределения IP-адресов и IP-маршрутизации. Набор стандартов интернет-протокола (IP) используется для создания уникальных идентификаторов для сетей и отдельных устройств.
Этот метод нарушает практику использования нескольких типов изначально разработанных адресов и делит 32-битный IP-адрес на два: номер сети впереди и номер хоста внизу. спина .
Куда делить? Если вы обратите внимание, то увидите, что 10.100.122.2/24
, этот IP-адрес имеет косую черту, а после косой черты стоит цифра 24. Это адресное представление — CIDR. Последние 24 означают, что из 32 бит первые 24 бита — это номер сети, а последние 8 бит — номер хоста.
CIDR был введен в 1992 году, а это означает, что понятие сетевого «класса» на уровне таблицы маршрутизации было отменено и заменено понятием «сетевой префикс». «Бестиповый» означает, что решения о маршрутизации теперь принимаются на основе всей 32-битной маски IP-адреса.
Не имеет значения, относится ли его IP-адрес к классу A, классу B или классу C. Идея такова: объединить множество адресов класса C для присвоения адреса класса B. Такой способ выделения нескольких IP-адресов позволяет объединить множество записей в таблице маршрутизации в меньшее число.
Чтобы использовать это слияние, должны быть соблюдены следующие три свойства:
- Когда несколько IP-адресов объединяются для маршрутизации, IP-адреса должны иметь одинаковые биты старшего разряда.
- Таблицы маршрутизации и алгоритмы маршрутизации должны быть расширены, чтобы принимать решения о маршрутизации на основе 32-битных IP-адресов и 32-битных масок.
- Протокол маршрутизации должен быть расширен, чтобы иметь 32-битную маску в дополнение к 32-битному адресу.
Согласно RFC1466 [Gerich 1993], весь мир разделен на четыре региона, и каждому региону присвоен непрерывный адрес класса C:
- Европа:
194.0.0.0 ~ 195.255.255.255
- Северная Америка:
198.0.0.0 ~ 199.255.255.255
- Центральная и Южная Америка:
200.0 .0.0 ~ 201.255.255.255
- Азиатско-Тихоокеанский регион:
202.0.0.0 ~ 203.255.255.255
Таким образом, каждый регион имеет около 32 миллионов адресов, а еще 32 миллиона адресов 204.0.0.0 ~ 223.255.255.255
зарезервированы для резервного копирования.
Преимущества такого метода размещения очевидны:
- Распределение адресов непрерывно
- CIDR упрощает настройку таблицы маршрутизации
Примечание. Диапазоны частных IP-адресов CIDR перечислены ниже:
Пример CIDR
Давайте посмотрим на блок CIDR 16.158.165.91/22
. Можете ли вы найти первый адрес, маску подсети и широковещательный адрес этой сети?
Если ваш ответ для первого IP-адреса 16.158.165.1
, то это неправильно. Давайте проведем анализ.
Так как /22
не является целым числом, кратным 8, с ним непросто обращаться. Его можно только сначала преобразовать в двоичный файл. Часть 16.158 не перемещается, она занимает первые 16 бит. 165 в середине становится 10100101
в двоичном формате. В дополнение к первым 16 битам осталось 6 бит. Итак, первые 6 из 8 бит — это номер сети, 16.158.‹101001›, а ‹01›.91 — номер машины.
Так как каждая часть должна иметь 8 бит, поэтому мы добавляем еще два 0
к номеру сети, тогда он становится 16.158.‹10100100› (16.158.164). Первый доступный IP-адрес:16.158.164.1. Диапазон IP-адресов: 16.158.164.0–16.158.167.255.
Обратите внимание, что 16.158.164.0 — это сетевой адрес, а 16.158.164.255 — сетевой широковещательный адрес. Оба зарезервированы.
Пример использования в реальной жизни
Требования:
Предприятию требуется 1000 IP-адресов. Интернет-провайдер имеет блок адресов 200.0.64.0/18
.
Анализ:
Поскольку 1000 IP-адресов = 2^10
= 1024
, что занимает 10 бит адреса. Блок адресов, назначенный интернет-провайдером предприятию, может быть: 200.0.68.0/22
(бит сети 22, бит хоста 10).
Если у компании четыре дочерних компании, IP-адреса, необходимые для каждой дочерней компании, следующие:
- 500 для компании А
- 250 для компании B
- 120 для компании C
- 120 для компании D
Давайте сначала проанализируем адресный блок.
Интернет-провайдер: 200.0.64.0/18
- Первый адрес:
200.0.64.0 = 11001000.00000000.01000000.00000000
- Последний адрес:
200.0.127.255 =11001000.00000000.01111111.11111111
Общее количество адресов провайдеров:2¹⁴ = 16384
.
Корпоративные CIDR
Предприятию нужно 1000 IP, начиная с 2¹⁰ = 1024
, поэтому мы можем рассчитать, что хостовая часть — 10 бит, сетевая часть — 22 бита. Мы можем выделить 200.0.64.0/22
предприятию.
- Первый адрес:
200.0.64.0 = 11001000.00000000.010000 00.00000000
- Последний адрес:
200.0.67.255 = 11001000.00000000.010000 11.11111111
Затем мы можем рассчитать сетевую часть для каждой дочерней компании:
- Компания А,
500 IPs = 2⁹ = 512 = 9 bits
- Компания Б,
250 IPs = 2⁸ = 256 = 8 bits
- Компания С,
120 IPs = 2⁷ = 128 = 7 bits
- Компания Д,
120 IPs = 2⁷ = 128 = 7 bits
Итак, мы можем выделить следующие CIDR:
- Компания А:
200.0.64.0/23
(200.0.64.0 ~ 200.0.65.255
) - Компания Б:
200.0.66.0/24
(200.0.66.0 ~ 200.0.66.255
) - Компания С:
200.0.66.0/25
(200.0.67.0 ~ 200.0.67.127
) - Компания D:
200.0.67.128/25
(200.0.67.128 ~ 200.0.67.255
)
В реальной жизни вам не нужно выполнять расчеты вручную, есть много онлайн-калькуляторов CIDR, которые вы можете использовать, например https://www.ipaddressguide.com/cidr.