Как подсчитать количество доступных IP-адресов (хостов) в подсети по маске?

«Как подсчитать количество доступных IP-адресов (хостов) в подсети по маске?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Количество доступных для назначения хостам IP-адресов в подсети вычисляется по формуле:

Количество хостов = 2^(32 - n) - 2, где n — длина маски в битах (CIDR-нотация).

Примеры:

  • Маска /24 (255.255.255.0): 2^(32-24) - 2 = 2^8 - 2 = 256 - 2 = 254 хоста.
  • Маска /28 (255.255.255.240): 2^(32-28) - 2 = 2^4 - 2 = 16 - 2 = 14 хостов.

Почему вычитается 2? Из общего диапазона адресов исключаются:

  1. Адрес сети (первый адрес в подсети, все биты хостовой части равны 0).
  2. Широковещательный адрес (broadcast) (последний адрес, все биты хостовой части равны 1).

Особые случаи (RFC):

  • Подсети /31 (255.255.255.254): Используются для point-to-point линков. Формула 2 - 2 не применяется, оба адреса являются usable (RFC 3021). Количество хостов = 2.
  • Подсеть /32 (255.255.255.255): Один адрес, обозначающий конкретный хост (часто используется в маршрутизации).

Практическое применение в DevOps: Эти расчеты используются при проектировании сетей в облаках (AWS VPC, GCP VPC), настройке firewall правил и планировании IP-адресации для кластеров (Kubernetes, Docker Swarm).