ネットワークニュースの仕組み

共通科目情報処理(上級)、インターネットの仕組み、2006年02月14日

                                       電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/ipe/inet-2005/2006-02-14
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
http://www.ipe.tsukuba.ac.jp/~yshinjo/

■最終発表(1)

■今日の重要な話

参考

情報処理演習読本 第8章 ネットニュース by 武藤先生

■ネットワークニュース

ネットワーク・ニュース(network news)、あるいは、ネットニュース (netnews)は、電子メールと並び古くから使われているインターネットのアプ リケーション。

ネットワーク・ニュースのメッセージを読み書きするには、ニュース・リーダ と呼ばれるプログラムを使う。

ニュース・リーダの種類:

Netscape Messenger
Outlook Express
mnews(えむにゅーす)
階層構造に基づくニュース・リーダ。 サーバで動作する。電子メールも読み書きできる。
GNUS (にゅーず)
emacs (mule) の中で使える。サーバで動作する。

■ネットワーク・ニュースの基本的な考え方と操作

ネットワーク・ニュース(network news) あるいは、 ネットニュース(netnews) は、インターネットで「1対多の通信」を実現するための仕掛けの1つ。 Usenet と呼ばれることもある。 ネットワーク・ニュースでは、ある書き手が発したメッセージを、大勢の人が 読む。ネットワーク・ニュースでは、メッセージの事を新聞に たとえて「 記事(article) 」と呼ぶ。 1つひとつの記事は、電子メールと同じく、基本的にはテキストである。

◆記事の転送、サーバ、保存期間

図?は、ネットワーク・ニュースの記事が配送される様子を表わしている。

ネットワーク・ニュースの記事転送の仕組み

図? ネットワーク・ニュースの記事転送の仕組み

各LAN上のどれかのコンピュータでは、ネットワーク・ニュースのサーバ (NNTPサーバ) が動いている。そのサーバは、LAN内の他のコンピュータで動いているニュー ス・リーダからの要求に従って、自分が保存している記事を提供する。また、 投稿された記事や他のサーバから受け取った記事を、他のサーバへ転送する。 この時、サーバ間、および、サーバとニュース・リーダの間で使われる、 TCP/IP上の通信プロトコルは、 NNTP (Network News Transfer Protocol) である。

このように、ネットワーク・ニュースの記事はサーバ間で次々にコピーされる 形で伝わっていく。この時、世界中の数百万のサーバの中には、コピーに 失敗することがある。こういう現象を、「記事が落ちる」という。 また、コピーには、どうしても遅れか生じる。電子メールが1分もかからな いで届くような間でも、ネットワーク・ニュースの場合は、数時間はかかると こともある。また、途中のサーバが止まっていると、記事が落ちな いまでも、そこで何日か足止めされることがある。

ニュース・リーダ(news reader) は、ユーザと対話しながら、サーバから記事を取り寄せたりサーバに記事を送っ たりするプログラムである。

ネットワーク・ニュースでは、毎日膨大な量の記事が投稿されている。それ を保存するためのディスク容量には、限りがある。よって、記事は、あ る保存期間が過ぎると自動的に消されるようになっている。 これを、 エクスパイア(expire) するという。保存期間は、サーバによって異なるか、普通は2週間程 度である。

◆記事の形式

ネットワーク・ニュースの記事は、次のようなテキストです。

Newsgroups: fj.news.reader
From: shiro@is.tsukuba.ac.jp (Shiro Yagi)
Subject: E-Mail facility of news readers
Date: Thu, 20 Mar 1997 00:55:50 GMT
Organization: Institute of Information Sciences and Electronics, Univ of Tsukuba
Message-ID: <SHIRO.02Mar20005550@is.tsukuba.ac.jp>

こんにちは。白やぎです。

ニュース・リーダの電子メールも読み書き機能では、どれが便利一
番便利でしょうか。GNUS でも、メールが読めると聞いたのですけ
れど。

♪♪ 白やぎ
♪♪ http://www.is.tsukuba.ac.jp/~shiro/

