Pingプログラムの話
そうだ。UNIXのpingを書いたのは俺さ。pingというものは誰でも知ってるだろうが、これはある夜、俺が千行程度で書いたハックだ。
名前の由来はソナーの音だ。俺は大学でソナーとレーダーシステムの設計をさんざんやっていたので、サイバースペース的なものとは親和性が高かった。新しい分野に既存の概念を適用したというわけだ。pingはIP/ICMP ECHO_REQUESTとECHO_REPLYパケットを使って時間を測り、ターゲットマシンへの「距離」を計測する。
4.2a BSD UNIX用のPINGを書いた着想は、1983年の7月に、ノルウェイでのDARPA会議で、Dave MIlls博士からきいた話が元だ。博士はFizzball LSI-11システムで、ICMP Echoパケットの時間を計測して、経路遅延を計測したと話していた。
1983年の12月、俺はBRLのIPネットワークで奇妙な挙動に出くわした。Mills博士の話を思い出して、俺はすぐにPINGプログラムを書いた。生のICMPのためにSOCK_RAW_AF_INETでバークレー流のソケットを開くものだ。コードは問題なくコンパイルできたが、動かなかった。カーネルが生ICMPソケットをサポートしていなかったのだ。ムカつきながら、カーネルを書いて、夜明け前に全部動くようにした。まあ、Chuck Kennedy(Kermit)が問題があることを把握して、俺が最初の"ping"パケットを発射する前にネットワーク機器を直してしまった。とはいえ、それ以降、何回か使っていた。やれやれ、もし俺が当時、これが俺の人生における最大の最も有名な実績であると知っていたならば、もう数日は使ってもっとオプションを加えていたものを。
バークレーの連中は喜び勇んで俺のカーネルの変更と、PINGソースコードを持ち帰って、それからそれがバークレーUNIXの標準の一部になった。自由なので、Microsoft 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/161993年、PINGを書いてから10年後のこと、USENIX団体は俺にご立派な賞状をよこして、俺をUSENIX団体1993年度生涯貢献章にした。バークレーはカリフォルニア大学、コンピューターシステムズリサーチグループ(CSRG)での話だ。「優秀なる知的な達成と業界への類なき貢献に経緯を評してこれを送る。CSRGの理念に基づき、以下の個人とその団体をCSRGへの貢献者と認める」、おやおや。
ソースコード(40K)を読みたいかい?
俺の考えでは、PINGはPacket InterNet Grouperの略ではなく、ソナー用語である。でもまあ、dave Millsはこの名称を言っていたと人からきいたので、まあ、療法とも正しいのかもしれん。やれやれ、行政機関ってのは略語のセンスがないな。
Phil DykstraはPINGをICMPレコードルートに対応させたが、この黎明期には、対応しているルーターが少なかったため、この機能はほぼ約立たずとなっていた。IPヘッダーが記録できるhop数の制限により、長い経路を計測する妨げになっていた。
LBLのVan Jacobsonが、IP time to life(TTL)フィールドを変更していくことにより、ICMP Time-to-Live Exceededメッセージを受け取れることに気が付き、俺のカーネルのICMPサポートを利用して、TRACERROUTEを書いたのは猛烈に嫉妬した。俺が考えつければよかったのに! もちろん、ルーターはICMPメッセージに対するICMPエラーメッセージを実装していないので、現実のtracerouteはUDPデータグラムを使うのだが。
俺がきいた最高のping活用の逸話は、USENIXカンファレンスできいたもので、不定期に不調になるEthernetを抱えていたネットワーク管理者が、pingプログラムを音声合成プログラムにつないで、つまりは以下のように書いて、
ping goodhost | sed -e 's/.*/ping/' | vocoder音声合成プログラムの出力を事務所のステレオにつないで、音量を最大にした。コンピューターが1秒おきに"Ping, Ping, Ping..."と怒鳴り続けている間に、管理者は音が止まるまで建物内のEthernetコネクターをいじくりまわしていた。そして故障箇所を特定したのだ。
ちなみに、pingプログラムの作者、Mike Muussは、交通事故により2000年11月20日に亡くなっている。