トラックバックを利用した P2P 型ブログにおけるノード発見の実装
2002MT050 水野 雄輔
指導教員

1 はじめにNapster の登場以来，様々な P2P システム，P2P ソ
フトウェアが開発されている．これに伴い，P2P システムが生み出す大量のネットワークトラフィックが問題視されている．ネットワークトラフィックがあまりにも増えすぎると，レスポンスが低下し，同じ回線を使用している PC に影響を及ぼす．その中で，クライアントであるユーザ同士の効率的なノード発見は，大規模な P2Pコミュニティに必要不可欠であり，同時にネットワークトラフィックも制限することができる．本研究では，多様性のあるノード発見，ノード間の伝播を実現するために，P2P 匿名掲示板「新月」[1] のソースコードを改良し，ノードが持つ隣人ノードの種類を「通常ノード群」「トラックバック用ノード群」の 2 種類に分ける．そして様々なノード形態において，2 種類の更新伝播がそれぞれどのように動作するかを確かめ，有効性を検証する．

2 P2P を使ったサーバ公開システム
新月 (shinGETsu) は P2P と自宅サーバの長所を合わせ持った匿名 P2P 掲示板である．自宅サーバ同士を連携させて掲示板を作り，P2P によって掲示板のデータを共有するので，自分の PC が動いてない時でも掲示板は機能する．Tor[2] のように，複数のノードを経てノード同士が通信する仕組みとなっているが，新月では主な通信を投稿そのものと投稿したというメッセージ (更新情報) の 2 つに分けることで，ネットワークトラフィックの負荷を軽減している．ノードは常に複数のノードを隣人ノードとして保持し，更新情報を送信，受信する際は必ず隣人ノードを通る．本研究では，通常の隣人ノードにトラックバック用の隣人ノードを加え，ノードが扱う隣人ノードの種類を 2 種類にし，それぞれの更新情報の伝播に違いを持たせる．通常の伝播はそのままに，トラックバック用の伝播を遠くのノードまでおくることにより，ノード間の関連性を持たせ，P2P コミュニティの活性化を図る．

3 トラックバック機能の実装
新月の通信用アプリケーションは C 言語版「shingetsu」，Java 言語版「selene」，Python 言語 [3]版「朔」が用意され，本研究では，「朔」を改良する．
3.1 トラックバック機能の提案
通常，新月では一定数の隣人ノードを保持する．更新通知を隣人ノードから受け取ると，他の隣人ノードにバケツリレーのように伝播させる．本研究では，現在の河野 浩之
ASP 型ブログに定着しつつある「トラックバック」を利用した更新通知の伝播を制御することを提案する．ト
ラックバックによる投稿のみ，遠くまで伝播させたり，スレッドファイルそのものを直に伝播させ，興味のある記事を自動的に収集する機能を実装すれば，大規模ネッ
トワーク時におけるネットワークトラフィックの削減，トラックバックしてあるノードを優先することによるブログ全体の活性化などの効果が予想される．
3.2 通常更新の伝播
通常の新月の場合，ローカルの新月フォルダにスレッドを立てたり投稿した場合，投稿と同時に他のノードへ更新通知を行う．更新通知を受け取ったノードは投稿データを取得した後，同様に更新通知を行い，同様の手順で別ノードへデータを伝播させる．
3.3 トラックバック更新通知の伝播本研究で実装する改良版新月は通常の更新通知の伝播に加え，「トラックバック更新通知」の伝播をする機能を追加する．トラックバック更新通知とは，図 1 のように，あるノード同士がトラックバックしたことを通知することである．そして，通常の更新通知伝播では，隣人ノード全てにブロードキャストされるが，トラックバック通知は，自分の記事とトラックバックしているノードにのみ通知する仕組みである．
3.4 トラックバック機能の実装
新月はバックグラウンドで起動し，ウェブブラウザから各 PC のゲートウェイにアクセスできる．図 1 は，更図 1 トラックバック用投稿機能のアルゴリズム

