14 февраля 2013 в 13:48

[Перевод] История программы ping из песочницы



Все верно, я — автор программы ping для UNIX. Ping — это программа в тысячу строк длиной, которую я написал за один вечер и о которой почти все наверняка знают. :-)

Я назвал ее в честь звука, издаваемого гидролокатором. В колледже я много занимался моделированием гидроаккустических и радиолокационных систем, так что аналогия с “Киберпространством” казалась весьма уместной. В ping используется та же идея: равномерно посылать IP/ICMP-пакеты ECHO_REQUEST и ECHO_REPLY, чтобы измерить “расстояние” до целевого компьютера.

Мое первоначальное желание написать ping для 4.2a BSD UNIX возникло после небрежного замечания Дэвида Миллса, сделанного им в июле 1983 года на заседании DARPA в Норвегии, о проделанной им работе в замере задержки прохождения ICMP пакетов в системах Fuzball LSI-11.

Создание


В декабре 1983 года я столкнулся со странным поведением сети в Лаборатории Баллистических Исследований. Вспоминая замечания Миллса, я быстро закодил ping, которая открывала сырой ICMP сокет. Код без проблем скомпилировался, но не работал — в ядре не было поддержки сырых ICMP сокетов! Возмущенный, я закодил и ее, таким образом заставив все работать до утра. Неудивительно, что Чак Кеннеди уже исправил проблемы с сетью до того, как я отправил первый пакет “ping”. Позже, однако, я использовал свою программу несколько раз. *Усмехаясь* Если бы я только знал, что это будет самым большим достижением в моей жизни, я бы поработал над ней еще пару дней и добавил несколько опций.

Парни из Беркли охотно приняли мои изменения в ядре и исходники ping, так что с тех пор они являются стандартной частью Berkeley UNIX. Поскольку ping была бесплатной, ее портировали на множество других платформ, включая Microsoft Windows 95 и Windows NT. Вы можете определить это по характерным сообщениям, которые выглядят примерно так:

PING vapor.arl.army.mil (128.63.240.80): 56 data bytes
64 bytes from 128.63.240.80: icmp_seq=0 time=16 ms
64 bytes from 128.63.240.80: icmp_seq=1 time=9 ms
64 bytes from 128.63.240.80: icmp_seq=2 time=9 ms
64 bytes from 128.63.240.80: icmp_seq=3 time=8 ms
64 bytes from 128.63.240.80: icmp_seq=4 time=8 ms
^C
----vapor.arl.army.mil PING Statistics----
5 packets transmitted, 5 packets received, 0% packet loss
round-trip (ms) min/avg/max = 8/10/16


После создания


В 1993, спустя десять лет после написания ping, ассоциация USENIX вручила мне красивую грамоту, объявляющую меня одним из получателем премии ассоциации USENIX Lifetime Achievement Award, вручаемую исследовательской группе университета Беркли. “Вручается за основательное интеллектуальное достижение и беспримерную услугу нашему сообществу. По распоряжению руководителей исследовательской группы мы таким образом признаем нижеследующие лица и организации помощниками и участниками исследовательской группы...”. Вот это да!

Кстати, хотите увидеть исходники?

С моей точки зрения, “ping” — это не акроним для Packet InterNet Grouper, а аналогия с гидролокатором. Хотя кто-то говорил мне, что Дейв Миллс использовал именно такое объяснение, так что, возможно, мы оба правы. Черт, а я-то думал, правительство занимается растягиванием акронимов! :-)

Фил Дайкстра добавил поддержку record route в ping, но в те далекие времена лишь немногие роутеры обрабатывали их, что делало эту фичу бесполезной. Ограничение на количество прыжков, записываемых в заголовок IP пакета, препятствовало отслеживанию очень длинных маршрутов.

Я безумно завидовал Вану Якобсону из Национальной лаборатории имени Лоуренса в Беркли, когда тот использовал мой код поддержки ICMP в ядре, чтобы написать traceroute. Он понял, что может получать ICMP Time-To-Live exceeded сообщения, изменяя поле TTL IP-пакета. Ну почему я не додумался до такого! :-) Конечно, на самом деле traceroute использует дейтаграммы UDP, поскольку роутеры не должны генерировать сообщения об ошибке в ответ на ICMP-сообщения.

