数据通信:BT通信中数据下载的分析和实现

  1 BT通信协议规范标准简述  BT(BitTorrent)通信协议是种基于HTTP分发文件协议由 3部分组成:torrent文件格式、peer和Tracker服务器通信协议、peers的间通信协议

  BT peers开始下载文件资源时首先需要解析该文件资源对应torrent文件torrent文件所有内容是个B-encoding(B编码)字典B编码是种简洁数据组织方式支持4种数据类型: s、egers、lists和dictionaries规则如下:

  ●串类型表示为十进制数串长度加冒号再跟原

  如4:spam就相当于'spam'

  ●整型数据表示为前面加'i'、后面加'e'、中间是十进制数

  如i3e就相当于3i-3e就是-3整型数据没有长度限制;i-0e无效以'i0'表示i0e

  ●列表类型表示为个'l'开头后面跟它所包含项目(已经编码过)最后加个'e'如l4:spam4:eggse就等于['spam''eggs']

  ●字典表示为个'd'开头后面跟个交替关键字(key)及其值对应列表最后加个'e'

  torrent文件格式是由若干字段确定关键字段如表1所示

  表1 torrent文件格式

字段 类型 含义
announce 串 主Tracker服务器URL
announce-list 列表 备用Tracker服务器URL
info 字典 文件摘要信息
creation date 整型 torrent文件创建日期
created by 串 制作torrent文件软件Software名称
encoding 串 发布文件资源名称使用编码方式



  只有announce和info两个字段是必须其它字段都可以省略info字段还可用来确定共享文件资源是由单文件还是由多文件组成:若info字典中有length字段则是单文件结构;若有files字段则是多文件目录结构;length字段和files字段不能同时出现

  Tracker服务器即目录服务器记录所共享文件索引信息及下载该文件用户信息(主要是IP地址及端口号)peer通过和Tracker服务器交互获得当前下载该共享文件其它peers从而可以从其它peers处得到自己想要数据



  图1

  peer和Tracker服务器通信采用HTTP/HTTPS协议可利用TCP连接进行交互peer向Tracker发送个HTTPGET请求并把自己信息放在GET参数中这个请求大致意思是:我是A我想下载X文件IP是IP1我用端口是Port1Tracker服务器对所有peers信息进行维护当它收到个请求后首先把该peer信息记录下来(如果己经记录就检查是否需要更新)然后将部分(数目根据peer请求中设置参数确定)参和下载同个文件peers信息返回给该peer

  最终数据下载由各个peers交互完成peers的间通信采用BT标准Peer Wire 协议(BT对等协议)使用TCP连接

  遵守BT通信协议实体构成交互网络如图1所示

  2 BT通信中数据下载2.1 数据下载原理  若干个peers提供文件共享它们拥有完整文件并将自己信息注册到Tracker服务器上;其它peers每隔定时间和Tracker服务器进行通信报告自己信息并获取其它peers信息peer在收到Tracker响应后和其它peers建立连接下载本地所没有文件数据;为了使其它peers也可以从本地获取文件数据peer还要监听本地某个端口用于接收其它peers连接和数据请求这样每个peer在下载同时也给其它peers上传数据

  举例介绍说明:假设peer A从提供文件共享peers处随机下载了文件X部分peer B则随机下载了文件Y部分这样A就会根据自己情况去向B请求B已经下载好Y部分B也会向A请求A已经下载好X部分这样就减轻了提供文件共享peers负荷也加快了peer A和B下载速度更减少了地域间限制如peer C要连接到提供文件共享peers去下载这个文件速度可能很慢但到A和B上去下载就快多了

  BT通信中所有正在下载某个文件或者已经下好了某个文件但还没有退出该文件下载网络peers都是发送源故下载文件peers越多提供数据上传peers也越多从而每个peers下载速度也越快

  2.2 数据下载实现  当peer从Tracker服务器上查询到其它peers信息后就和其它peers建立TCP连接然后和建立了连接peer进行“两次握手”:

  假设个peer A和peer B建立了连接A立刻利用这个连接向B发送BT对等协议中“握手”消息“握手”消息首先是发送整数19然后发送串“BitTorrent protocol”19即指示该长度;的后发送8个保留字节这些字节当前都设置为0;接下来发送对torrent文件中info信息进行SHA-l加密计算后得到hash值20个字节长;最后发送20个字节peer-id用来标识A自身同样peer B在和ATCP连接建立的后也向A发送BT对等协议“握手”消息A旦接收到B“握手”消息那么它就认为“握手”成功建立了BT对等协议层次上连接A 发送了个消息同时接收了个消息所以这个握手过程是两次“握手”同样对B来说在发送完“握手”消息的后就等待A“握手”消息如果收到那么它也认为对等连接建立了

  旦对等连接建立的后双方就可以通过这个连接传递消息和交互数据了TCP连接两个peers都保持两比特状态信息:是否choked是否erestedchoking是通知对方:没有响应消息会发送除非对方unchoking发生个peer状态变为erested而另peer状态变为unchoking那么两个peers的间数据传输就可以开始了也就是说个peer如果想从它某个peer那里得到数据那么它首先必须将它们的间连接设置为erested即发erested消息过去而另个peer要检查它是否应该给这个peer发送数据如果它对这个peer是unchoking那么就可以给它发数据否则还是不能给它发数据

  peers的间通过bitfield消息互换所拥有共享文件数据块情况个peer知道某个peer拥有自己需要数据块就会向该peer发送request消息请求该数据块所请求数据块通过其它peerpiece消息传送过来;同时该peer响应其它peerrequest消息旦某个peer下载完了个数据块并且也检查了它完整性那么该peer就向它所有peers发送have消息宣布它拥有了这个片断

  3 提高BT数据下载速度策略  以笔者工作中个项目为例该项目是个带下载功能播放器即所谓“BT 盒子”其定位是成为互联网时代取代传统DVD代家庭影视播放机

  该播放器有如下功能:

  ●P2P下载功能;

  ●海量存储浏览、管理功能;

  ●连接局域网内电脑UPnP功能;

  ●连接USB存储设备功能;

  ●高清影视播放功能

  P2P下载是播放器核心功能的播放器内嵌遵守标准BT通信协议下载客户端可以通过互联网直接连接到公司提供网站WebSite上获取和更新电影种子列表笔者负责优化和维护该下载在实际测试中对于如何提高BT数据下载速度积累了些经验:

  1)超时机制

  由于和某个peer的间网络连接可能很慢故要引入超时机制:是连接超时 2是数据块下载超时

  当在某个时间段内没有收到某个peerBT对等协议交互消息时就要断开和该peer连接清除本地维护该peer信息从而避免peer长时间不响应或响应很慢导致内存资源浪费和数据下载效率降低

  为了不频繁写硬盘而占用CPU和损伤硬盘下载维护了个固定大小本地缓存Cache将正在下载中数据块进行缓存CacheBT通信中数据下载以数据块为单位进行只有从某个peer处下载到个完整数据块并通过SHA-1校验后才将该数据块写入硬盘并从本地缓存Cache中删除该数据块本地缓存Cache数据块越多则该时刻正在向其它peers发出数据请求越多从而下载速度也越快如果由于网络连接慢而造成某个数据块要很久才能从peer处下载完则本地缓存Cache就没多少空间去容纳下准备请求数据块从而导致后续数据块请求延迟使得下载速度降低所以需要对每个数据块设置超时超过预定时间就从本地缓存Cache中清除该数据块而去请求下数据块   2)外部服务器加速

  通过上述(1)策略经过和流行BT下载软件SoftwareBitComet对比测试对于同个热门种子BitComet平均下载速度在100KB/s而笔者维护BT下载平均下载速度在40KB/s;对于同冷门种子BitComet平均下载速度在20KB/s直保持速度而笔者维护BT下载平均下载速度在10KB/s下载速度断断续续



  图2

  前面已经提到进行同文件BT下载peers数目越多各个peer下载速度就越快目前使用BitComet下载软件Software用户有数百万计而笔者公司产品正处于测试阶段笔者维护BT下载目前最大用户量仅30这样下载速度比BitComet慢也是正常想在短时期内积累数量可观用户群从而提高下载速度是有难度于是引入外部服务器加速机制即所有我们用户要下载文件先在该外部服务器(也称Cacher服务器)上下载完成当我们用户要下载某个文件时该外部服务器作为个“超级”peer为我们用户提供数据上传由于外部服务器带宽是100Mbps故可为每个下载用户提供至少50KB/s上传速度经过测试使用外部服务器加速后使用我们BT下载个文件任务下载速度可以达到120KB/s构成网络如图2所示

  4 结束语  本文通过对BT通信协议分析详细阐述了其数据下载原理并在此基础上对如何提高BT下载速度做了进介绍最后以笔者实际工作中个项目为例将提高BT下载速度策略运用于实际工作实际工作效果显示下载速度能够较好地满足用户要求

  参考文献  [1]Kurose JRoss K著. 陈鸣译. 计算机网络——自顶向下思路方法和因特网特色(原书第 3版).北京:机械工业出版社2005

  [2]Bittorrent Protocol Specicationv1.0 http//wiki.

  theory.org/BitTorrentSpecieationSep 2006

  [3]汪燕柳斌. BitTorrent协议分析及控制策略. 试验技术和管理2006(1):21

  [4]程久军于魁飞. 种基于P2P(Peer-to-Peer)文件共享应用片段选择算法. 技术通讯Vol.432005

  收稿日期:8月6日  修改日期:8月8日

  作者介绍:李敏(1984-)汉族研究生主要研究方向:计算机网络和信息系统;徐林(1966-)汉族副教授硕士生导师主要研究方向:分布式计算机网络智能信息系统多媒体应用研究等

Tags:  数据通信原理 博达数据通信 jsp实现通信 数据通信

延伸阅读

最新评论

发表评论