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

В тер­ми­но­ло­гии сетей TCP/⁠IP мас­кой сети на­зы­ва­ет­ся дво­ич­ное число, опре­де­ля­ю­щее, какая часть IP-⁠ад­ре­са узла сети от­но­сит­ся к ад­ре­су сети, а какая  — к ад­ре­су са­мо­го узла в этой сети. При этом в маске сна­ча­ла (в стар­ших раз­ря­дах) стоят еди­ни­цы, а затем с не­ко­то­ро­го места  — нули.

Адрес сети по­лу­ча­ет­ся в ре­зуль­та­те при­ме­не­ния по­раз­ряд­ной конъ­юнк­ции к за­дан­но­му IP-⁠ад­ре­су узла и маске.

На­при­мер, если IP-⁠адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.

Узлы с IP-⁠ад­ре­са­ми 202.3.20.24 и 202.3.27.11 на­хо­дят­ся в одной сети. Ука­жи­те наи­мень­шее воз­мож­ное ко­ли­че­ство при­над­ле­жа­щих этой сети IP-⁠ад­ре­сов, в дво­ич­ной за­пи­си ко­то­рых чётное число еди­ниц.

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

Ре­ше­ние.

Рас­смот­рим какая часть IP-⁠ад­ре­са узлов от­но­сить­ся к ад­ре­су сети. Пер­вые два байта слева у узлов оди­на­ко­вые, сле­до­ва­тель­но, они от­но­сят­ся к ад­ре­су сети.

Рас­смот­рим тре­тий слева байт узлов IP-⁠ад­ре­сов в дво­ич­ной си­сте­ме счис­ле­ния:

2010  =  0001 01002,

2710  =  0001 10112.

Видим, что пер­вые 4 бита узлов IP-⁠ад­ре­са слева оди­на­ко­вые, а пятый бит от­ли­ча­ет­ся. Сле­до­ва­тель­но, пер­вые 4 бита узлов IP-⁠ад­ре­са слева от­но­сят­ся к ад­ре­су сети, а осталь­ные 4  — к ад­ре­су узлов (к ад­ре­су узлов можно от­не­сти и боль­шее ко­ли­че­ство бит, но нас ин­те­ре­су­ет ми­ни­маль­ное ко­ли­че­ство). По­сколь­ку в чет­вер­том байте улов IP-⁠ад­ре­сов еще 8 бит, то для ад­ре­сов узлов от­но­сят­ся 8 бит + 4 бит  =  12 бит.

Всего воз­мож­но 212  =  4096 IP⁠-⁠ад­ре­сов, по­ло­ви­на ко­то­рых будет со­дер­жать чет­ное ко­ли­че­ство еди­ниц.

Наи­мень­шее воз­мож­ное ко­ли­че­ство при­над­ле­жа­щих этой сети IP⁠-⁠ад­ре­сов, в дво­ич­ной за­пи­си ко­то­рых чётное число еди­ниц,  — 2048.

 

Ответ: 2048.

 

При­ме­ча­ние.

В маске после нуля идут толь­ко одни нули.

 

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

from ipaddress import ip_network, ip_address

ip = ip_address('202.3.20.24')

for mask in range(32,-1,-1):

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

if ip in net:

print(net.num_addresses//2)

break