Linux BT下载(4)-peer之间的通信协议

来源:互联网 发布:js随机数1到10 编辑:程序博客网 时间:2024/05/24 02:22

peer之间的通信协议

什么是peer

我们将某个客户端称为下载者,而将其他下载者称为peer。


什么是peer之间的通信协议

peer之间的通信协议又称为peer wire protocal,即peer连线协议,它是一个基于TCP协议的应用层协议。

要维持那些状态变量

当客户端与peer建立TCP连接后,客户端必须维持的几个状态变量是:

am_chocking : 该值若为1,表明客户端将远程peer阻塞。此时如果peer发送数据请求给客户端,客户端将理会。即一旦将peer阻塞,peer就无法从客户端下载到数据。该值若为0,则刚好相反,即peer未被阻塞,允许从
户端下载数据。
am_interested: 为1,表明客户端对远程的peer感兴趣,当peer拥有某个piece,而客户端没有,则客户端对peer
感兴趣。该值若为0,则相反。
peer_chocking:为1,表明peer见啊ing客户端阻塞,此时,客户端无法从peer处下载到数据。若为0,表明客户端
可以向peer发送数据请求,客户端将进行相应。
peer——interested:为1,peer对客户端感兴趣,即客户端拥有某个piece,而peer没有。为0,表明peer客户端
不感兴趣。

连接后的变量设置

当客户端和peer建立TCP连接后,客户端将这几个变量的值设置为:am_chocking = 1, am_interested = 0, peer_chocking = 1,  peer_interested = 0。

条件

当客户端对peer感兴趣且peer未将客户端阻塞时,客户端可以从peer处下载数据。当peer对客户端感兴趣,且客户端未将peer阻塞时,客户端向peer上传数据。

握手消息

客户端与一个peer建立TCP连接后,客户端先向peer发送握手消息,peer接收后回应一个握手消息。
握手消息是一个长度固定为68字节的消息。格式如下:   
<pstrlen><pstr><reserved><info_hash><peer_id>
消息格式中的一部分参数的含义:


其他消息(除握手消息)

格式为:<length prefix><message ID><payload>
length prefix是个描述长度的前缀,占4个字节,是message ID和payload的长度和。message ID(消息编号)占1字节,是个十进制的整数,是消息的编号。payload(负载),长度可变,是消息的内容。
0 0