ダウンロードゲーム


  • お互いにデータを配信しあう
  • 同時に、複数の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の使い方として、データのダウンロードが終わったら、データー配信リストから削除する的な対応をするユーザーがかにれいるようです。

 彼らの戦略はとても利己的、かつ合理的なのが解ると思います。