1. client->tracker的GET消息.
<1>第一次启动后发送(携带event为started).
<2>以后根据tracker reponse中的interval定时发送.
<3>某种事件发生(stopped, completed)时发送.
<4>需要更多的peer列表时发送.
2.tracker->client的reponse
<1>每次收到client的GET请求后发送.
3.client->peer的handshake消息
<1> client主动向peer发起TCP连接并成功建立,client主动发起handshake.
<2> peer主动向client发起TCP连接并成功建立, client收到peer的handshake后回应handshake.
4.peer->client的handshake消息
<1> peer主动向client发起TCP连接并成功建立,peer主动发起handshake.
<2> client主动向peer发起TCP连接并成功建立, peer收到handshake的handshake后回应handshake.
5.client->peer的bitField消息
<1> 如果client主动发起连接,client收到peer的handshake回应后,发送bitField消息.
<2> 如果peer主动发起连接,client回应完handshake后发送bitField消息.
6.peer->client的bitField消息
<1> 如果peer主动发起连接,peer收到client的handshake回应后,发送bitField消息.
<2> 如果client主动发起连接,peer回应完handshake后发送bitField消息.
7.client->peer的keep-alive消息
<1>定时发送(2分钟一次)
8.peer->client的keep-alive消息
<1>定时发送(2分钟一次)
9.client->peer的choke消息
<1> 每隔30秒扫描一次peer列表,对不符合条件??的peer发送choke ???
<2> 如果接到peer的无效request请求,向peer发送choke
10.peer->client的choke消息
<1> 每隔30秒扫描一次peer列表,对不符合条件??的peer发送choke ???
<2> 如果接到client的无效request请求,向client发送choke
11.client->peer的unchoke消息
<1> 每隔30秒扫描一次peer列表,对符合条件??的peer发送unchoke ???
12.peer->client的unchoke消息
<1> 每隔30秒扫描一次peer列表,对符合条件??的peer发送unchoke ???
13.client->peer的interested消息
<1> 收到peer的bitField消息后,根据本地情况进行判断是否向peer发送interested消息.
<2> 收到peer的have消息后,根据本地情况进行判断是否向peer发送interested消息.
14.peer->client的interested消息
<1> 收到client的bitField消息后,根据本地情况进行判断是否向client发送interested消息.
<2> 收到client的have消息后,根据本地情况进行判断是否向client发送interested消息.
15.client->peer的not interested消息
<1> 收到peer的bitField消息后,根据本地情况进行判断是否向peer发送not interested消息.
<2> 收到peer的piece消息后,根据本地情况进行判断是否向peer发送not interested消息.
16.peer->client的not interested消息
<1> 收到client的bitField消息后,根据本地情况进行判断是否向client发送not interested消息.
<2> 收到client的piece消息后,根据本地情况进行判断是否向client发送not interested消息.
17.client->peer的have消息
<1>client下载某个piece完成并且校验后发送.
18.peer->client的have消息
<1>peer下载某个piece完成并且校验后发送.
19.client->peer的request消息
<1>client收到peer的unchoke消息,根据本地情况进行判断是否向peer发送request
<2>client收到peer的have消息,根据本地情况进行判断是否向peer发送request
<3>client收到peer的piece消息,根据本地情况进行判断是否向peer发送request
20.peer->client的request消息
<1>peer收到client的unchoke消息,根据本地情况进行判断是否向client发送request
<2>peer收到client的have消息,根据本地情况进行判断是否向client发送request
<3>peer收到client的piece消息,根据本地情况进行判断是否向client发送request
21.client->peer的piece消息
<1>client收到peer的request消息后,并且发现自己并没有choke对方时发送.
22.peer->client的piece消息
<1>peer收到client的request消息后,并且发现自己并没有choke对方时发送.
23.client->peer的cancel消息
<1>client在即将完成下载阶段(endgame),向所有peer发送request消息(是向所有没有choke自己的peer??), 如果某个peer最先返回了请求的block(piece消息),则向其他未返回的peer发送cancel消息.
也就是说这个阶段client端还是可能收到重复的block.
24.peer->client的cancel消息
<1>peer在即将完成下载阶段(endgame),向所有peer发送
阅读(1892) | 评论(0) | 转发(0) |