Сети и телекоммуникации

10 класс

 

vkrysanov320@gmail.com

 

version 1.0 not-fixed, 31-03-2025

IP-адрес и маска

Каждый компьютер, подключенный к сети Интернет, должен иметь собственный адрес, который называют IP-адресом (IP  Internet Protocol).

IP-адрес компьютера  это 32-битное число; для удобства его обычно записывают  в виде четырёх чисел, разделенных точками; каждое из этих чисел находится в интервале 0…255, например: 192.168.85.210.

IP-адрес:

адрес сети

адрес узла

Маска:

1..............................1

0..............................0

\begin{cases} \\ \\ \\ \\ \\ \\ \\ \\ \end{cases}

32 бита

.

.

.

0...255

8 бит

8 бит

8 бит

8 бит

Сначала единицы, затем нули! В маске не могут чередоваться нули и единцы, есть чёткая граница между ними.

Деление адреса определяется маской!

Если перебрать все комбинации в этой части IP-адреса, мы получим все IP-адреса в этой сети.

\& (побитово)

адрес сети

0..............................0

* если два узла относятся к одной сети, то адрес сети у них одинаковый

Задачи

1. Определить номер компьютера в сети, если маска подсети 255.255.255.192, а IP-⁠адрес компьютера в сети 10.18.134.220.

IP-адрес:

Маска:

адрес узла

011100_2 = 28_{10}
00001010.00010010.10000110.11011100
11111111.11111111.11111111.11000000
255.255.255.192
10.18.134.220
\xrightarrow{\text{bin()}}

Решение:

Ответ: 28.

Задачи (2)

2. Для некоторой подсети используется маска 255.255.254.0. Сколько различных адресов компьютеров теоретически допускает эта маска, если два адреса (адрес сети и широковещательный) не используют?

Маска:

часть, отвечающая за адрес узла

000000000_2 = 0_{10}
11111111.11111111.11111110.00000000
255.255.254.0
\xrightarrow{\text{bin()}}

Решение:

111111111_2 = 511_{10}
...
\begin{cases} \\ \\ \end{cases}
\Rightarrow 512

Но два адреса не используется, тогда

512 - 2 = 510.

Ответ: 510.

Задачи (3)

3. Для узла с IP-адресом 220.128.112.142 адрес сети равен 220.128.96.0. Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.

IP-адрес:

Маска:

11011100.10000000.01110000.10001110
?.?.?.?
220.128.112.142
\xrightarrow{\text{bin()}}

Решение:

Адрес сети:

220.128.96.0
11011100.10000000.01100000.00000000
\&
11111111.11111111.111

Восстанавливаем маску

00000.00000000

Третий байт слева:

11100000_2 = 224_{10}

Ответ: 224.

Задачи (4)

4.  Два узла, находящиеся в одной сети, имеют IP-адреса 115.127.30.120 и 115.127.151.120. Укажите наибольшее возможное значение третьего слева байта маски сети. Ответ запишите в виде десятичного числа.

IP-адрес-1:

01110011.01111111.00011110.01111000
115.127.30.120
\xrightarrow{\text{bin()}}

Решение:

Ответ: 0.

IP-адрес-2:

115.127.151.120
01110011.01111111.10010111.01111000

Маска:

11111111.11111111.
?

Максимальное совпадение слева

00000000.00000000

Третий байт слева:

00000000_2 = 0_{10}

единиц слева больше быть не может

Задачи (5)

4.2.  Два узла, находящиеся в одной сети, имеют IP-адреса 152.217.69.70 и 152.217.125.80. Укажите наибольшее возможное значение третьего слева байта маски сети. Ответ запишите в виде десятичного числа.

IP-адрес-1:

10011000.11011001.01000101.01000110
152.217.69.70
\xrightarrow{\text{bin()}}

Решение:

Ответ: 192.

IP-адрес-2:

152.217.125.80
10011000.11011001.01111101.01010000

Маска:

11111111.11111111.11
?

Максимальное совпадение слева

000000.00000000

Третий байт слева:

11000000_2 = 192_{10}

единиц слева больше быть не может

Задачи (6)

5.  Для узла с IP-адресом 111.81.208.27 адрес сети равен 111.81.192.0. Чему равно наименьшее возможное значение третьего слева байта маски? Ответ запишите в виде десятичного числа.

IP-адрес:

01101111.01010001.11010000.00011011
111.81.208.27
\xrightarrow{\text{bin()}}

Решение:

Ответ: 192.

Адрес сети:

111.81.192.0
01101111.01010001.11000000.00000000

Маска (min):

11111111.11111111.11
?
000000.00000000

Третий байт слева:

11000000_2 = 192_{10}

единиц слева может быть больше, но требуется наименьшее возможное (показано в следующей строке)

Восстанавливаем маску

