IP-адреса и маски
Маска
Обычная сеть на 256 адресов: 192.168.0.0/24
IP-адрес. Десятичная запись 192 168 0 0 IP-адрес. Двоичная запись 11000000 10101000 00000000 00000000 Маска подсети. Двоичная запись 1111111 111111111 11111111 00000000 Маска подсети. Десятичная запись 255 255 255 0
IP-адрес состоит из 32 бит, поделенных на 4 части по 8 бит в каждой.
Маска подсети также имеет длину 32 бита - она фактически шаблон, по которому определяется принадлежность адреса подсети. Там, где в маске стоят единицы, значение меняться не может, то есть часть 172.16.5 совершенно неизменна и она будет одинакова для всех хостов этой подсети, а та, где нули — варьируется.
То есть в примере выше 172.16.5.0/24 - это адрес сети, а хосты будут 172.16.5.1-172.16.5.254 (последний 255 — широковещательный), потому что 00000001 — это 1, а 11111110 — 254 (речь о последнем октете адреса).
/24 означает, что длина маски 24 бита, то есть у нас идёт 24 единицы — неизменная часть и 8 нулей.
Другой случай, когда маска у нас, например, 30 бит, а не 24.
Наример есть сеть 172.16.2.4/30
Распишем это так:
IP-адрес. Десятичная запись 172 16 2 4 IP-адрес. Двоичная запись 10101100 00010000 00000010 00000100 Маска подсети. Двоичная запись 11111111 11111111 11111111 11111100 Маска подсети. Десятичная запись 255 255 255 252
Как видно, для этой подсети могут меняться только последние два бита. Последний октет может принимать следующие 4 значения:
00000100 — адрес подсети (4 в десятичной системе) 00000101 — адрес узла (5) 00000110 — адрес узла (6) 00000111 — широковещательный (7)
Всё, что за пределами этого — уже другая подсеть
То есть теперь ясно, что маска подсети — это последовательность 32-х бит, где сначала идут единицы, означающие адрес подсети, потом идут нули, означающие адрес хоста. При этом чередоваться нули и единицы в маске не могут чередоваться. То есть маска 11111111.11100000.11110111.00000000 невозможна
Обратная маска (wildcard)
Для подавляющего большинства админов, обратная маска - это не более, чем инверсия обычной маски. То есть нули в начале задают адрес части, которая должна совпадать обязательно, а единицы наоборот свободную часть.
То есть в вверхнем примере, если хотим отфильтровать все хосты из подсети 172.16.5.0/24, то в access-list задаём
172.16.5.0 0.0.0.255
Потому что обратная маска будет выглядеть так:
00000000.00000000.00000000.11111111
Во втором примере с сетью 172.16.2.4/30 обратная маска будет выглядеть так - 30 нулей и две единицы:
Обратная маска. Двоичная запись 00000000 00000000 00000000 00000011 Обратная маска. Десятичная запись 0 0 0 3
Соответственно параметр в access-листе будет выглядеть так:
172.16.2.4 0.0.0.3
В описанных ситуациях последний октет обратной маски получается вычитанием из 255 цифры последнего октета обычной маски (255-252=3) и т.д.
Но на самом деле обратная маска - это несколько более богатый инструмент, им можно объединять адреса внутри одной подсети или даже объединять подсети, но самое главное отличие, можно чередовать нули и единицы. Это позволяет, например, отфильтровать определённый узел (или группу) в нескольких подсетях одной строкой.
Пример 1
Дано: сеть 172.16.16.0/24 Надо: отфильтровать первые 64 адреса (172.16.16.0-172.16.16.63) Решение: 172.16.16.0 0.0.0.63
Пример 2
Дано: сети 172.16.16.0/24 и 172.16.17.0/24 Надо: отфильтровать адреса из обеих сетей Решение: 172.16.16.0 0.0.1.255