ネットワーク・ニュースの記事の構造は、 電子メールと共通である。 電子メールもネットワーク・ニュースの記事も、空行で ヘッダ(header、頭)本文(body) にわかれる。

電子メールと共通のフィールド:

ネットワーク・ニュースに独自のフィールドで、特に重要なもの

◆ニュース・グループの木構造

記事は、 ニュース・グループ(newsgroup) と呼ばれる仕組みを使って分類されている。世界中で1日に投稿される記事 は、数百万にもなる。それらの記事を全部読むことはできない。 ニュース・グループという仕組みを利用して記事を分類し、各自が興味を持っ ている記事を簡単に見つけられるようにしている。 それぞれの記事のヘッダのNewsgroups: フィールドには、その記事がど のニュース・グループに属しているかが書かれている。

ニュース・グループには、次のように、「.」で区切られたアルファベット や数字などで名前が付けられている。

fj.rec.music
日本関係のニュース・グループ群 fj (From Japan)で、レクリエーション (recreation)関係で、音楽に関する記事を集めるためのニュース・グループ
fj.comp.lang.c
日本関係のニュース・グループ群 fj (From Japan)で、コンピュー タ関係で、言語関係で、C言語についての記事を集めるためのニュー ス・グループ

ニュース・グループの名前は、英語で、かつ長いものは省略形で 付けられてる。

ニュース・グループの名前は、全体として、 木構造(tree structure) になっています。木構造が使われている理由は、 ファイルの名前付けや DNS (Domain Name System) と同様に、非常に多くのニュース・グループを扱えることによる。

ニュース・リーダの中でも、mnewsvin は、ユーザがニュー ス・グループの木構造にそってニュース・グループを選んでいくことになる。 ニュース・リーダによっては、ユーザは、木構造をあまり意識せず、自分が 興味があるグループを自分が好きな順序で選んでいくことができるようになっている。

1つの記事は、普通、1つのニュース・グループにだけ現われる。記事を投 稿する時に、複数のニュース・グループに現われるようにすることを、 クロスポスト という。

よいニュース・リーダなら、クロスポストされた記事を見つけると、一度 だけユーザに提示し、別のニュース・グループでは既読として扱い、提示しな いという機能がある。クロスポストの機能を使わずに、同じ内容の記事を 複数のニュース・グループに別々に投稿することを マルチポスト という。マルチポストは、特別な場合を除いて、避けるべきである。い くら大事で有益な情報でも、何度も同じ記事を読むことを望む人はいない。

◆配布範囲

