February 1st, 2021

Программа ping и зависимость задержки от расстояния

Вопрос из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

33. Программа ping позволяет отправлять тестовый пакет по указанному адресу и исследовать время его прохождения в одну сторону и назад в сумме. Попробуйте воспользоваться этой программой, чтобы выяснить, сколько времени следуют данные от вашего местонахождения к различным известным адресам. Используя полученные данные, постройте график зависимости времени прохождения пакета от расстояния. Лучше всего использовать для экспериментов серверы университетов, поскольку их расположение очень хорошо известно. Например, berkeley.edu находится в Беркли, штат Калифорния, mit.edu — в Кембридже, Массачусетс, vu.nl — в Амстердаме, Нидерланды, www.usyd.edu.au — в Сиднее, Австралия и www.uct.ac.za — в Кейптауне, ЮАР.


В некоторых местах я подправил перевод (где отмечено красным).

Программа ping входит в поставку всех современных операционных систем, умеющих работать с компьютерной сетью. Эта программа посылает пакет-запрос к узлу сети с заданным адресом, этот узел должен получить пакет-запрос и отправить обратно пакет-ответ. Программа ping замеряет и выводит на дисплей время между отправкой пакета-запроса и получением пакета-ответа. Таким образом, полученное время — это сумма времени на прохождение пакета-запроса к заданному узлу сети и времени на прохождение пакета-ответа от заданного узла обратно к узлу, на котором изначально запустили программу ping. Из-за того, что полученное время является суммой двух отрезков времени, его называют «круговой задержкой» (по-английски «round-trip time» или сокращенно «RTT»).

https://ru.wikipedia.org/wiki/Ping
https://en.wikipedia.org/wiki/Ping_(networking_utility)
https://ru.wikipedia.org/wiki/Круговая_задержка
https://en.wikipedia.org/wiki/Round-trip_delay

Я использую операционную систему «Windows 10 Pro». Программу ping в этой операционной системе можно запустить с помощью программы командной строки (cmd.exe). Командную строку можно запускать разными способами. Я запускаю поиск операционной системы (кнопка с увеличительным стеклом рядом с кнопкой «Пуск», но у кого-то эта кнопка может быть скрыта) и уже через него запускаю командную строку.

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

Приведу пример простейшего использования этой команды:
ping www.berkeley.edu
Сначала пишется название команды, а через пробел — доменное имя хоста (как в вышеприведенном примере) или IP-адрес хоста.

К пяти доменным именам из обсуждаемого вопроса в книге Таненбаума я добавил еще два доменных имени (два российских университета) и оформил результат работы программы ping следующей таблицей.

Доменное имяУниверситетIP-адресRTT, мсРасстояние, км
spbu.ruСПбГУ, Санкт-Петербург, Россия195.70.219.10110121
www.msu.ruМГУ, Москва, Россия188.44.50.10320756
www.vu.nlАмстердам, Нидерланды104.21.91.61211722
web.mit.eduМТИ, Кембридж (штат Массачусетс), США23.53.49.172206498
www.berkeley.eduБеркли (штат Калифорния), США50.112.22.2341818764
www.uct.ac.zaКейптаун, ЮАР137.158.154.23026410531
www.sydney.edu.auСидней, Австралия95.101.133.185514972

Университеты в таблице расположены в порядке возрастания расстояния. Под расстоянием имеется в виду расстояние по прямой между моим местонахождением (город Выборг, Россия) и местонахождением конкретного университета. (Строго говоря, расстояние по прямой по поверхности планеты Земля на самом деле представляет собой некую кривую из-за того, что наша планета близка по своей форме к неидеальному шару.) Расстояние я определил с помощью «Яндекс.Карт». IP-адрес программа ping определяет самостоятельно по заданному доменному имени.

Тут надо отметить, что программное обеспечение заданного программе ping узла сети (или какого-либо из промежуточных маршрутизаторов) может быть настроено так, что узел будет игнорировать пакет-запрос и не вышлет пакет-ответ. При этом в остальном узел будет работать нормально. Это может быть сделано администратором узла в целях обеспечения безопасности.

