Dart で Torrentクライアントを作ろう ( 1 ) はじめに

DartでTorrentクライアントを作ろう!!
全15回で実際にTorrentクライアントを作成します。P2Pアプリをサラッと作れるような基礎体力をあなたに!!


## はじめに
Torrentクライアントを開発しています。この本は、その時に P2P について学習した事をまとめたものです。
今でこそ、仕様書に書かれている内容に満足していますが、当初は上手く理解できない所が、かなりありました。
実際に作成していくうちに、理解できる範囲が広がっていきました。そして、そろそろ完成というところまで進みました。
この経験にならい、実際に Torrent クローンを作成しながら、P2Pについて解説して行きたいと思います。
##### ネガティブなイメージ
ちまたでは、Torrent は違法なファイル共有アプリという認識が強いように思います。 Twitter の検索機能で、Torrent と検索してみてください。 Torrentについてネガティブなイメージを持つことでしょう。違法な利用を助長するようなツイートを発見する事ができるからです。
Google で、Torrentと検索してみてください。 「 アメリカ合衆国のデジタルミレニアム著作権法に基づいたクレームに応じ、このページからxx件の検索結果を除外しました。」 といった文言が表示されます。また、Twitterで検索した結果と同じように
違法な利用を助長するようなサイトを発見することができるでしょう。

##### 世の中に貢献している
しかし、こういったネガティブなイメージは Torrent の一面でしかありません。まっとうな使い方も多くされています。
例えば、大規模なネットワークシステムのデプロイといった事があげられます。デプロイとは、ユーザーへサービスを提供するための、準備作業の事をいいます。
Google であれば、データを即座に検索できる用にサーバーを立ち上げる。 Twitter ならば、ツイートの送信、表示、などをできるようにするといった事です。
大手のネットワークでは数千、数万のコンピュータが動作しています。
これらのコンピュータへ変更を加える必要が出てきた場合には、この変更を数千、数万のコンピュータへ反映する必要があります。こういったデータの配信の Torrent の技術が利用されています。
また、大量にデータを配信する環境が必要ななのは企業だけではありません。個人でも活用されています。例えば、OSのイメージの配信に利用されています。
OSというと、WindowsやMACなどメーカーが CD や DVD といった記憶媒体を通して配布される事をイメージするかも知れません。
しかし、独自にOSをパッケージングする事は、大手の企業だけがする仕事ではありません。今では個人が趣味でOSをパッケージングして配信する事も可能です。可能なだけではなく、ありふれた行為になりつつあります。
しかし、個人で配信する場合、当然ながら数千、数万のサーバーを用意する事はできません。また、 CD や DVD の記憶媒体を大量に配るにしても限界があります。そういった、個人がデータを配布するのにTorrentの技術が利用されています。
##### 学習に最適
また、Torrent を学ぶことは、P2Pを学ぶ上で最適な教材でないかと考えられます。 
まず Torrent は、もっとも普及した P2P の通信方法であります。 それだけではなく、 最新の技術を取り入れ進化し続けている技術でもあります。
Torrent を学習すると、ネットワークアプリの作成のノウハウ、 分散ハッシュテーブル、 ゲーム理論を応用した柔軟なネットワークなどなど、 基本から応用まで扱う事になります。
なによりも、おおくのアプリや仕様がオーブンに公開されており、P2Pを実例をもって学ぶことができるのです。
 Torrent 以外でメジャーな P2P アプリはあります。 しかし Torrent ほど、オッピロゲなはないでしょう。日本で流行した Winny のソースは公開されていません。 Winny について知りたければ、 ハックする必要があります。海外で流行したWinmxもそうです。
Torrentはその仕様が公開されています。どのような通信プロトコルが利用されているのか文章化されています。おおくの実装例がオープンソースとして公開されています。公開されているだけではありません。さまざまな言語で書かれています。Python、 Ruby、Java、JavaScript、C++ などなど、ありとあらゆる言語で書かれています。
もしも、煮詰まった時は、これらの実装を読む事で保管する事も可能でしょう。あなたの得意な言語で読む事ができるのです。

