119.6K Views
March 07, 23
スライド概要
日本ハッカー協会さま「Winnyとは何だったのか v2.0b7.1」
https://hackers.connpass.com/event/275585/
Winnyのネットワークの面白さ
秋葉原生まれ大手町育ちの歌って踊れる江戸っ子インフラエンジニア。 0と1が紡ぐ「ゆるやかなつながり」に魅せられ早20年、 SNSとCGMの力で世界を幸福にするのがライフワーク。 市民、幸福は義務です。 あなたは幸福ですか?
Winnyのネットワークの面白さ Aki @ めもおきば
今回の構成 • 前半 • Winnyのネットワークについてのおさらい • 後半 • バージョンアップで振り返るWinny開発史
Winnyの前にP2Pの基礎知識おさらい • ピュアP2P • 特定のサーバーがあるわけではなく、端末間でネットワークを構成して、 お互いにサービスをしあう 例: Gnutella、Freenet、BitTorrent DHT、IPFS、Winny ↔ハイブリッドP2P • データや通信先の検索にサーバーを併用しデータは直接通信する 例:Napster、WinMX、元々のBitTorrent データの転送 P2P サーバー経由 通信先の検索 分類 P2P サーバー経由 クライアント・サーバー ハイブリッドP2P ピュアP2P
Winnyの前にP2Pの基礎知識おさらい 非構造化オーバーレイネットワーク • ネットワークの構造が計算で定まら ない • 検索はメッセージを投げて探す • 例:Gnutella、Freenet、Winny https://en.wikipedia.org/wiki/Gnutella ↔ 構造化オーバーレイネットワーク • ネットワークの構造が計算で定まる • ハッシュ値から探すのが得意(DHT) • 例: IPFS、Ethereum (Kademlia-based DHT) https://en.wikipedia.org/wiki/Kademlia
Winnyネットワークによるデータ検索 • 「検索リンク」を介したファイル情報・検索クエリの転送 C ファイル情報(キー) の拡散 A B
Winnyネットワークによるデータ検索 • 「検索リンク」を介したファイル情報・検索クエリの転送 C ファイル情報(キー) の拡散 A 検索クエリの送信 B ポエム 検索
Winnyネットワークによるデータ検索 • 「検索リンク」を介したファイル情報・検索クエリの転送 • 「転送リンク」によるファイル本体の転送 C ファイル情報(キー) の拡散 検索クエリの送信 A B ポエム 転送リンク 検索
Winnyネットワークによるデータ検索 • 自動ダウンロードによる「地引き網」 C ファイル情報(キー) の拡散 A B ポエム 転送リンク 検索
Winnyの積極的なデータ中継 • 積極的にデータ転送に仲介者をはさみ、キャッシュさせる (キーの書き換えによって実現) C キーを拡散するときに 所有者欄を書き換え ファイル情報(キー) の拡散 A B ポエム 検索
Winnyの積極的なデータ中継 • 積極的にデータ転送に仲介者をはさみ、キャッシュさせる (キーの書き換えによって実現) C キーを拡散するときに 所有者欄を書き換え ファイル情報(キー) の拡散 A B ポエム 検索
ネットワークの自己組織化 • 入力した「回線速度」と「検索キーワード(先頭3つ)」をつかって、 縦方向の上下関係と、横方向のクラスタリングを構成 Winny三姉妹 速度:1000 ねこ 速度:1000 ポエム 夜食 速度:200 ねこ 速度:300 ポエム × ○ 速度:100 ねこ
Winnyネットワークの性質 • 検索ネットワークによるファイル情報の拡散と検索 • 回線速度・クラスタリングによる自己組織化 • 積極的なデータ中継とそれによるキャッシュばらまき • データ中継を利用したPort0(外部から接続できないノード)対応
Winnyというソフトウェア開発 • 背景:当時2ch上に開発コミュニティを立てる流行があった • 2002/05(β1)から2003/11(v2.0β7.1)の1年半で 238回ものバージョンアップでなにをしていたのか? • バージョンアップ内容とともに振り返ります
2002-05 2003-01 2002-04-01 • 最初の書き込みと開発宣言 2003-11
2002-05 2003-01 2002-05-06:β1 • 一番最初のリリース • だいぶバギーだった記憶 2003-11
2002-05 2003-01 2002-05-13:β9 • 思ったよりポート開けしていない人がおおかったので、 明示的にPort0と設定していない場合は弾くようになった • トラブルシュートのため切っていた転送動作を復活 2003-11
2002-05 2003-01 2002-05-17:β11.3 • 自動ダウンロードのベースとなる自動再試行実装 2003-11
2002-05 2003-01 2002-05-18:β13 • Port0ノードもフル機能になった 2003-11
2002-05 2003-01 2002-05-23:β13.1 • 検索条件による自動ダウンロード機能 • 検索クエリは送らず、拡散されて きたキーに対して発動 • WinMXの「交換」文化に対する Winnyなりの解決案 2003-11
2002-05 2003-01 2002-06-14:β15 • クラスタリング機能 • 自動ダウンロード条件の先頭3つ • 最終的なWinny1の機能が だいたい揃ってくる 2003-11
2002-05 2003-01 2002-07-07:β17.3 • キーの拡散方法をいろいろ試行錯誤した結果、 最終的なゆっくり拡散方式になった 2003-11
2002-05 2003-01 2002-07-25:β18 • BBS機能 2003-11
2002-05 2003-01 2002-09-09:β20.5 • 通称「白Winny」(半日後に黒に戻った) 2003-11
2002-05 2003-01 2002-10-28:β21 • ファイルの公開者を主張 できるトリップ機能 (簡易署名) • 暗号学的な署名ではない • 匿名だが「誰かである」が 重要というユースケース が存在した • 例:Winny本体の配布 2003-11
2002-05 2003-01 2002-12-30:v1.0 • 正式版 • 直前はβ22.53 2003-11
2002-05 2003-01 2003-02-18:v1.10 • Winny内のファイルハッシュ値として、 MD5ハッシュ値を素直に使うようになった • 当初「暗号化キー」という仕組みがあった名残り 2003-11
2002-05 2003-01 2003-04-05:v1.14 • Winny1最終版 2003-11
2002-05 2003-01 2003-05-05:2.0β1 • Winny2初回リリース • BBS機能強化 • BBS用検索リンク • BBSトリップ 2003-11
2002-05 2003-01 2003-05-23:v2.0β3.2 • BBS専用ノード実装 2003-11
2002-05 2003-01 2003-06-17:v2.0β4.0 • C++ BuilderでGUI作り直し • β6、β7あたりはひたすら微調整 2003-11
2002-05 2003-01 2003-11-17:v2.0β7.1 • Winny2最終リリース 2003-11
ここに乗せきれないチューニングの数々 • アーキテクチャレベルの試行錯誤 • • • • キー流通や検索クエリの仕組み キーワードクラスタリング 捏造警告によるノード評価(負のクラスタリング) 暗号キーの廃止、トリップの導入 • たくさんのパラメータ • • • • • • 検索リンク数(上流・下流) 転送リンク数(計測アップロード速度からダウンロード数算出) 保持キー数 キー転送率 転送発生率(キー書換率) BBSキーにおける上記
大規模P2Pネットワークを作るということ ※ • 一時期には数十万ノード、数億ファイルあったと言われている • PCやネットワーク環境が現在以上に多様だった • PCはPentium M/Athlon 64、メモリ512MBとかのころ • ISDN(64kbps)、ADSL(上下非対称)、FTTH • 調整して展開して観測して……の繰り返しで効率を上げていった • もっと「効率」が悪ければ、その後のプライバシー被害なども 防げたのかもしれないが、十分な効率を維持できてしまった ※ P2P ファイル交換ソフトウェア環境 Winnyp を対象とした観測 https://www.ieice.org/publications/conference-FIT-DVDs/FIT2009/pdf/L/L_002.pdf
まとめ • Winnyネットワークの仕組みおさらい • 1年半の開発史を追体験 • Winnyの技術はなにが面白かったのか、 誤った神格化をするのではなく、 その道筋と結果を評価する人が少しでも増えてほしい • 映画楽しみにしています