В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
У двух узлов из одной сети IP-адреса 61.58.73.42 и 61.58.75.136. Определите маску сети с наибольшим количеством единиц, для которой это возможно. Для найденного значения маски посчитайте количество узлов (устройств), в IP-адресе которых нечётное количество единиц.
Примечание: IP-адреса подсети и широковещательной передачи (broadcast) не могут быть использованы для устройств.
Решение:
Решение на Python:
def solve():
ip1 = "61.58.73.42"
ip2 = "61.58.75.136"
def to_bin(ip):
return ''.join(f"{int(x):08b}" for x in ip.split('.'))
bin1, bin2 = to_bin(ip1), to_bin(ip2)
# Находим длину маски
mask_len = 0
for i in range(32):
if bin1[i] == bin2[i]:
mask_len += 1
else:
break
host_bits = 32 - mask_len
total_addresses = 2 ** host_bits
result = total_addresses // 2 - 2
print(result)
solve()
Ответ: 510
Ответ:
510