Статья Автор: Деникина Н.В., Деникин А.В.

Два узла: одна сеть или разные

Маски нет вовсе

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


Пример

Два узла в одной сети имеют адреса 152.217.69.70 и 152.217.125.80. Каково наибольшее возможное значение третьего слева байта маски?

Шаг 1. Дойти до первого различия

Первые байты равны, вторые тоже. В третьем 69 против 125.

  128 64 32 16 8 4 2 1
узел 69 0 1 0 0 0 1 0 1
узел 125 0 1 1 1 1 1 0 1
 
Шаг 2. Найти старший различающийся бит

Слева направо: 0 и 0, затем 1 и 1, а на бите 32 стоят 0 и 1. Вот он.
 

Шаг 3. Понять, что нельзя захватывать

Узлы в одной сети — значит по всем битам, которые маска захватила, адреса совпадают. Бит 32 не совпадает, поэтому захватывать его нельзя.

Самая длинная допустимая маска обрывается прямо перед ним: в третьем байте 11000000, то есть 192. Единиц в маске 18.
 

Шаг 4. Перевернуть вопрос

Замени условие на «в разных сетях» — и маска обязана бит 32 захватить. Тогда самая короткая маска даёт 11100000, то есть 224, и единиц в ней 19.

Один и тот же бит, два противоположных ответа. Читай, какая формулировка в задаче.


Та же задача программой

Программа примеряет маску и смотрит, совпали ли адреса сети у двух узлов.



Что печатает программа
18
192

То же через ipaddress

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



Что печатает программа
192
224

Проверь себя


Узлы 77.88.5.20 и 77.88.21.9 находятся в одной сети. Каково наибольшее возможное значение третьего слева байта маски?

Где теряют балл

  • Искали расхождение по младшему биту, а решает старший.
  • Испугались ответа 0. Если адреса разошлись раньше третьего байта, третий байт маски и правда нулевой.
  • Перепутали стороны: одна сеть — маска короче, разные сети — длиннее.
Печать