P2P网络协议
ReversalC
这个作者很懒,什么都没留下…
展开
-
BT源代码分析
概述:相对于 tracker 服务器来说,BT客户端要复杂的多,Bram Cohen 花了一年 full time 的时间来完成 BT,我估计其中大部分时间是用在 BT 客户端的实现和调试上了。由于 BT 客户端涉及的代码比较多,我不能再象分析 tracker 服务器那样,走上来就深入到细节之中去,那样的话,我写的晕晕糊糊,大家看起来也不知所云。所以第一篇文章先来谈谈客户端的功能、相关协议转载 2012-11-01 17:04:40 · 3468 阅读 · 0 评论 -
1. BT协议
BitTorrent(简称BT) 是一个文件分发协议,每个下载者在下载的同时不断的向其他下载者上传已下载的数据。BT协议通过一定的策略保证上传的速度越快,下载的速度也越快。 BT协议的文件分发系统的构成: 一个Web服务器 一个种子文件 一个Tracker(跟踪)服务器 一个原始文件提供者转载 2012-11-09 17:19:19 · 1382 阅读 · 0 评论 -
2.种子文件结构
B编码种子文件和Tracker的返回信息都是经过B编码的。B编码有4种类型:字符串、整型、列表、字典。字符串格式::。如:字符串spam,经过B编码为4:spam整型的编码格式:ie,即以i开头,以e作为终结符。如整数3 表示为i3e。列表的编码格式:le,如l4:spam4:eggse表示两个字符串,一个是spam,另一个是eggs。字典的编码格式:de,其中关键字是一个经过转载 2012-11-09 17:20:14 · 1039 阅读 · 0 评论 -
4.关键算法及策略
1. 流水线作业: 当客户端向peer发送数据请求时(即发送request消息),一次请求多个slice(即一个数据包发送多个request消息请求多个slice)。假如客户端一次只发送一个slice请求,则peer给客户端发送完一个slice的数据后进入等待,等待客户端发送新的数据请求。如果一次发送多个slice请求,则peer发送完一个slice后接着发送下一个slice,转载 2012-11-09 17:21:54 · 550 阅读 · 0 评论 -
5.系统模块设计
1. 种子解析:负责解析种子文件,从中获取Tracker服务器的地址,待下载的文件名和长度,piece长度,各个piece的hash值。2. 连接Tracker:根据HTTP协议构造获取peer地址的请求,与Tracker建立连接,解析Tracker的回应消息,从而获取各个peer的IP地址和端口号。3. 与peer交换数据:根据peer的IP地址和端口号连接peer,从peer处下载数据转载 2012-11-09 17:22:50 · 683 阅读 · 0 评论 -
Peer管理模块的设计和实现
系统为每个与之建立TCP连接的Peer构造一个Peer结构体。Peer管理模块负责管理由各个Peer结点构成的Peer链表,主要工作是创建结点,添加结点到Peer链表,从Peer链表删除结点等。 Peer结构体中定义了7种状态,分别是:1. Halfshaked(半握手状态):已经发送握手消息但未收到对方的握手消息,或已经接受到对方的握手消息,但已方未发送握手消息。转载 2012-11-09 17:24:46 · 756 阅读 · 0 评论 -
3. 与Tracker交互及peer之间的通信
与Tracker交互主要有两个目的:一是将字节的下载进度告知给Tracker以便Tracker进行一些相关的统计;二是获取当前下载同一个共享文件的peer的IP地址和端口号。 客户端使用HTTP协议与Tracker进行通信。Tracker通过Http Get方法获取请求,如 htttp://myBT.net/announce ?param1=value1¶m2=转载 2012-11-09 17:21:18 · 2700 阅读 · 0 评论