All in TCP/IP
好きな記事がある。「人生の全てはTCP/IPに学んだ」という、もう20年近く前のブログ記事だ。
TCP/IPの仕様を人生に例えている。ACKを返さないと相手は再送してくる。ウィンドウサイズを超えて送りつけても受け取れない。3ウェイハンドシェイクを経ないと会話は始まらない。読んだとき、うまいことを言うなと思った。
改めて考えると、TCP/IPは人間のコミュニケーションのアルゴリズム化としてかなりの極致にある。相手が受け取ったか確認する。相手の処理能力に合わせて送る量を調節する。混雑していたら引く。タイムアウトしたら諦める。人間が日常会話で無意識にやっていること、あるいはやれていないことを、プロトコルとして厳密に定義している。
人間はACKを返さない。既読スルーという言葉がある時点で、人類は確認応答の実装に失敗している。輻輳制御もない。相手が忙しかろうが一方的に話し続ける人間はいくらでもいる。再送タイムアウトもない。何年も前のことを蒸し返す人間すらいる。
TCPが偉いのは、信頼できない経路の上に信頼できる通信を構築したことだ。IPは届く保証をしない。パケットは消えるし、順番も入れ替わる。その上にTCPが順序制御と再送と確認応答を積み上げて、信頼性を作り出した。人間関係もたいてい信頼できない経路の上に成り立っているが、わたしたちにはTCPほどの実装力がない。
IPv6のマルチキャストがどうなったかというツッコミは置いておく。あれは人間で言えば、半数がログインできないまま始まるビデオ会議のようなものだ。