Найти тему
Стив Май

Разбор ЕГЭ. Информатика. Задача № 12

+Оглавление

Разбираем задачу №12 в ЕГЭ по информатике.

Обратите внимание, здесь будет не только пример решения, но и разбор задания по существу.

Для примера я беру демоверсию 2020 года (актуальная на момент написания статьи) с сайта fipi.ru.

Задание №12 ЕГЭ информатика
Задание №12 ЕГЭ информатика

Прежде чем приступать к решению этого примера, посмотрим в спецификацию к демоверсии.

Спецификация
Спецификация

Задание базового уровня сложности, на которое отводится всего 2 минуты, призвано проверить, как ученик знает принципы функционирования компьютерных сетей. Задание довольно провокационное, с той точки зрения, что есть очень много учеников, которые пользуются Интернетом круглые сутки, и через это считают, что всё об Интернете знают, однако даже не задумываются, что существуют более глубокие принципы.

Кодификатор
Кодификатор

В п. 3.1.1 указано, что мы должны знать не только программную, но и аппаратную часть компьютеров и компьютерных систем. Последняя формулировка довольно размытая, и может включать в себя что угодно, что связано с компьютерами, однако опираясь на раздел (3.1) можно однозначно утверждать, что речь идёт об аппаратной части именно вычислительных машин и физического строения сетей.

п. 2.3. тоже провокационный, по той же причине. Работать и уметь работать - разные вещи. Когда микроскопом гвозди забивают - это тоже работа...

Разбор задания

Из года в год в демоверсии (и на экзамене) из всего многообразия выбираются задания, в которых требуется знать протокол IPv4. Что неудивительно, ибо это самый распространённый на сей день протокол передачи данных по сетям. Я не буду вдаваться в подробности протоколов, топологий сетей и прочего - это всё можно найти в других источниках, на википедии, например, а тут займёт слишком много места. Я грубо объясню на пальцах, как оно работает.

Для передачи информации с одного компьютера на другой нельзя просто передавать "нолики" и "единички" этой информации, нужно обязательно подать условный сигнал, по которому адресат начнёт принимать "нолики" и "единички", и договориться, как сигнализировать, когда приём окончен. Примерно, как в радиоэфире: передающий называет свой позывной, говорит информацию, сообщает, что переходит на приём. По схеме "начало -> данные -> завершение"

Элементы аппаратного обеспечения

Сигнал можно подавать вообще по отдельному проводу (синхронная передача), или использовать специальный формат (протокол). Нас интересует второй метод. Например, при передачи информации по COM-порту используется следующий формат: при изменении уровня напряжения с низкого на высокий, компьютер ждёт заранее определённое время и замеряет уровень сигнала. Если уровень низкий, то это считается за "1", если высокий - за "0". И так повторяется заранее оговорённое количество раз. Заранее компьютеры должны договориться, сколько времени ждать между измерениями и какой формат у данных будет. Такого рода "договорённости" называют протоколами. Например, протокол для COM-порта может быт таким:

Картинка из интернета
Картинка из интернета

Первый бит - сигнал к работе, чтобы проверить, что это не случайный всплеск. Дальше восемь бит относятся к той информации, которая передаётся. Потом следует бит чётности, для проверки ошибок передачи (как в задании №6). И последним идёт бит завершения передачи. По мере приёма таких пакетов, эти восьмибитные блоки склеиваются в полную информацию.

Склейка отдельных пакетов
Склейка отдельных пакетов

Краткое описание адресации в IP-протоколе (v4)

Если компьютеры соединены напрямую, то передать информацию от одного другому не составит труда, и более сложных конструкций не требуется. Но если в сети есть ещё хотя бы один узел, то может возникнуть элементарная путаница с тем, кому принимать сигнал, а кому игнорировать. Поэтому формат передачи сильно усложняется. Среди передаваемых битов должен быть ещё и уникальный идентификатор адресата. А если учесть, что один компьютер может общаться с компьютерами из других сетей (через шлюзы), то нужно ещё и как-то маркировать сети. Все эти проблемы более или менее разрешает протокол IP (Internet Protocol). Более подробное описание структуры пакета есть в википедии, я не буду сюда его переносить.

Нам важно, что в пакете среди ноликов и единичек "заголовка", обязан содержаться адрес получателя, и по этому адресу каждый компьютер может понять, надо ли ему принимать этот пакет, отправлять дальше в другую сеть, или же игнорировать. Делать он будет это очень быстро, просто сравнивая со своим.

Под адрес выделено 4 байта, 32 бита. 32 нолика-единички, которые назначаются каждому компьютеру, подключенному к сети. На бумаге выглядеть оно может примерно так:

Двоичная запись IP адреса компьютера
Двоичная запись IP адреса компьютера