## Torrentって何

　Torrentを違法なファイル共有ソフトという認識をもたれているかも知れません。しかし、それは間違いです。 Torrent は違法な利用を助長するような機能は含まれていません。たとえば、Torrent には匿名性はほとんどありません。 また、Torrent クライアントはネットワークから特定のファイルを探し出し共有する機能を持っていません。
つまり、 Torrent クライアントを利用してデータをダウンロードする事は、Webブラウザーを利用して、Webサーバーからデータをダウンロードするのと差がありません。
Google などの検索エンジンを使用して欲しいデータを探し、データをダウンロードします。ただ違うのは、 Torrent はどの通信方法よりも効率良くデータを配信することができることです。

##### データの配信はとてもコストが高い
インターネットでデータ配信するとしましょう。 例えば生放送で動画を配信したい場合、どのくらいのコストがかかるでしょうか？
例えば、320×240 の画面サイズの動画だと、1秒間に50kb程度の帯域を使用します。任期のある生放送などは、一度に2000人以上の人が視聴します。この場合、2000×50kb=100mbのデーター転送が必要になります。
ご家庭にある通信回線は10MB程度ですから、100MBという値は既に個人で配信できる量ではありません。

##### 低コストでデータ配信が可能な優れもの
　Torrentはこれらのコストをきわめて最小化することができます。Torrentの仕組みを利用すれば、こういったサービスを個人が提供する事ができます。
　Torrent はデータをダウンロードするユーザーもデータの配信に加わるようにする事でこの問題を解決しました。
当然のことですが、配信に加わるコンピュータが増えれば増えるほど配信できるデータ量は増えます。
　例えば、2.5MBのデータ配信を配信するとしましょう。 これは、同時に50人くらいに配信できます。しかし、これが限界です。もしも、この50人が2.5MBの帯域をデータの配信に利用してくれたら、50×2.5mb= 150mbの配信が可能になります。3000人程度にデータを配信できます。
 さらに、この3000人がデータの2.5MBの帯域を利用してくれたら、3000×2.5mb=7500mbの配信が可能です。これは、15万人に配信が可能な規模です。

Torrentはこのような仕組みを実際に形にしました。Torrentによって、データを欲しがっている全ての人に素早くデータを配信する事ができるようになったのです。

## 目指すゴール

本文章は、Torrentプロトコルについてまとめたものです。しかし、作者(kyorohiro)はBittorrentの作成者ではないので、その仕組みや、その仕組みにした意図をすべて組み取ることはできません。本書に記載されている内容は、kyorohiroかせ解釈し解決した事が書かれています。オリジナルではありません。オリジナルのように思案して、思考できるようになるべく、Torrentクローンを作成しました。
その仕組みを理解して実現しました。そして、独自のP2Pネットワークを思案して検討するに至ります。しかし偽物です。
色々書いていますが、偽物のの発言ですから「そのように解釈したのか？」「それは違うのではないか？」「この人もしかして理解できていないのでは？」的な視点で見てもらうのが、丁度良いと思います。

##### P2Pアプリを作る事ができるようになる
本書を読む事で、誰もがP2Pアプリを作る事ができるようになります。P2Pで動画配信、P2Pを応用した柔軟なネットワークについて思案し、実現できる事ができるようになります。
P2Pと聞いて「何か難しい事をしているのではないか？」「しDHTと聞いて、高度な数学的難解な問題？」といった誤解を解きます。
本書を読んだ後もP2Pはなんら難しい事ではなくて、小学生が算数の問題を解くような簡単な問題なのだと理解していることでしょう。そして、あなたは、最新の論文を読み。それも足らず、新たな仕組みを提案する側にたっているに違い有りません。