配布範囲 ( Distribution: とは、 普通、記事が配られる範囲を制限する(小さくする)機能である。 配布範囲の例としては、 学内、社内、市内などが考えられます。典型的な使い方は、 たとえば、fj などのもともと世界区のニュース・グループに、学内に限定し た話題を投稿する時に、配布範囲として「学内」を指定して投稿するというこ とである。

特別な配布範囲:

local
そのサーバ内。
world
そのニュース・グループを講読している全てのサーバ。

配布範囲の機能は、現在の所、あまりうまく活用されていない。 多くの場合は、空のままでよい。配布範囲が空の場合、 world という意味になる。

◆ニュース・リーダの操作

ニュース・リーダの操作には、次のようなものがあります。
  1. 記事を読む
  2. 記事を書く(ポストする、投稿する)
  3. ある記事に続けて記事を書く(フォローアップする)
  4. 電子メールで返事を出す
  5. 記事をキャンセルする
  6. 記事を保存する
  7. 環境を整える
記事を読むには、まず、ニュース・グループを選ぶことから始まる。 次に、Subject:From: を見て、その記事を読むかどうかを 決める。

ニュース・グループの中には、自分には興味がないものもある。ニュース・ リーダには、そのようなニュース・グループを、表示しない機能がある。 このことを、ニュース・グループを購読しない状態にするとか、 アンサブスクライブ(unsubscribe) するという。多くのニュース・リーダは、新しいニュース・グループを 購読する状態 ( サブスクライブ(subscribe) された状態 ) にする。ユーザは、興味があればそのままの状態にしておき、興味がなけれ ば、アンサブスクライブする。

1つのニュース・グループでは、各記事には、サーバが受け取った順に付けら れた番号が付けられている。 記事番号 と呼ぶことがある。ニュース・リーダは、標準では、この記事番号の順番 に記事を提示する。Subject: や、 スレッド の順序で並べ変えて関連する話題を連続的に読めるように提示する機能がある ニュース・リーダもある。記事番号、ニュース・サーバごとに異なる。 記事を参照する時には、 Message_ID: を使う。

記事を書くには、記事の形式で説明 したようなテキストを作成し、サーバ・プロセスに渡すことになる。この 作業を、記事を投稿する、 あるいは、 ポストするという。

ネットワーク・ニュースの記事を投稿するのは、電子メールを出すことと非常 によく似ている。異なる点は、 電子メールの受取人の電子メールのアドレス(To:)の代わりに、ニュー ス・グループ名(Newsgroups:)を指定する所、および、 配布範囲 (Distribution:)を指定することである。

投稿された記事は、すぐには読めない。これは、効率のため、ある程度ため 込んでまとめて処理されるからである。うまく投稿されたかどうかを確認するに は、場合によっては10分〜15分ほど待つ必要がある。そして、1度 ニュース・リーダをを終了して、再び実行しなおすか、新着記事をチェックす る操作を行うと、見えるようになる。

ネットワーク・ニュースでは、記事を投稿する時に、他の人が書いた記事を引 用しつつ自分の意見を書き加える形で行なうことがよく行われる。この方法の 投稿ことを、 フォローアップ(followup) という。ネットワーク・ニュースの記事を読むと直ぐに気が付くように、 記事の大部分はフォローアップ記事である。どのニュース・リーダも、フォ ローアップ記事を簡単に投稿できるような機能を持っている。

記事をクロスポスト記事するには、 Newsgroups: ヘッダに、ニュース・グループを「,」で区切りながら並べる。 また、クロスポストする時には、同時に Followup-To: を付け、以後の議論が続けたいニュース・グループを指定することができる。 これが付いた記事にフォローアップしようとすると、ニュース・リーダは、こ こに指定されたニュース・グループをNewsgroups: に設定する。

ネットワーク・ニュースでは、フォローアップで話を進めていくことが基本だが、 記事を書いた人に電子メールを出して詳しい話を聞いたり、 詳しい情報提供をしたりすることも行われる。 このことを、電子メールと同様に、 リプライ(reply) するという。

電子メールと違って、ネットワーク・ニュースでは、一度投稿した記事を 取り消すことができる。これを、記事を キャンセル(cancel)、きゃんせる するという。キャンセルできるのは、自分が投稿した記事だけである。 普通のニュース・リーダなら、キャンセルする機能があります。

記事は、保存期間が終ると消えるので、ネットワーク・ニュースの記事で、有 益なものを見つけた時には、ファイルに保存する必要がある。ニュース・ リーダでは、記事を保存する機能がある。

◆サーバの選択

ニュース・リーダは、LAN上で動いているネットワーク・ニュースのサーバ を探して接続する。この時、どのサーバを使うかを指定する方法には、 ニュース・リーダの設定画面や プログラムを実行する時に与えるパラメタ (引数や環境変数 NNTPSERVER ) が使われる。ポー ト番号は、標準では 119 が使われるので、普通は、ホスト名だけを指定する。 ニュース・リーダの中には、119 以外のポート番号に接続できるものや、複数 のサーバに接続できるものもある。

◆記事ファイルを直接アクセスする

サーバ・プロセスが動いているホストでは、直接、サーバが管理しているファ イルを参照して、記事を読むこともできる。NNTP が普及する前は、この方 法が一般的であった。現在では、自宅のパソコンでオフラインでニュースを読む時 にこの方法が使われることがある。 この場合、次のようなファイルやディレクトリが重要になる。

activeファイル。
現在有効なニュース・グループの名前と記事の番号の範囲を保持したファ イル。/usr/local/news/etc/active/usr/lib/news/active という名前のファイルが使われることが多い。
スプール・ディレクトリ
記事本体を保持している場所。 /usr/local/news/spool/articles//var/spool/news/ という名前 がよく使われる。各記事は、このディレクトリ以下に、ニュース・グループ名 の「.」「/」に変えたディレクトリの下の 記事番号の名前のファイルに保存される。
)