Само по себе число будет длинным даже в десятичной или шестнадцатиричной записях ("3232235788" или "C0A8010C"), поэтому адрес разбивают на 4 числа по 8 бит (по байтам), и ставят между ними точки (как во второй строке). В переводе в десятичную систему адрес будет записан как "192.168.1.12", что гораздо читабельнее, писабельнее и запоминабельнее.

Теперь мы понимаем, как связаны 4 числа, записанные через точки, с процессом передачи информации. И остаётся нам понять, что такое "маска сети", о которой говорится в задании.

Адрес - штука универсальная. В ней должен быть зашито достаточно информации, чтобы доставить пакет по назначению. Так же как наш адрес можно указать "страна-город-улица-дом-квартира", в ip-адресе тоже есть части разного уровня. Тут достаточно иметь адрес сети и адрес компьютера в сети (как если бы все жили в одном городе и в одноквартирных домах).

Левые биты адреса относятся к адресу сети, а правые - к адресу компьютера в этой сети. Чтобы понять, где в ip-адресе эта граница, используют разные способы. Например, маска сети. Маска - это такой же набор из 32х ноликов-единичек, в котором записано, какая часть адреса относится к сети. Сделано это с помощью единичек в двоичной записи маски. Для примера возьмём маску 255.255.255.0

Итак, на тех местах, где в маске сети стоят единички, в ip-адресе будут стоять биты, относящиеся к адресу сети:

Как по маске (MSK) и IP вычислить адрес сети (NET)
Как по маске (MSK) и IP вычислить адрес сети (NET)

В нашем примере адрес сети 192.168.1.0, а номер компьютера в этой сети - 12.

Важно заметить, что не всегда маска делит адрес на целое число байт. Возможен такой вариант (если маска 255.255.254.0):

Второй пример, маска уже 255.255.254.0
Второй пример, маска уже 255.255.254.0

Тогда адрес сети 192.168.0.0, а номер компьютера 268.

Решение задания

Вооружившись знаниями из предыдущих параграфов, можно попытаться решить задание. Для этого запишем в двоичной форме через точки все адреса и маски.

Нам не дана маска, поэтому её биты оставим пустыми
Нам не дана маска, поэтому её биты оставим пустыми

Осталось определить, где же граница между адресом сети и номером компьютера. Правила такие

  • Там, где в маске единички, IP-адрес и адрес сети совпадают
  • Там, где в маске нолики, в адресе сети должны быть тоже нули
  • Маска заполняется слева единицами, справа нулями

Под эти правила подойдёт только такая маска:

-10

Теперь мы знаем все параметры сети и компьютера, поэтому можно смело читать вопрос к задаче:

Чему равен последний (самый правый) байт маски?

Здесь слово "байт" имеет смысл "8 ноликов-единичек", а не единицы измерения. И мы его двоичную запись прекрасно видим: "11000000", однако нам надо записать десятичное число. Нет ничего проще - переводим:

Перевод из двоичной в десятичную экспресс-методом через разряды
Перевод из двоичной в десятичную экспресс-методом через разряды

Ответ 192.

Оптимизация

Для полноценной работы с масками и адресами, нам придётся очень много чисел переводить в двоичную систему и обратно (4 числа IP-адреса, 4 числа адреса сети, 1 число маски). Обратите внимание, что будет несколько пар повторяющихся чисел:

111.81.27.224
111.81.27.192

Это существенно упрощает дело, и в двоичную нам надо переводить не 8 чисел, а 5.

В задании надо обратить внимание на то, что спрашивают. Как правило, в ЕГЭшных задачах просят найти не всё, а только частный элемент. Нас просят только правый байт маски. Поэтому можно обойтись переводами только правых байтов, а это 2 числа. При чём, числа довольно хорошие (224 и 192), экспресс-методом они переведутся даже быстрее, чем, например 27. Обратный перевод (11000000_2=192) тоже будет простым, так как у нас уже есть перевод числа 192 в двоичную систему.

В других вариациях я встречал задания, в которых речь шла о третьем слева байте, что тоже отлично оптимизируется с помощью этой стратегии.

Таким образом, для выполнения этого задания надо всего лишь перевести два хороших числа из десятичной системы в двоичную, записать их, найти границу, записать двоичное число маски и перевести его в десятичную систему счисления. Вполне можно уложиться в отведённые две минуты, не так ли?

PS или "вычислю по айпи"

Часто в Сети можно услышать такую угрозу. Она не более, чем блеф, разумеется, ведь по "внешнему" айпи можно узнать только к какой сети принадлежит компьютер, но географическое местоположение этой сети никак не записано в адресе. Эти данные можно получить у компании (физика или юрика), которая организовывала эту подсеть, разумеется только по санкции суда. Однако даже в таком случае, есть шанс напороться на виртуальную сеть, узлы которой могут быть удалены друг от друга на 40 000 километров.