摘要

  • Dave Mills 在 1983 年描述的 Fuzzball PING 已经使用多年,是具备多种探测、记录和可视化能力的测量程序;Mike Muuss 后来为 BSD 写的是用途不同的 Unix 实现。
  • Muuss 的回忆把 BSD 版本放在 1983 年 12 月:它需要内核提供原始 ICMP 套接字,并把反复收到的回包整理成操作者可以读懂的往返时间和丢包摘要。

网络行为异常时,人们需要一个可重复的问题:这个目标此刻是否能回应我的探测?回答它并不只靠协议。还要选定包、记录时间、把回包对应到请求,并决定如何向人展示结果。后来被统称为 ping 的做法,其实先后出现在两个工作环境里:Fuzzball 上的实验测量套件,以及 BSD Unix 上的主机诊断程序。把它们压成一个“发明故事”,会抹去工具如何改变工作的细节。

协议底座早于这两种程序。1981 年 9 月的 RFC 792 已定义 ICMP Echo 与 Echo Reply。请求可以带数据、标识符和序号;回应者返还数据与这些字段,发送方可据此匹配请求和响应。标准并没有把 Echo 变成应用可用性检测,也没有规定一个终端命令如何反复发包、显示时间或汇总丢包。RFC 792 还明确把 ICMP 放在 IP 通信环境报告的角色中:它不保证数据报或差错报告一定到达。

Dave Mills 的 Fuzzball 上已有另一个叫 PING 的程序。Mills 在 1983 年 12 月发表的 RFC 889 称它为“原始 PING”,将名称解释为 “Packet InterNet Groper”,并说它此前六年已用于大量互联网和客户网络测量。按这份同期记录,它只是带有多种测量包的 LSI-11 主机上的一个工具:能发送不同探测包(包括 ICMP Echo),处理回应,把经过时间及其他信息写入文件,也能实时呈现直方图和轨迹。这是供实验者观察路径的工作包,不是单纯的命令行按钮。

RFC 889 让测量方法变得具体。1983 年 10 至 11 月的实验以 Fuzzball 作为测量端,对不同网络中的目标反复发送 Echo。某一组实验选择包长、等待对应回应并记录经过时间;一次运行包含 512 轮。结果用于研究包长、路径和丢包怎样影响测得的延迟以及 TCP 重传计时。Mills 特别把网络传输延迟同主机内部可能很大的排队延迟分开。这种区分很关键:时间值只有连同测量边界和方法一起看,才有解释力。

Mike Muuss 的回忆描述了面向 BSD 的另一条路径。他说,1983 年 7 月在挪威举行的一场 DARPA 会议上,Mills 提到用 Fuzzball LSI-11 上的定时 ICMP Echo 测路径延迟。到了 12 月,Muuss 在 Ballistic Research Laboratory 遇到 IP 网络的异常现象,于是为 4.2a BSD UNIX 写 PING。这段会谈和工作顺序来自 Muuss 后来的第一人称回忆,应当作为他的叙述引用,而不是当作留存的会议纪要。程序虽然编译成功,却无法通过所需的原始 ICMP 套接字工作;Muuss 发现内核缺少支持,便连同内核部分一起补上。他还记得,在第一枚测试包发出前,同事 Chuck Kennedy 已经找到了并修复本地硬件问题。

差异在于部署界面。Fuzzball PING 属于研究测量系统,面向实验者和成套分析工具;Muuss 的 BSD 实现让网络操作者能在 Unix 主机上反复发出 Echo 请求、逐条看回复。Muuss 展示的样例输出包含序号、每次经过时间、发送与接收数量、丢包率,以及往返时间的最小值、平均值和最大值。ICMP 提供回声;Unix 程序把循环、计时和可读摘要接到操作系统上。Muuss 说 Berkeley 后来收下了他的源代码和内核修改,并将程序纳入 Berkeley UNIX。这个回忆支持“进入 Berkeley UNIX”这一范围,不能单独证明各个后续版本完全一致,也不能替每个发布节点定年。

名称也有两层记录。Muuss 说自己想到的是声呐发出的 ping 和回声定位;Mills 的 RFC 889 则把此前的 Fuzzball 程序展开为 “Packet InterNet Groper”。Muuss 称自己只是后来听说 Mills 可能提出过这一说法。更稳妥的写法是:Mills 的 Fuzzball 工具与这个缩写在同期文献中相连,Muuss 对 BSD 命名的回忆则指向声呐意象。现有记载并不支持把它们合并成唯一、毫无争议的命名瞬间。

一条 Echo Reply 说明某个回应端返还了这次探测所带的数据和匹配字段。连续探测可以展示特定来源、特定时段和参数下的往返延迟变化、无回应与丢包。它不能单独证明 Web、邮件或其他应用能够服务;不能证明回应端身份真实;也不能证明所有路径都通。没有回应同样不等于目标不存在,过滤、拥塞、主机负载和策略都可能改变结果。Fuzzball 实验通过重复样本与方法细节解释测量;BSD ping 则把探测压缩为更容易执行的命令。它的影响力来自低成本的重复观察,证据范围依然有限。

因此,1983 年的转变并非“从没有 ping 到出现 ping”。ICMP Echo 在 RFC 792 中已经存在,Mills 描述的 Fuzzball 程序更早就承担实验测量。Muuss 的贡献是把 Echo 测试带入 BSD 主机的实际诊断场景,并补足原始套接字所需的内核能力。一条简单的终端回包让网络状态更容易被看到;读者仍须记住,它回答的只是这一枚或这一组探测包有没有得到回应。

来源