Задания
Версия для печати и копирования в MS Word
Тип 13 № 16815
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-⁠ад­ре­сом, а затем идут нули. Чтобы найти, чему равно наи­боль­шее ко­ли­че­ство воз­мож­ных ад­ре­сов в сети, нужно найти ко­ли­че­ство ну­ле­вых бит в по­след­нем байте маски. Зна­чит, по­сколь­ку не­об­хо­ди­мо найти наи­боль­шее ко­ли­че­ство воз­мож­ных ад­ре­сов в этой сети, зна­че­ние по­след­не­го байта маски рав­ня­ет­ся 1100  00002  =  19210. Ко­ли­че­ство нулей в по­след­нем байте маски рав­ня­ет­ся 6.

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

 

Ответ: 64.

 

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

from ipaddress import *

maxi = 0

for mask in range(32+1):

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

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

maxi = max(maxi, net.num_addresses)

print(maxi)

 

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

from ipaddress import ip_interface, ip_network

ip = ip_interface('98.162.71.94/32')

for mask in range(33):

net = ip_network((ip.ip, mask), 0)

if net.network_address == ip_network('98.162.71.64/32').network_address:

print(net.num_addresses)

break


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