11111111.11111111.111
00000.00000000

Маска (max):

маска заполняется единицами максимально, на столько, на сколько позволяет адрес сети

Библиотека

ipaddress
from ipaddress import *					  	# подключение библиотеки

Функция ip_address() позволяет создать объект — IP-адрес. В качестве аргумента функции мы указываем строку, в которой записано значение IP-адреса:

from ipaddress import *	

ip = ip_address('192.168.0.1')
print(ip)									# => 192.168.0.1
from ipaddress import *	

ip = bin(int(ip_address('57.179.208.27')))[2:].zfill(32)
print(ip)			# => 00111001101100111101000000011011

Вывод двоичной записи IP-адреса:

Библиотека                        (2)

ipaddress

Функция ip_network() создает объект сети. Каждая сеть задаётся IP-адресом и маской сети, поэтому в качестве аргумента функции указывается строка, содержащая IP-адрес сети и маску разделённые /. Маска может указываться либо полной записью, либо профиксной (указанием числа единиц в маске).

from ipaddress import *

net = ip_network('192.168.10.0/255.255.255.0')
print(net)				# => 192.168.10.0/24
from ipaddress import *

net = ip_network('192.168.10.0/24')
print(net)				# => 192.168.10.0/24

или так:

Библиотека                        (3)

ipaddress

Чтобы определить принадлежит ли IP-адрес сети необходимо использовать оператор принадлежности in:

from ipaddress import *

if ip_address('192.168.10.100') in ip_network('192.168.10.0/24'):
    print('IP-адрес 192.168.10.100 принадлежит сети.')
else:
    print('IP-адрес 192.168.10.100 не принадлежит сети.')

Задачи

1. Сеть задана IP⁠-⁠адресом 172.16.168.0 и маской сети 255.255.248.0. Сколько в этой сети IP⁠-⁠адресов, для которых количество единиц в двоичной записи IP⁠-⁠адреса не кратно 5?

 

from ipaddress import *

net = ip_network(f'172.16.168.0/255.255.248.0', strict=False)
cnt = 0
for ip in net:
    if (bin(int(ip))[2:]).count('1') % 5 != 0:
        cnt += 1
print(cnt)

перебор всевозможных IP-адресов в данной сети

если адрес не является сетевым ip_network() вызывает исключение; данная конструкция исключит это

Задачи (2)

2. Для узла с IP-адресом 154.112.144.160 адрес сети равен 154.112.144.0. Для скольких различных значений маски это возможно?

from ipaddress import *

for mask in range(33):
    net = ip_network('154.112.144.160/' + srt(mask), 0)
    print(net)

аналог strict=False

Ищем в списке сеть 154.112.144.0 и записываем количество масок

Аналитически быстрее!

Задачи (3)

3. Для узла с IP-адресом 108.133.75.91 адрес сети равен 108.133.75.64. Чему равно наибольшее количество возможных адресов в этой сети?

from ipaddress import *

for mask in range(33):
    net = ip_network('108.133.75.91/' + str(mask), 0)
    print(net)

Ищем в списке сеть 108.133.75.64 и определяем наименьшее кол-во единиц в маске (нули отвечают за количество IP-адресов в сети (их количество должно быть наибольшим):

Аналитически быстрее!

32 - 26 = 6 (\text{бит })

Кол-во IP-адресов:

2^6 = 64

Задачи (4)

4. Узлы с IP⁠-⁠адресами 206.123.209.193 и 206.123.210.118 принадлежат одной сети. Какое наименьшее количество IP-адресов, в двоичной записи которых ровно 15 единиц, может содержаться в этой сети? 

from ipaddress import *
ip1    = ip_address('206.123.209.193')
ip2    = ip_address('206.123.210.118')
answer = []
for mask in range(16,33):
    net = ip_network('206.123.209.193/' + str(mask), strict=False)
    if (ip1 in net) and (ip2 in net):
        count = 0
        for ip in net:
            b = bin(int(ip))[2:]
            if b.count('1') == 15:
                count += 1
        answer.append(count)
print(min(answer))

Задачи (5)

5. Узел с IP-адресом 156.38.155.174 принадлежит подсети, в которой 45 адресов, двоичная запись которых содержит 12 единиц. Сколько единиц в двоичной записи маски этой подсети?

from ipaddress import *

given_ip = ip_address('156.38.155.174')
for mask in range(0,33):
    net = ip_network(f'156.38.155.174/{mask}', strict=False)
    if (given_ip in net):
        count = 0
        for ip in net:
            if bin(int(ip))[2:].count('1') == 12:
                count += 1
            if count > 45:
                break
        if count == 45:
            print(net)

форматная постановка

5. Сети и телекоммуникации

By vkrysanov320

5. Сети и телекоммуникации

  • 219