メッセージフロー

BitTorrent クライアントの実装メモ.頭が混乱してきたのでまとめてみた.なお,ダウンロード側はコネクション開始直後は choked 状態.

Tracker                     Client                                  Peers
Tracker  <- GET request     Client                                  Peers
Tracker      peers list ->  Client                                  Peers
Tracker                     Client                    Handshake ->  Peers
Tracker                     Client  <- <bitfield> message           Peers
Tracker                     Client            <request> message ->  Peers
Tracker                     Client         <interested> message ->  Peers
Tracker                     Client  <- <unchoke> message            Peers
Tracker                     Client  <- <piece> message              Peers

                         downloaded

Tracker                     Client     <not interested> message ->  Peers
Tracker                     Client  <- <choke> message              Peers
Tracker                     Client               <have> message ->  Peers

実際には choke/unchoke/interested/not interested メッセージは非同期的に送信されるので,ここでのタイミングは適当.
追記: メッセージフローを図に表したWebサイトを発見した.
http://alexmohr.com/bittorrent/btworking.html