Linux BT下载(4)-peer之间的通信协议
peer之间的通信协议
什么是peer
我们将某个客户端称为下载者,而将其他下载者称为peer。
什么是peer之间的通信协议
网络层数据链路通信协议又被称为网络层物理链路协议(Wireless Protocol),也被称为网络层物理连线_protocol。(Wireless Link Protocol)。其具体实现基于物理链路建立和断开的机制。该协议通常与TCP/IP模型中的应用层功能相集成,并通过建立可靠的端到端连接来实现数据传输。
要维持那些状态变量
当客户端与peer建立TCP连接后,客户端必须维持的几个状态变量是:
设am_chocking为标志变量,则其取值1表示客户端已封锁远程peers. 当远程peers发送数据请求至客户端时,则此peers的数据请求将被忽略. 一旦实现对该peers的封锁,则该peers将无法从当前系统获取任何数据. 反之,则当该标志变量设为0时
客户端下载数据。
am_interested: 为1,则表示客户端对远程的 peer 兴趣。当 peer 拥有某份文件而客户端无时,则客户端对 peer 的兴趣将被抑制。
感兴趣。该值若为0,则相反。
peer_chocking等于1时,则表示 peer 连接中出现阻塞现象;此时, 客户端无法从 peer 处获取数据。如果 peer_chocking等于0,则表明(即客户端处于正常连接状态)。
若向某节点发起数据请求,则该节点会做出响应。
其中 interested 值定义如下:
当 interested = 1 表示该节点对该客户感兴趣;
当 interested = 0 表示该节点对此无兴趣。
不感兴趣。
连接后的变量设置
在客户端与peer建立TCP连接之后进行参数配置时,默认将这些参数设为am_chocking = 1, am_interested = 0, peer_chocking = 1, peer_interested = 0。
条件
当一个客户希望与peers建立联系并且peers尚未对其进行阻挡时,该客户能够从peers那里获取所需的数据。反之,当peers对于客户保持兴趣并且客户尚未对其实施阻挡策略时,该客户就可以与peers进行数据共享。
握手消息
当客户端与一个peer建立TCP连接时,在TCP连接建立过程中,客户端首先通过发送握手消息来向 peer 发出信号。当 peer 接收该握手消息后会相应地返回一个确认的握手消息。
握手消息是一个长度固定为68字节的消息。格式如下:
<pstrlen><pstr><reserved><info_hash><peer_id>
消息格式中的一部分参数的含义:

其他消息(除握手消息)
格式为:
prefix 'length' 是一个表示长度的前缀;它占用4个字节,并代表消息ID和负载的总长度。message ID (消息编号) 占据1个字节,并是一个十进制整数号码来标识消息内容。负载 payload 是消息内容的一个部分。
