Задания
Версия для печати и копирования в MS Word
Тип 13 № 13596
i

В тер­ми­но­ло­гии сетей TCP/⁠IP мас­кой сети на­зы­ва­ет­ся дво­ич­ное число, опре­де­ля­ю­щее, какая часть IP-⁠ад­ре­са узла сети от­но­сит­ся к ад­ре­су сети, а какая  — к ад­ре­су са­мо­го узла в этой сети. При этом в маске сна­ча­ла (в стар­ших раз­ря­дах) стоят еди­ни­цы, а затем с не­ко­то­ро­го места  — нули. Обыч­но маска за­пи­сы­ва­ет­ся по тем же пра­ви­лам, что и IP-⁠адрес,  — в виде четырёх бай­тов, причём каж­дый байт за­пи­сы­ва­ет­ся в виде де­ся­тич­но­го числа. Адрес сети по­лу­ча­ет­ся в ре­зуль­та­те при­ме­не­ния по­раз­ряд­ной конъ­юнк­ции к за­дан­но­му IP-⁠ад­ре­су узла и маске. На­при­мер, если IP-⁠адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0. Для узла с IP-⁠ад­ре­сом 93.138.70.47 адрес сети равен 93.138.64.0. Ка­ко­во наи­мень­шее воз­мож­ное общее ко­ли­че­ство еди­ниц во всех четырёх бай­тах маски? Ответ за­пи­ши­те в виде де­ся­тич­но­го числа.

Спрятать решение

Ре­ше­ние.

По­сколь­ку пер­вый и вто­рой байт ад­ре­сов сов­па­да­ет, то пер­вые два байта пол­но­стью со­сто­ят из еди­ниц.

Раз­бе­рем тре­тий байт маски: для этого пе­ре­ве­дем тре­тьи байты ад­ре­сов и по­смот­рим, в каком бите они от­ли­ча­ют­ся.

70  =  010001102.

64  =  010000002.

Видно, что на 2 по­зи­ции у маски обя­за­тель­но дол­жен сто­ять 1, иначе ад­ре­са по­лу­чат­ся дру­ги­ми. После еди­ни­цы могут быть все нули. Зна­чит: 8 (пол­ный пер­вый байт) + 8 (пол­ный вто­рой байт) + 2 (та часть тре­тье­го байта, ко­то­рая обя­за­на быть еди­ни­ца­ми)  =  18.

 

При­ме­ча­ние. Тре­тий байт маски в дво­ич­ной си­сте­ме счис­ле­ния будет вы­гля­деть как 1100 0000.

 

Ответ:18.

 

При­ведём ре­ше­ние Ильи Ан­дри­а­но­ва на языке Python.

from ipaddress import *

mini = 10**10

for mask in range(32+1):

net = ip_network(f'93.138.70.47/{mask}', 0)

if str(net) == f'93.138.64.0/{mask}':

mini = min(mini, mask)

print(mini)


Аналоги к заданию № 13596: 13623 Все