回答:
bittorrentの仕組みの概要:
あなたは持っている仲間とトラッカーを。すべての仲間はいつでも一緒に群れです。通常の状況では、1つまたはいくつかのピアが完全なファイルセットを持ち、他のピアがそれを利用できるようにしたいと考えています。
ピアは.torrentファイルを取得します。このファイルには、A)ファイルセットのSHA-1ハッシュ、B)トラッカーのURL、C)ファイルが分割されたピースの数、およびすべてのピースのSHA-1ハッシュ。ピースのサイズはトレント自体によって決まります。
その後、ピアはトレントで指定されたURLを使用してトラッカーに接続します。トラッカーは、ピアのリストで応答します。トラッカーはポート80または443でHTTPを使用します。
ピアは、トラッカーからの情報を使用して別のピアを選択し、それと直接連絡して交換セッションを設定し、ピースの取得を試みます。 交換セッションはピアによって直接行われ、トラッカーは転送に関与しないことに注意してください。トラッカーは情報のみを提供します。
ピアがピースを取得すると、SHA-1ハッシュに対してそれを検証し、ファイルに書き込みます。その後、別のピアを選択するときにそのピースを提供できます。後続の交換セッションには、「トレーディング」ピースが含まれます。他のピースがない場合、ピアは一般に最初のピースのみを提供すると信じています。
ピアは、トラッカーを頻繁に再確認して、ピアの更新されたリストを取得します。複数のピースがある場合、ピアは1つの交換が終了するのを待ってから別の交換を開始する必要はありません。したがって、ピアに多数のピースがあれば、転送は本当にスピードアップできます。これが、急流の開始が遅いが、ピアが断片を取得するにつれて速度が速くなる理由です。
ピアにすべてのピースがある場合、ファイル全体がファイルセットSHA-1ハッシュに対して検証されます。その後、シーダーになり、ファイルセットの可用性を高めること以外は何もしません。すべてのピースを持たないピアはリーチャーです。
トレントにシードがない場合、それは死んでいますが、すべてのピアが保持するすべてのピース間にファイルの完全なコピーが存在する場合、それらは最終的に交換され、それらの間で完全なコピーを取得します。
SHA-1ハッシュは、トラッカーとピアがどのファイルがスウォームされることになっているのかを「知る」方法です。トレント内のファイル名は、データの識別には使用されません。.torrentファイルのハッシュと照合しない部分は破棄されます。継続的に不良な断片を送信するピアは、他のピアによってスナッブされ、最終的にはスウォーム内の誰にも接続できなくなります。
ピースのサイズが小さいほど、ピアはピースをより速く取引できるため、トレントはより堅牢になりますが、.torrentファイル内のピースのハッシュをより多くリストする必要があるため、.torrentファイルは大きくなる可能性があります。
BitTorrentを介して何かを公開している場合、利用可能にしたい限りファイルをシードすることをお勧めします。ほとんどのBitTorrentソフトウェアは、同時接続を最大化するためにできるだけ多くのピア間で物事を広げようとするアルゴリズムを実装しているため、他のピアがあなたを支援します。このようにして、BitTorrentは物事を公開し、帯域幅コストを節約するのに役立ちます。
この件に関する素敵な論文はこちら
http://davidhales.name/posters/patarin-hales-delis-poster6.pdf
(メモは実際には.pdf
ファイルであり、Acrobat Readerで表示できます。)
これは誰かがそのコンテンツで作った画像ファイルです:
同輩メッセージプロトコルに関する概要。
クライアントは2つのプロトコルを使用して、TCP、またはuTP(over UDP)のピアと情報を共有できます。このデータはbittorrentプロトコル仕様、セクション同輩メッセージに続きます。
したがって、プログラム的には、2つのクライアント間で接続を開始する必要があります。接続が(TCPまたはuTPを介して)設定されると、トラッカーまたはDHTを介してリモートピアの情報(ip&port)を取得したクライアントによってbittorrentハンドシェイクが開始されます。このハンドシェイクにはinfo_hashが含まれていますこの接続に関するトレントを識別するがいます。
プロトコルを介してトレントデータがどのように切り捨てられるかを最初に見てみましょう。作品は、あなたがネットワーク経由で共有しているデータの一部です。ブロックと混同しないでください。ブロックとは、パケットに包まれたピースの一部です。ブロックは、共有する粒状である部分をパケットを通して、そしてピースはピアを介してトレントを共有する粒状です。
接続が開始されると、両方のクライアント(ローカルクライアント、これをLCと呼び、リモートクライアントRCと呼びます)がチョークされ、関心がなくなります。窒息とは、「忙しくて忙しいあなたのメッセージには答えませんが、それらを考慮に入れるかもしれません」という意味です。したがって、「固定されていない」とは、「あなたのメッセージに答えます」という意味です。興味があるのはもちろん、あなたが持っているいくつかの作品が欲しいということです。したがって、2つのピア間の接続の状態は、LC_chocked?、LC_interested?、RC_chocked?、RC_interested?の4つの状態で定義できます。RCに(私は)固定されていない、または(無)関心があると警告する、私は彼に送信する必要があり(UN)興味と(UN)チョーク状態メッセージ、往復を。
持っているピースを互いに通知するために、ハンドシェイクの直後にビットフィールドメッセージを送信できます。その名前が示唆する1
ように、クライアントがこの独特の部分を持っている場合、0
それ以外の場合、各ビットが設定されるビット文字列です。
したがって、LCがぎっしり詰まっていて、RCが彼をアンロックしている場合、彼は、LCがビットフィールドメッセージのおかげであることがわかっている1つのピースに属するブロックを要求する要求メッセージを送信できます。
ピアがピース全体を受信すると、ピースメッセージを送信してすべてのリモートピアに通知し、保持している関連ビットフィールドを更新できます。
これは非常に基本的な概要であり、もちろん、チョークアルゴリズムなど、すべての詳細がここに記載されているわけではありません。投稿内に3つ以上のリンクを含めることはできません)。