Воскресенье, утро, Стамбул. Сетевой инженер из России пьёт кофе в кафе с видом на Босфор. Вдруг звонок:
— Васян, выручай, нужно срочно продиагностировать кусок сети, без тебя никак.
— В чём дело?
— У нас два компьютера соединены через два шлюза. Нам нужно понять скорость сигнала между этими шлюзами.
— В смысле? Ну зайдите на шлюз и сделайте пинг. Он вам скажет точное время прохождения сигнала.
— Мы не можем, у нас нет пароля, а у кого он — никто не знает.
— Ладно, что вы ещё знаете?
Дальше он узнал вот что:
- Есть два компьютера.
- Между ними два шлюза: красный и синий.
- Между двумя шлюзами ещё какие-то устройства: серверы, передатчики, шлюзы и т. д. — мы не знаем какие. Они замедляют сигнал.
- Мы не знаем точный пинг (то есть время прохождения сигнала) между всеми этими точками.
- Но если прогнать пинг от первого компьютера до красного шлюза и сравнить с пингом от красного шлюза до второго компьютера, то разница в пинге будет 25 миллисекунд.
- А если сравнить пинг до и от синего шлюза, то разница будет уже 35 миллисекунд.
- Скорость пинга одинаковая в обе стороны всё время.
Задача — узнать пинг (то есть скорость прохождения сигнала) между красным и синим шлюзом. Предположительно там стоит какое-то оборудование, которое замедляет наш сигнал слишком сильно, и в зависимости от показателей замедлений нужно дать кому-то по шапке.
Василий поспорил, что сможет решить эту задачу, даже не открывая компьютера. В выпадайке — как ему это удалось.
Нарисуем схематично наше соединение с двумя шлюзами, красным и синим. Условно будем считать, что длина каждого отрезка соответствует скорости обработки сигнала:
Теперь обозначим за x, y и z три отрезка сигнала, которые нам неизвестны, и подпишем разницу в пинге — это то, что мы знаем:
По рисунку можно составить два уравнения:
x + y − z = 25 ← когда пингуем красный шлюз
y + z − x = 35 ← когда пингуем синий шлюз
Сложим эти уравнений друг с другом:
x + y − z + y + z − x = 25 + 35
Сгруппируем неизвестные друг с другом:
(x − x) + (y + y) + (z − z) = 60
2y = 60 → y = 30
Получается, пинг между шлюзами, которое мы обозначили за y, равен 30 миллисекунд.