NetNewsの仕組み (配送編)

ほり としお(toshi@etl.go.jp)
さいとう のぼる(j0315@cocoa.ocn.ne.jp)

基本的に、NetNewsに投稿された記事は全世界で読むことができます。 仮にあなたが東京に住んでいてAというプロバイダを使っているとしましょう。 あなたが使っているプロバイダAのニュース・サーバには、大阪に住んでいるBという会社の人の記事や北海道のCという学校の人の記事が届いていると思います。 あなたはこれらの記事を読んで返事(フォロー)を書くことができます。 逆にあなたがNetNewsに投稿した記事に福岡のDというプロバイダの人から返事があることもあるでしょう。 ニューヨークやサンフランシスコからフォローが来るかもしれません。

でも、どうして東京に住むあなたが大阪や北海道の人の、それも別の会社や学校の人が投稿した記事を読めるのでしょう? また、どうしてあなたが投稿した記事に福岡やニューヨークやサンフランシスコの人から返事がもらえたのでしょう? 以下ではこのNetNewsの仕組みを簡単に説明してみます。


誰でも一度くらいはメイルを送ったり受け取ったりしたことがあるでしょう。 メイルを送る場合には、メイルの宛先(To: やCc:)に相手のメイル・アドレスを書きます。 詳細は省略しますが、ユーザがメイルを送信すると、会社やプロバイダのメイル処理プログラムがその宛先を読みとって送り先を探し、相手にそのメイルを届けてくれます。 ネットワークに接続されている会社や学校、プロバイダには、それぞれにメイルを処理するサーバが用意されていて、お互いに協力してメイルのやりとりをしているのです。


一方、NetNewsでも通常、それぞれの会社、学校、プロバイダにニュース・サーバが用意されています。 世界中にいくつくらいのニュース・サーバがあるのか、それは多分誰にもわかりません。 毎日どこかで新しいサーバができ、NetNewsの世界に加わっているからです。 どれくらいサーバがあるかもわからないのに、最初の例のように、東京のAというプロバイダの人が大阪のBという会社の人の記事を読めたり、東京のAから投稿した記事に福岡のDから返事があるということは、やはり、メイル同様、NetNewsでも多くのサーバが協力して記事のやりとりをしているということが予想できませんか?


NetNewsでメイルの宛先に相当するのは「ニュースグループ(Newsgroups:)」です。 ここに記事を投稿したいニュースグループ名(たとえばfj.rec.autos)を書いて投稿すると、その記事は「あなたが使っているニュース・サーバ」に送られます。 この段階では、投稿した記事はまだそのサーバに保存されているだけです。 つまり、投稿したのがAというプロバイダのサーバなら、同じサーバを使っている人にしかあなたの記事は読めないのです。 数多くのニュース・サーバでその記事が読めるようにするため、記事を受け取ったサーバはメイルの場合と同様に、宛先を読み取って送り先を探し、その送り先に記事を送り届けなければなりません。 NetNewsの世界では、「記事を送る」ことを「配送」というので、以後では配送という言葉を使います。

それでは、あなたが投稿した記事を受け取りその宛先を読み取ったサーバはどこにその記事を配送すればいいのでしょう? もし、そのニュースグループを受け取っている世界中のすべてのサーバを知っているならば、そのすべてに記事を送ってやればすべてのサーバであなたの記事を読めるようになるはずですね。 でも、先にも書いた通り、すべてのサーバを知ることはほとんど不可能です。 そのため、NetNewsの配送は、いわゆる「バケツリレー」方式でおこなわれています。 バケツリレーというのは、消火作業のときなどに大勢の人が列を作って水の入ったバケツを右から左へ順番に手渡していくことです。 列の途中にいる人は、誰が水を汲んで誰が消火しているのか知っている必要はありませんが、隣から受け取ったバケツを次々に隣に渡していけば、最終的に全員がそのバケツに触れることになります。

NetNewsの配送もこれと同様に、それぞれのニュース・サーバは「自分が誰の隣にいるのか」ということ*だけ*を知っていて、隣のサーバから配送されてきた記事を自分のところに保存し、その後その記事を逆隣のサーバに配送するのです。 たとえば、A - B - C - D という4つのニュース・サーバがこの順番に並んでいたとすると、Aが受け取った記事はまずBに送られ、その後、Cを経てD に配送されます。 これで最初にAが受け取った記事(のコピー)をA〜Dのすべてのサーバが持つことになります。 同様に、Cが最初に受け取った記事は隣のBとDに送られ、AはBから記事を受け取ることで最終的にA〜Dがその記事を持つことができます。


実際のシステムは、経路の一部が止まっても記事を配送してもらえるように、あちこちから記事をもらう場合が多くなっています。 たとえばヘッダ (記事の頭の方についている、ニュースグループなどが書いてある部分。ニュースリーダによってはすべては表示されていないかもしれません) のうちのPath:には、送信相手からどのような経路で手元へ記事が届いたかの情報が書いてあります。 それこそ、国内からの記事が、一度アメリカ西海岸を旅して戻ってくることもあります。 これを見ると、たとえばキューティーハニーやフィードマニア[1]の活躍などがわかるのではないでしょうか。


さて、あちこちから記事を配送してもらうようにすると、ひょっとすると同じ記事が違うところを経由して、何度も届くかもしれません。 そのような場合に同じ記事が何重にも届かないように、また「この記事がまだきていない」という情報を知るために、記事はそれぞれ一意の識別子を持っています。 これを「メッセージID(Message-ID)」といい、適切に設定されている記事はすべて、この重複しない情報をもとにやりとりされます。 もしもこれが利用者側で正しく設定されていないと、同じメッセージIDの記事があるサーバにはあとに書いた別の(しかしメッセージIDが重複している)記事は配送されないかもしれません。 メッセージIDについては、「NetNewsの仕組み (技術的な決まり) 」で詳しく触れることにします。


ニュースグループには、基本的には誰でも自分の責任で投稿できます。 しかし、一部のニュースグループには査読者(Moderator)がいて、記事の内容をチェックしてくれます。 正しく設定されているサーバでは、もしあなたが査読者のいる(Moderatedといわれます)ニュースグループへ投稿した場合は、その記事は査読者宛にメールとして届き、その査読者が内容をチェックして妥当と判断されたものを、査読者が記事として流してくれます。 つまり、この場合は他のニュースグループへ投稿した場合と違い、直接そのグループへ記事を流すことはできません。 ですので、そういうニュースグループへ「配送されてないみたいだから」と、記事を何度も何度も送るのはやめましょう。


技術的なきまりや慣習的なきまりについては、また別の章で。

[1] Q.T.Honey や feedmania などは、実在するニュースサーバ名及びフィードサーバのドメイン名です。


fjの歩き方メーリングリストトップに戻る