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

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

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

Для узла с IP-⁠ад­ре­сом 98.162.71.94 адрес сети равен 98.162.71.64. Чему равно наи­мень­шее ко­ли­че­ство воз­мож­ных ад­ре­сов в этой сети?

 

При­ме­ча­ние. Адрес сети и ши­ро­ко­ве­ща­тель­ный адрес не­об­хо­ди­мо учи­ты­вать при подсчёте.

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

Ре­ше­ние.

За­пи­шем четвёртый байт IP-⁠ад­ре­са и ад­ре­са сети в дво­ич­ной си­сте­ме счис­ле­ния:

9410  =  0101  11102,

6410  =  0100  00002.

За­ме­тим, что 3 пер­вых слева бита ад­ре­са сети сов­па­да­ют с IP-⁠ад­ре­сом, а затем идут нули. Чтобы найти, чему равно наи­мень­шее ко­ли­че­ство воз­мож­ных ад­ре­сов в сети, нужно найти ко­ли­че­ство ну­ле­вых бит в по­след­нем байте маски. Зна­чит, по­сколь­ку не­об­хо­ди­мо найти наи­мень­шее ко­ли­че­ство воз­мож­ных ад­ре­сов в этой сети, зна­че­ние по­след­не­го байта маски рав­ня­ет­ся 1110  00002  =  22410. Ко­ли­че­ство нулей в по­след­нем байте маски рав­ня­ет­ся 5.

Сле­до­ва­тель­но, наи­мень­шее ко­ли­че­ство воз­мож­ных ад­ре­сов в этой сети рав­ня­ет­ся 25  =  32.

 

Ответ: 32.

 

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

from ipaddress import *

for mask in range(32+1):

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

print(net, net.num_addresses)#Для ад­ре­са сети 98.162.71.94 под­хо­дят зна­че­ния 32 и 64, по усло­вию за­да­чи тре­бу­ет­ся наи­мень­шее. т.е. 32

 

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

from ipaddress import ip_network, ip_address

ip = '98.162.71.94'

ip_net = '98.162.71.64'

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

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

if ip_address(ip_net) == net.network_address:

print(net.num_addresses)

break


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