История


Самую лучшую историю о ping мне рассказали на конференции USENIX: сетевой администратор с проблемной Ethernet сетью связал ping с устройством для синтеза речи, написав, по существу, следующее:

ping goodhost | sed -e 's/.*/ping/' | vocoder

После он подключил выход синтезатора к колонкам в офисе и выкрутил громкость до предела. Компьютер стал выкрикивать “Ping, ping, ping” каждую секунду, а администратор пошел проверять каждый Ethernet коннектор в здании. В тот момент, когда компьютер умолк, пробой в сети был найден.

Ссылки:
Оригинал статьи
Об авторе программы (англ.)

От переводчика:
Буду рад услышать замечания о неточностях в переводе терминов и названий упомянутых учреждений. В самое ближайшее время планирую опубликовать перевод статьи «Ten Things I Hate About Object-Oriented Programming», в дальнейшем буду выкладывать статьи-переводы о программировании и людях, причастных к нему.
Ann Tohn @tohnann
карма
39,0
рейтинг 0,0
Похожие публикации
Самое читаемое Администрирование

Комментарии (68)

  • +53
    ping — имхо самая часто используемая сетевая утилита. Не даром автор на фотке так радуется.
    • +12
      А, учитывая, что она включена в кажду копию UNIX и Windows, это еще и самая распространенная программа.
      Есть чему радоваться, да :)
    • +2
      Для нас (интернет телефонистов), это чуть-ли не единственная программа, позволяющая определить качество канала связи.
      • 0
        Есть круче. Но медленнее.
    • +4
      Угу, а ping ya.ru — самая используемая комманда в рунете))
      • +1
        ping 8.8.8.8 — надежнее (не зависишь от проблем с DNS)
        • 0
          ping localhost — еще надежнее. Не зависишь от проблем с сетью.
  • +16
    Простота — это самое сложное в мире. Это крайний предел опытности и последнее усилие гения.
  • +8
    Если бы я только знал, что это будет самым большим достижением в моей жизни, я бы поработал над ней еще пару дней и добавил несколько опций.


    Грустная фраза, особенно первая ее часть.
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Мне кажется, что между миллиардом долларов и утилиткой есть еще много разных достойных вариантов (причем эти, крайние, меня почему-то не привлекают совершенно).
        • +2
          Варианты — вариантами, а дело сделанное в своё время, в своем месте стоит всех миллиардов вместе взятых.
          • +2
            Чтобы было понятнее, о чем я говорю, возьмем awk и его авторов. Керниган и Ахо — люди очень известные (в узких кругах) и awk, насколько бы он ни был полезен, воспринимается как незначительная деталь их биографии. И теперь сравните с Вейнбергом.
          • 0
            Меня, конечно, могут заминусовать, но я все-таки скажу: утилита — это, правда, замечательно, но миллионы людей каждый день делают вещи в десятки раз лучше и сложнее это утилиты, но о них никто не знает. На 90% его успех — это везение, плюс оказался в нужном месте в нужное время.
            А утилита, написанная за один день как самое большое достижение в жизни — это грустно.
            • 0
              В то время имхо любая простейшая сетевая утилита — это гигантский шаг вперед.
              • 0
                Прсотота бывает разной. Бывает такая простота, которой очень тяжело достичь — как например сделать простой и надежный автомат или ракету. Над этим трудятся куча людей вплоть до десятилетий.
                А есть другая простота — когда программа пишется за один день. Это замечательно, что она обрела такую популярность, но это тоже самое, что называть notepad или иконку iTunes величайшим достижением в жизни.
      • +5
        утилитка которая переживет автора

        К сожалению уже пережила.
        Muuss died in an automobile collision on Interstate 95 on November 20, 2000.[2] The Michael J. Muuss Research Award, set up by friends and family of Muuss, memorializes him at Johns Hopkins University.[3]
  • –9
    А че фото на фоне мусорного пакета?
    • +19
      Какая разница? Главное, что это «пакет» ;)
    • 0
      Это просто каменная поверхность.
    • 0
      Какая разница какой пакет? На фото разработчик программы, которой пользуются все.
      Если нужно проверить доступность из сети, то что Вы используете? Не ping ли часом?
      • 0
        Наверное, имелось в виду, что это должен был быть не просто пакет, а ICMP-пакет
  • +22
    Почему топик не оформлен, как топик-перевод?
    • –2
      Виноват, не сразу увидел переключатель «пост / перевод» в редакторе, а теперь уже, кажется, не исправить.
      • +5
        Допишите-ка в заголовок "[Перевод]", а то я не задумываясь, после прочтения первой строчки, полез к вам в профиль поощрять… Нехорошо обманывать!
        • +2
          Нехорошо вышло, согласен.
          Дописал.
    • –2
      Чтобы снова запостить как перевод и по новой набрать плюсиков, нет?
  • 0
    А на фото сам автор программы или это для затравки такой портрет?
    • +2
      Да, это Mike Muuss — автор ping.
  • +4
    История про админа просто зачет! ))
    • +3
      Ага, сети на коаксиале заставляли побегать пока не найдешь где неисправность.
      • 0
        Только ли на коаксиле?
  • +33
    Пошёл читать про него и как-то грустно стало, когда узнал, что он погиб в автокатастрофе в конце 2000 года. :(
    • +5
      Возможно этот комментарий кого-нибудь переубедит не шутить насчет не очень удачной фотографии
      • 0
        Да, меня переубедил. Земля пухом.
  • 0
    Спасибо, было весьма интересно.
  • +2
    А еще ping умеет проталкивать пакеты! Это какая-то мистика, но если на забитом канале запустить ping до нужного хоста, то странички открываются быстрее. Сейчас на широких каналах это практически не заметно, но раньше этот прием знал любой гик. Скорее всего это связано с кэшами или заполнением маршрутных таблиц на оборудовании
    • 0
      А ещё с тем, что часто ICMP пакеты имеют более высокий приоритет.
      • +1
        И что с того? Данные же всё равно идут не в них.
    • 0
      Это как вращение мышкой по часовой стрелке, когда компьютер задумался — все знают, что это помогает :)

      Не читать!
      Какие еще кеши? Есть очереди, но каждый дополнительный пинг только ухудшает ситуацию, ускоряя наступление tail drop или исчерпание токенов у полисера. А таблицам маршрутизации вообще нет дела до того, ходят ли по ним пакеты или нет.
      • 0
        Еще год назад Google Earth в версии под линукс загружал тайлы быстрее, если вращать мышку. Не знаю зачем, но ему нужна была для этого энтропия. Которая, как известно, на старых интерфейсах, например /dev/random, имела непостоянное значение и зависела от событий на внешних девайсах.

        Так что смех смехом, но никто не знает что может выдумать программист внутри своего творения и как влияет icmp на трафик :)
        • 0
          Но ведь затык находится не на отправителе, а где-то дальше. Что бы программист ни придумал, но лишний пакет — это лишний пакет. Он может только замедлить передачу данных, увеличить шанс дропа полезных пакетов и т.д.
          • 0
            Обрушить вообще сетевуху, как в недавней истории с интелом, или может образумить шейпер или… Не относитесь вы к этому так серьезно. Это же «мистика» :)
            • 0
              Я просто очень доё***тый товарищ, и знаю, что увеличение размера софтовой очереди на шейпере ну никак не поспособствует лучшему прохождению полезной нагрузки :)
              Хотя в одном сценарии пинги могут помочь. Например, при on-demand PPP сессии, когда прошло N минут после последнего отправленного пакета, и сессия рвется по таймауту, а затем ей требуется время на пересогласование. Постоянные пинги не позволят таймауту наступить. Но при непрерывном браузинге пинги ну никак не улучшат жизнь пользователя :)
        • 0
          Сервисы гугла работают через SSL, поэтому если с криптографией в системе туго, то начинаются проблемы.
  • +1
    Интересно, что этот же Mike Muus в 1984 году предложил идею default gateway, а по его странице просто интересно походить, с учетом того, что как раз сегодня очередной день компьютерщика — 67 лет со дня представления публике компьютера ENIAC.
    • +1
      С днем рождения, ENIAC! =)
  • +1
    Кстати, исходники пинга по-прежнему компилируются после внесения небольших изменений.
    Если кому интересно, вот «рабочая» версия.
    • 0
      По ссылке PNG картинка с тектом: «NO!»
  • –6
    Шикарной фон для фотографии
  • –1
    эххх, моя первая программа была… В общем в сетке у нас сидел полудохлый хаб, на нем присосалось восемь, что-ли компов, на двух были интеловские сетевухи. На шести компах сеть постоянно падала. По заверениям людей, которые, как я подозреваю, не сильно лучше меня разбирались в сетевом оборудовании и сетях, интеловские сетевухи вели себя в сети по-хамски, чем вызывали коллизии и краши хаба.

    А винты-то были на 800 мб. А одна часть мп4-видео-то весила 600+Мб. Часть скачал, посмотрел, удалил, скачал вторую. Только как скачать-то, если даунлоадеры были в зачаточном состоянии? Но были.

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

    Друг, которому я дал эту программу на использование, был в ужасе — она съедала ДВА мегабайта оперативки. Так кодить, конечно, было нельзя.

    А еще вспоминается страшная угроза — «вот я тебя пингану нефрагментированным пакетом, поговоришь тогда», гггг
    • +1
      А еще вспоминается страшная угроза — «вот я тебя пингану нефрагментированным пакетом, поговоришь тогда», гггг

      Win95-98 падали от простого ICMP пакета размером 64Кб. Но этой бедой страдали и другие OS.
      • 0
        по-моему кому-то и 1кб хватало. Не помню за давностию лет. Как был юзером, так им и остался.
      • 0
        NT4 вешалась flood ping-ом на ура. На SCO UNIX утилита ping имела опцию -f, вот я и развлекался тогда…
    • 0
      Как вам удалось пинговать хаб?
      • 0
        сервер с фильмом, ок?
    • +2
      Хм, зачем пинговать(!) хаб(!!!), если гет и так докачает при появлении связи?
      • –2
        уж простите, что я не записывал, а за давностию лет забыл какой именно был гет и почему он не докачивал и что там было конкретно. А про программу, я, конечно же придумал. Ведь люди заходят на хабр, чтобы что-нить выдумать и запостить. Но слава богу есть вы — вы всех разоблачите.
    • 0
      «пинговала тот хаб»
      Уже страшно звучит.
      • –4
        ага, я тогда был младше, чем ты сейчас, и, очевидно, глупее, что ты с блеском и доказал всего одним камментом.
  • –3
    промазал
  • +1
    Что говорить. Страшно представить, сколько людей не имело бы работы если бы не пинг.
    • –1
      Идея лежит на поверхности, придумал бы кто-нибудь еще, не в 1983 году, так позже, и называлось бы оно по-другому.
  • 0
    Интересно, если бы он запатентовал свою программу (равномерно посылать IP/ICMP-пакеты ECHO_REQUEST и ECHO_REPLY, чтобы измерить “расстояние” до целевого компьютера.)? Насколько хуже бы стал хуже компьютерный мир и насколько менее искренней его улыбка?
    • 0
      Вы ведь в курсе, что даже автомобильный руль запатентован? Да и постоянный ток вроде бы тоже…
      • +1
        Но срок действия патентов истек.
        А в свое время автомобильная промышленность Америки отставала от Европы только по тому, что 4 колесный самодвижущийся экипаж был запатентован! Только истечение срока патента развязало руки Форду,

        Так что 1983 + 15 = 1998. А это уже серьезно.
  • –2
    У создателя программы пинг раскидистые усы и очень натянутая улыбка. Кого-то он напоминает мне…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.