迈克·穆斯在日出前让他的新程序运行起来。那时,他的同事查克·肯尼迪已经修复了本应由该程序调查的网络硬件。穆斯通宵构建了一个工具,但问题在他发出第一个测试包之前就消失了。他将这个程序命名为 ping。[1]

1983年12月,穆斯正在处理美国陆军弹道研究实验室IP网络上的异常行为。几个月前他听到的一句话为他提供了方向。当年7月在挪威举行的DARPA会议上,戴夫·米尔斯描述了如何通过测量电子回波来确定消息在网络路径中传输所需的时间。穆斯记住了这个想法,并开始编码。[1]

他的程序成功编译,但拒绝运行。底层的UNIX内核缺乏他的代码所需的原始ICMP套接字支持。穆斯形容自己“怒不可遏”。他还编写了缺失的内核支持,并在天亮前让这两部分都运行起来。当穆斯能够发出第一个 ping 数据包时,肯尼迪(人称 Kermit)已经找到了并修复了硬件。[1]

穆斯在大学期间曾对声呐和雷达系统进行建模,他借用了声呐的声音来命名。一道脉冲向外传播;一道回波返回。他的软件使用了互联网控制消息协议中已定义的消息:回送(Echo)和回送应答(Echo Reply)。该协议规定接收方机器返回发送给它的数据。计时这种交换方式为穆斯提供了一种探测到另一台机器并返回路径的方法。[1][2]

在伯克利,开发人员将源代码和他的内核修改整合到伯克利UNIX中。虽然紧急修复是在没有 ping 的情况下完成的,但其他人可以使用下一个副本,而无需自己通宵编写修复程序。穆斯后来将他的程序描述为一个一晚上写成的千行小程序,并开玩笑说,如果他知道这将成为他最著名的成就,他可能会再花一两天时间添加一些选项。[1]

现代Linux手册描述了相同的请求和回复交换,包括往返时间(round-trip times)和丢包统计信息。它还提供了一个可听选项。当收到回复时,程序可以发出声音,让人们通过听觉来判断连接是否正常工作,而不是盯着每一行新出现的文字。[3]

在一次USENIX会议上,穆斯听到了一个关于某位管理员将“听”这个想法进一步发挥的故事。根据穆斯记录的说法,那个人将 ping 连接到一个声码器,通过他的办公室音响播放输出,并将音量调到他能忍受的最大程度。每隔一秒,电脑就会喊出“Ping、ping、ping...”,而他则在楼里走动,摇晃着以太网接口。[1]

穆斯称这是他听过的最好的 ping 故事。他从声呐借用的这个名字,已经变成了一个可听的故障查找工具:管理员不断地从一个接口移动到另一个接口,直到喊叫声停止。那种寂静告诉了他间歇性故障发生的位置。[1]

来源

  1. 迈克·穆斯,《PING 程序的故事》
  2. RFC 792,《互联网控制消息协议》
  3. Linux 手册,ping(8)

图片:查克·肯尼迪(左)、迈克·穆斯(中)和道格·金斯顿在弹道研究实验室。这张照片并非摄于编写 ping 的那个夜晚。Ron Natalie,维基共享资源,CC BY-SA 4.0。已裁剪和调整大小;衍生产物在相同许可下。