新情報を送信，転送する際のアルゴリズムである．影を付けた要素を改良，追加した．本研究では，2 種類の伝播を分かり易くするため，通常隣人ノードを Node.txtで管理する仕様に加え，トラックバックによる伝播はtbNode.txt から隣人ノードを読み込むように改良した．
以下，主に改良を加えたモジュールについて説明する．
thread cgi.py モジュール 自分がトラックバックしたいと思った記事のリンクを記述し投稿することによって，トラックバック更新通知が始まる．
gateway.py モジュール ユーザがブラウザ上でスレッドを作成したり，投稿を行うと gateway.py の CGIクラスが呼び出される．投稿時にトラックバック伝播か通常伝播か判断するコードを加えた．図 1 における 1 の通常伝播の判断にあたる．
Node.py モジュール トラックバックを通知するノードは，通常の隣人ノードのリストとは別に，トラックバックのための隣人リストを作り，そのリストのノードにのみ通知する仕様である．Node.txt には通常の隣人ノード，tbNode.txt にはトラックバック用の隣人ノードが記述されている．図 1 の 2 では伝播の種類を判別した後，それぞれのテキストを読み込んでいる．

伝播の届かない範囲まで到達できることが確認された．

4 検証：8 台の PC を用いた P2P ネットワーク

表 2 トラックバック投稿の伝播軌跡

検証には 8 台の PC を使用し，HUB ポートに繋ぎローカルエリアネットワークを形成する．ノードには 1〜8 までの番号を付け，IP アドレスは順に 192.168.1.1〜192.168.1.8 である．図 2 のノード番号 X は各ノードの IP アドレス [192.168.1.X] に対応する．ノード 1 から順に朔を起動し，ノードの形態を確認，2 種類の投稿を試し，伝播状況を確認する．今回は 8 台の PC を使用し，2 種類のある程度自然な P2P ネットワークを構成させ検証した．
4.1 伝播の順序と軌跡
朔の設定は次のようにし，ノード 1 から順に朔を起動した．すると，図 2 の P2P ネットワークを構築した．
通常ノード保持数 2
トラックバックノード保持数 2
通常伝播範囲 3hop
トラックバック伝播範囲 7hop

図 2 8 つのノードによる P2P ネットワーク全てのノードで投稿を行い，更新情報がどのように伝播していくか，伝播範囲を調べた．表 1，2 はノード
4[192.168.1.4] が通常投稿を行ったとき，トラックバック投稿を行ったときの更新情報の伝播の軌跡である．更
新伝播の種類によって，伝播するノード，軌跡がそれぞれ異なった．本研究では 8 台の PC を使用し，極めて小規模な P2P ネットワークしか作ることができなかったが，設定によっては，トラックバックによる伝播が通常

表1

通常投稿の伝播軌跡

投稿ノード

通常伝播軌跡

1hop

2hop

3hop

ノード番号 [192.168.1.X]

X=4X=1
X=2
X=3

投稿ノード

X=2
X=3
X=1
X=3
X=1
X=2

X=3
X=2
X=3
X=1
X=2
X=1

トラックバック伝播軌跡

1hop

2hop

ノード番号 [192.168.1.X]

X=4

X=5X=6X=7
X=8X=7
X=85 おわりにトラックバックの伝播が通常伝播の届かない範囲にまで到達したことが実験によって証明された．よって，
P2P を使ったブログの様なコミュニティでは，関連するノード同士の通信と，それ以外のランダムなノードと扱いを分けることにより，ネットワークトラフィックを抑えつつ，快適なコミュニケーションが取れると考えられる．P2P を使ったコミュニティ (ブログ等) では，自分のノードと関連性の高いノード群とそうでないノード群の 2 つに分けて扱うことにより，無駄なネットワークトラフィックを発生させずに，効率のよいノード検索が可能となる．本研究では，ただ伝播情報を分岐させ，伝播軌跡，有効範囲を確認するだけに留まった．トラック
バック用の伝播に更新情報ではなくスレッドファイルそのものを伝播させる等，トラックバック用ノードの機能拡張が今後の課題である．

参考文献[1] 新月-P2P 匿名掲示板, http://shingetsu.info- /index.ja.html (accessed 2005.8)．
[2] Tor:An anonymous Internet communication system, http://www.privoxy.org/ (accessed 2005.8)．
[3] PythonJapanUser’sGroup,
http://www.python.jp/Zope/ (accessed 2005.8)．