К примеру, программа ping при задании доменного имени www.uct.ac.za сайта Кейптаунского университета в ЮАР выдает ошибку «Превышен интервал ожидания для запроса». Однако, в браузере сайт загружается успешно. Я полагаю, что это как раз описанный выше случай, когда администратор настроил программное обеспечение узла так, что оно игнорирует пакет-запрос от программы ping.

По умолчанию интервал ожидания для запроса в программе ping в операционных системах «Windows» составляет 4 секунды, об этом сказано в соответствующей документации:
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/ping

Исходя из существования этого умолчательного интервала, у меня еще была версия, что круговая задержка в случае сайта www.uct.ac.za составляет больше 4 секунд (то есть больше 4000 мс). Этот интервал можно увеличить, запустив программу ping со специальным ключом (параметром) -w и указав после этого ключа интервал ожидания в миллисекундах. Чтобы проверить эту версию, я задал интервал ожидания в 60 секунд:
ping www.uct.ac.za -w 60000
Но вновь получил ошибку «Превышен интервал ожидания для запроса».

Тогда я решил для сайта www.uct.ac.za использовать программу tracert. Эта программа выдает на дисплей адреса всех промежуточных маршрутизаторов, находящихся на пути между нашим компьютером и заданным узлом, а также интервалы круговых задержек для каждого из этих маршрутизаторов. В качестве круговой задержки для сайта www.uct.ac.za я взял круговую задержку маршрутизатора, самого близкого к тому, который выдает ошибку «Превышен интервал ожидания для запроса».

Подробнее о программе:
https://ru.wikipedia.org/wiki/Traceroute

Простейший пример использования команды:
tracert www.uct.ac.za
На 17-м шаге (прыжке) программа tracert выдала ошибку «Превышен интервал ожидания для запроса», поэтому я взял круговую задержку на 16-м маршрутизаторе (шаге, прыжке) — 264 мс.

Выводы по таблице. Я, конечно, построил требуемый в вопросе из книги Таненбаума график, но решил его здесь не размещать, так как он ничего не разъясняет, а всё, что нужно, можно легко увидеть по приведенной выше таблице.

Из таблицы видно, что задержка, очевидно, коррелирует с расстоянием между узлами (чем меньше расстояние, тем меньше задержка), но не всегда и эта корреляция (зависимость) не прямая.

И это понятно, ведь нам неизвестна конфигурация пути, по которому проходит пакет. Может быть так, что географически расстояние между одной парой узлов меньше, чем расстояние между второй парой узлов, а пакет проходит быстрее между второй парой узлов потому, что расстояние по линиям связи меньше. Проиллюстрирую это на рисунке:
Между узлами А и Б расстояние меньше, чем между узлами А и В. Однако, пакет быстрее пройдет между узлами А и В, потому что там есть прямая линия связи, а между узлами А и Б линия связи не прямая, она проходит через промежуточные маршрутизаторы Г и Д и путь по ней получается длиннее.

Кроме этого, на промежуточных и конечных узлах при увеличении нагрузки на сеть задержка может увеличиваться, а при уменьшении нагрузки на сеть задержка может уменьшаться. Поэтому замер круговой задержки с помощью программы ping (и программы tracert) в разное время дня (или в разные дни) может давать разные результаты.

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

Кроме этого, сайт университета может находиться на сервере компании, предоставляющей место на своих серверах в аренду (хостинг). При этом местонахождение университета может не совпадать с местонахождением компании-хостера. К примеру, IP-адрес 104.21.91.61 сайта Амстердамского свободного университета принадлежит американской компании-хостеру «Cloudflare, Inc.» со штаб-квартирой в городе Сан-Франциско (штат Калифорния) в США. (Принадлежность IP-адреса можно проверить через специальные онлайн-сервисы, например, тут: https://www.whois.com.)