■ネットワーク・ニュースに関する知っておきたいこと

■情報学類/分散システムの資料

技術的には、冗長リンクで、記事を落ちないようにしていることと、記事の重 複対策に Message-ID: を遣っていることが重要である。

■NNTP による記事のアクセス

NNTP(Network News Transfer Protocol) とは、ネットワーク・ニュースの記 事の転送や、記事の読み書きを行うためのプロトコルである。mnews や GNUS などのネットワーク・ニュースを読み書きするソフトウェアは、クライアント として NNTP サーバとの間に TCP/IP による通信路を開設する。そして、クラ イアントは、記事を要求する文字列や、ニュース・グループの一覧を要求する コマンドをサーバに送る。これに対してサーバは、要求された記事やニュース・ グループの一覧をクライアントに返す。表1に、クライアントからサーバへ送 られるNNTPのコマンド、表2に、サーバからクライアントへ返される応答を示 す。

表1 NNTPのコマンド

GROUP newsgroup
ニュース・グループnewsgroupを選択する。結果として、記事の数、記事の番号 の上限と下限が返される。
ARTICLE num
記事番号 num の記事の内容を得る。ニュース・グループが選択されている状態の 時に使える。
ARTICLE <message-id>
メッセージID <message-id>の記事の内容を得る。
LIST
ニュースグループの一覧を得る。
HELP
ヘルプ・メッセージの表示
QUIT
終了
POST
記事を投稿する。

表2 NNTPの応答

応答コード 説明
100 ヘルプのテキストが続く。
200 要求受け付け可能である(投稿可)。
201 要求受け付け可能である(投稿不可)。 
205 通信路を切断する。
211 ニュース・グループが選ばれた。記事の数、記事番号の上限、下限、ニュース・グループ名。
235 記事の転送は成功した。
335 記事を送れ。最後は、CR-LF . CR-LF 。
400 サービスを中断する。
411 そのようなニュース・グループがない。
421 もうそのニュース・グループには次の記事がない。
435 その記事は欲しくない。(もう既に受け取っている)
436 転送に失敗した。後でもう一度転送しB$iて欲しい。
437 転送に失敗した。もう転送するな。
500 コマンドが認識できなった。
501 コマンドの文法に誤りがあった。
502 アクセスが制限されている。

以下に、telnet コマンドを利用して、NNTP サーバに接続した様子を示す。
% telnet newshost nntp [←]
Trying XXX.YYY.ZZZ.UUU ...
Connected to newshost.
Escape character is '^]'.
200 newshost InterNetNews NNRP server INN 2.3.1 ready (posting ok).
help[←]
100 This server accepts the following commands:
ARTICLE     BODY         GROUP
HEAD        LAST         LIST
NEXT        POST         QUIT
STAT        NEWGROUPS    HELP
IHAVE       NEWNEWS      SLAVE

Additionally, the following extention is supported:

XHDR        Retrieve a single header line from a range of articles.
XHIST       Retrieve history file.
XMIME       Control MIME  article handling.

Bugs to Stan Barber (Internet: nntp@tmc.edu; UUCP: ...!bcm!nntp)
.
quit[←]
205 newshost closing connection.  Goodbye.
Connection closed by foreign host.
% []
ここで、強調で示した部分が、キーボードからのタイプである。 この例では、ホスト newshost のポート番号119(nntp)のポートに、 TCP/IPにより接続を試みている。2行目から4行目は、telnet コマンドによる 定型的な表示である。通信路が開設されると、サーバは、 "200" という応答を返している。これは、NNTP で定義されて いる応答であり、サーバが、要求を受け付け可能であり、かつ、要求としては 投稿要求(POST)も受け付けることを意味している。"200" 以 降の文字列は、コメントである。

