ダウンロードゲーム
- お互いにデータを配信しあう
- 同時に、複数のPeerからダウンロードする
- ダウンロード速度が早いところからアップロードする。
- アップロード速度が早いところかダウンロードする。
- 同時に、複数のPeerからダウンロードす
- 配信に協力しないTorrentには配信しない
TrackerからPeerの一覧を取得できるようになりました。TorrentのP2Pネットワークから、実際にデーターをダウンロードしてみましょう。
Torrent のダウンロードはゲーム
Torrentクライアントどうしのデータのやりとりをダウンロードゲームと呼ぶ事にします。Torrentは特定のサーバーからダウンロードするのではなくて、Peerどうしで融通しあいます。この時の融通しあい方の、ゲーム性が高いのが、ダウンロードゲームと呼ぶ事にした理由です。
決まったルールに従ってダウンロードするのではなく、Peerどうしで駆け引きを行いお互いにダウンロード速度を競い合います。駆け引きのうまいAIは有利にデータをダウンロードできます。しかし、逆に駆け引きの下手なAIはダウンロードに時間がかかるといった感じです。
悪意のあるPlayerもゲームの一部
このことによって、耐久性の高いネットワークを構築できます。決められたルールを適用している場合、そのルールの考慮漏れがある場合、、悪意のあるPlayerの暗躍を原理的に許す事になります。
しかし、悪意をもったゲームプレイヤーも、いちプイヤーとして考えて対処することになります。 この攻略方が見つかるまでは、(悪意のあるPlayerが勝つような)有効な仕組みとして働き続けます。 また、後述する「つきあいかたの科学」の中で紹介されている「おうむ返し戦略」が今のところもっとも強い戦略として知られています。そして、今もなお、有効なゲームであり続けてるのです。
Torrentはデーターを配信しあう
Torrentでは、Peerどうしが所持してしいるデータを配信しあいます。
例えば、"まぎか.mp4" というデータをPeer A が所持していて、Peer B が このデータを欲しい場合
Peer A が Peer Bにデーターを提供します。
同様に、Peer B が Peer A が欲しがるデータを所持していた場合、 "まぎか.mp4"をダウンロードしながら、"エスカ.mp4"を配信します。
Torrentはブロック単位で配信しあう
Torrent の場合は、このデータを共有する単位は、ファイル単位ではなくて、ブロック単位で管理しています。
{
"announce":http://example.com/tracker,
"created by":torrent generator,
"creation date":1364723642,
"encoding":utf-8,
"info":{
"length":1024,
"name":xxx
"piece length":16384,
"pieces":<......20バイト単位のバイナリデータ>
}
}
上記のような、TorrentFile の中に記載されている、"piece length" の単位でデータを分割しています。
例えば、piece_lengthが8で、[0,1,2,3,4,5,........]というデータを持つ場合、 といった感じで、n個に分割します。
効率よくデータを配信するほうほうを模索する。
効率よくデータをネットワーク全体に配信するために、Torrent Clientは様々な工夫を凝らします。
1. 同時に、複数のPeerからダウンロードする
同時に、複数のpeerからデーターをダウンろロードします。これによって、いって時間にダウンロードできるデーター量が安定します。あるPeerの回線が混雑して遅くなっても、他の回線が早いpeerがその分をおぎなってくれます。
上がり速度よりも、下がり速度の方が早い回線がほとんどです。同時に複数のPeerからデータをダウウンロードすることで、下り速度いっぱいをり利用してダウンロードすることも可能です。
2. ダウンロード速度が早いところへアップロードする。
ダウンロード速度は、回線の速度、混み具合、経路などによって、変化していきます。 Torrent Client は、通信状態を計測してして、アップロード速度が早いpeerからデーターをダウンロードするようにします。
Torrent Client で良く使われ方法として、同時にダウンロードするPeer数をK個に固定して、一定時間ごとに、アップロード速度がお遅かった、peerを、それ以外のダウンロード可能なpeerと入れ替えます。
これによって、ダウンロード速度が早いK個のpeerを探しつつ、現状で最適なPeerかたデーターをダウンロードできるようになりますようになります。
3. 配信しないTorrentには配信しない
配信して欲しいデータを持っているPeerへデータを配信しているにも関わらず、Chokeされ続けている場合、Choke仕返します。
万物の等価交換が基本です。得たらその分を還元する事を相手に期待します。
囚人のジレンマと「つきあい方の科学」
このような、敵対的な行動をする相手に対して、こちらも敵対的行動を示す事を、しっぺ返し戦略といいます。
この問題については、「つきあい方の科学」を参照してください。 https://ja.wikipedia.org/wiki/つきあい方の科学
Torrentの仕様は公開されています。なので、協調しないPeer を作成する事も可能です。例えば、ダウンロードだけとして配信しないTorrentとか。
このように利己的な Torrent Client が増えるとデータの配信が不安定になります。なので、長期的に考えて、データー配信に参加しないTorrentよりも、配信に参加したTorrent方がよりよい結果をうむ仕組みが必要になります。
[囚人のジレンマ問題なので、協調しないのが合理的]
Peer A \ Peer B | 配信する | 配信しない |
---|---|---|
配信する | 2 \ 2 | 0 \ 3 |
配信しない | 3 \ 0 | 1 \ 1 |
お互い協調すると、お互いに2の利益を得る事ができる。片方だけ配信すると、配信しない側だけ得をする。配信したPeerだけ4の利益を得る。お互いに配信しないとお互いに損をする。といった事がおきます。
利己的に判断すると、相手が裏切る場合を考慮した場合、合理的に自身の利益を最大化するために、データーを配信しないという選択をします。
- 相手が、「配信するを選択」をしたとする場合、自分は「配信しない選択」が有効。
- 相手が、「配信するを選択」をしたとする場合、「自分は配信しない選択」をする方が有効。
つまり、相手の選択によらず、配信しない方がより良い利益を、得る事ができる。
つまり、データをダウンロード専用のTorrentクライアントを作れば、使う人が増えるに違いないとなるわけです。
[無限ゲームとして見ると、おうむ返しがメジャー]
一度だけだと、裏切る事が最良の選択ですが、無限ゲームの場合だと少し状況が変わってきます。 「つきあいの科学」の中で、実際に行われた実験について解説されています。
囚人のジレンマに基づいて、「協調するか」、「裏切るか」の選択をおこなうゲームを行いました。AIどうしを戦わせるゲームです、さまざまな分野の方に協力してもらいました。 参加した人は、優勝を狙い様々なAIを組みました。「裏切り続けるAI」や「仏の顔は3度までAI」や「ランダムな選択をするAI」など、様々なAIが用意されました。ひのAIを網羅的に戦わせた結果、もっとも良い成績をのこしたのが、このおうむ返し戦略(TIT-FOR-TAT)なのです。
[予想される戦略]
無限ゲームでは、おうむ返し戦略が有効な事がわかりました。しかし、有限ゲームではどうでしょうか。いつかは、ダウンロードは終わります。 たとえば、ダウンロードゲームの場合では、ダウンロード完了後に、協調することは合理的な選択でしょうか? 実際のところ、協力しても得られる利益はゼロです。配信する帯域分はマイナスともいえます。
このことから、予想される戦略は、データのダウンロードが完了するまでは、協力的だけど、データのダウアンロードが完了してしまうと、非協力的になる事が予想されます。
実際のところ、この推論はだいたいあっていて、インターネットでのTorrentの使い方として、データのダウンロードが終わったら、データー配信リストから削除する的な対応をするユーザーがかにれいるようです。
彼らの戦略はとても利己的、かつ合理的なのが解ると思います。