第6行では、"help" というコマンドをサーバに送っ ている。これに対して、サーバは、"100" という応答に続けて、 受け付け可能なコマンドなど、簡単な使い方を返している。23行目に "." からなる行がある。これが、1つのコマンドに対する応答 の終りを示している。

次に、24行において、"quit" というコマンドをサーバに送っている。これに たいして、サーバは、205 という応答を返し、続いて TCP/IP の通信路を切断 している。26行目は、telnet コマンドが生成したメッセージである。

■資料

京都大学公開ネットニュースサービス
http://news.media.kyoto-u.ac.jp/public.html
Active Newsgroups List of fj
http://www.fj-news.org/active/

■ニュース・リーダ

◆Netscape Messenger

Windows, Linux, MacOS, その他で動作する。 初期設定が必要

◆Outlook Express

Windows で動作する。 初期設定が必要

メール・リーダとしての設定後、次のようする。

◆mnews

Unix サーバで動作する。

mnews は、ユーザがニュース・グループの木構造にそってニュース・グ ループを選んでいくタイプのニュース・リーダである。 mnews では、ネットワーク・ニュースだけでなく、電子メールを読み 書きすることもできる。mnews を電子メールの読み書きだけに使っ ている人もいる。

mnews を使うには、まず、Telnet (TeraTerm) でサーバに接続する。 次に、「icho% 」に対して、「mnews [←]」と打つ。 mnews を終了するには、何度か「q」キーを押す。

詳しい使い方:

■実習

◆ニュース・リーダの設定

ニュース・リーダを設定して、ネットワーク・ニュースの記事を読みなさい。

◆ニュースグループの調査

自分が興味があるニュース・グループを探しなさい。

◆課題8:ネットワークニュース記事の保存と批評

読んだ記事の中で、面白い記事、または、将来役立ちそうな記事を保存しなさい。 この時、次の項目をきちんと保持することが望ましい。 記事を保存する時、テキストファイルとして保存する。ファイル名の拡張子は、 .txt や .text としなさい。Outlook Express の場合、ファイルの種類として ニュース(.nws)ではなく、テキストファイル(.txt)を選びなさい。

保存した記事、および、その記事に対する批評(よい所、悪い所、賛成できる 所、反対な所)を、各自の掲示板のページに書きなさい。

ファイルに保存したファイルを、ページに対する添付ファイルで張りなさい。 Hiki の場合、「編集」の中で、添付ファイルの機能が使える。

Hiki の場合、添付ファイルを表示するには、次のような記述を入れる。

{{attach_view(filename.txt,学績番号-NetNews)}}
または、次のようにしてリンクで参照する。
{{attach_anchor(filename.txt,学績番号-NetNews)}}

締め切りは、2006年2月28日月曜日 23:59:59 とする。

注意:記事を投稿する必要はない。

◆NNTP によるニュース・サーバへのアクセス(やらなくてもよい)

telnet コマンドを使って、NNTP サーバ(環境変数NNTPSERVERで指定) にアクセスし、 ネットワーク・ニュースの記事を画面に表示させなさい。その記事のニュース・ グループ、ニュース・グループ内の番号、記事の先頭の20行程度を報告書に添 付しなさい。このとき、 表1に示したコマンド、GROUP と ARTICLE を使うと よい。

注意すべきこととして、GROUP コマンドでは、ニュース・グループ名を一度に 与えることがあげられる。たとえば、comp.sys.mac というニュース・グルー プならば、次のように、一度に全部のニュース・グループ名を与える。

GROUP comp.lang.ruby
次のように、部分的に与えることはできない。
GROUP comp
GROUP lang
GROUP ruby
vin や mnews では、ニュース・グループを階層構造を持つものとして利用者 に提示している。しかしながら、NNTP のレベルにおいては、そのような階層 構造は存在しない。

その他の NNTP のコマンドを使ってみなさい。NNTP の定義は、 RFC977 という ドキュメントにある。


↑[もどる] ←[2月7日] ・[2月14日] →[2月28日]
Last updated: Date:
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>