2009-08-21 14:36

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

关键字: Redeployment zlib 单态 AOP LightboxBT通信技术作为一种优秀的P2P下载技术,在目前的文件共享方面的作用越来越重要。本文对BT通信协议规范进行简单概述,分析了BT通信中数据下载的原理和实现方式。笔者结合自身实际工作中的经验,介绍了BT通信中提高数据下载速度的策略。1 BT通信协议规范简述

  BT(BitTorrent)通信协议是一种基于HTTP的分发文件的协议,由三部分组成:torrent文件格式、peer与Tracker服务器的通信协议、peers之间的通信协议。

  ●字符串类型,表示为十进制数的字符串长度加冒号再跟原字符串。

  如4:spam就相当于'spam'。

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

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

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

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

  表1 torrent文件格式

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

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

图1

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

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

  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在与A的TCP连接建立之后,也向A发送BT对等协议的“握手”消息。A一旦接收到B的“握手”消息,那么它就认为“握手”成功,建立了BT对等协议层 次上的连接。A 发送了一个消息,同时接收了一个消息,所以这个握手过程是两次“握手”。同样,对B来说,在发送完“握手”消息之后,就等待A的“握手”消息,如果收到, 那么它也认为对等连接建立了。

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

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

  该播放器有如下功能:

  ●P2P下载功能;

  ●连接USB存储设备功能;

  ●高清影视播放功能。

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

  1)超时机制

  由于与某个peer之间的网络连接可能很慢,故要引入超时机制:一是连接超时,二是数据块下载超时。

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

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

  2)外部服务器加速

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


图2

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

  4 结束语

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

参考文献

  [1]Kurose J,Ross K著. 陈鸣译. 计算机网络——自顶向下方法与因特网特色(原书第三版).北京:机械工业出版社,2005

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

  theory.org/BitTorrentSpecifieation,Sep 2006

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

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

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

BT通信中数据下载的分析和实现相关推荐

  1. 【电信学】【2015.05】5G通信中降低峰均比的分析

    本文为印度Rourkela国立技术研究所(作者:RAHUL GOPAL)的硕士论文,共79页. 本文目的是分析5G通信中降低峰均比的性能.5G通信超越了4G和LTE技术,预计在2020年左右投入使用. ...

  2. DSP在通信中的应用及分析

    在当前的DSP市场上,通信设备应用的最多户,以下给大家介绍其中的几个例子: (1)数字式蜂房系统 数字式蜂房系统使用通用DSP来实现语音合成(speech synthesis).纠错编码(error- ...

  3. java flash 压缩_Java和flash通信中数据的zlib压缩与解压缩

    由于as3的bytearray支持compress和uncompress.所以我们可以在Java端将数据压缩,然后在flash端读取再解压缩,这样数据在传输过程中又会小很多. 下面就介绍使用方法,基于 ...

  4. STM32串口通信中的USART_RecieveData函数分析

    拿这个中断函数为例 void USART1_IRQHandler() {u8 rec;if(USART_GetITStatus(USART1,USART_IT_RXNE)){rec = USART_R ...

  5. 全球及中国通信中的量子计算行业十四五规划方向与运营前景研究报告2022版

    全球及中国通信中的量子计算行业十四五规划方向与运营前景研究报告2022版 --------------------------------------- [修订日期]:2021年12月 [搜索鸿晟信合 ...

  6. 国外14亿泄露数据下载及还原

    国外14亿泄露数据下载及还原 simeon 2018年6月10日freebuf发布了篇文章<14亿邮箱泄露密码明文信息查询网站惊现网络>(链接地址:http://www.freebuf.c ...

  7. tcga数据下载_肿瘤研究不能不知道的TCGA数据库挖掘工具大全,TCGA再也不愁

    TCGA数据库的挖掘工具层出不穷,从数据下载到数据挖掘,这里小编给大家整理一份官网的数据挖掘工具大全: 1. http://www.cancerimagingarchive.net/ The Canc ...

  8. ASF网站使用教程——Sentinel-1数据下载为例

    网址:ASF Data Search (alaska.edu) 1.搜索方式选择 单击左上角Search Type可以选用搜索方式 可以按地理位置.名称.时空基线及事件进行搜索,还可以搜索数据集 一下 ...

  9. GRACE卫星介绍与解密数据下载

    1 简介 1.1 基本信息 GRACE ,Gravity Recovery and Climate Experiment,由 NASA 和德国宇航中心(DLR)联合研制,于 2002 年 3 月 17 ...

最新文章

  1. php 利用debug_backtrace方法跟踪代码调用
  2. Java多重链表_Java实现 LeetCode 143 重排链表
  3. html留言回复评论页面模板,HTML5实现留言和回复的页面样式
  4. html中如何让三个方块并排,html – 并排设置两个div,然后设置第三个div
  5. ahp层次分析法软件_层次分析法在历史街区研究中的应用简析
  6. 符合我公司GIS开源解决方案的探讨
  7. ndnsim r语言 ubuntu_Python语言---数据库
  8. ubuntu 下一个神奇的命令--以窗口形式打开某个文件夹
  9. Win10 桌面图标出现空文件夹的删除及桌面图标排列问题
  10. Centos7配置ssh、rsh免密互信集群服务
  11. SQLServer 2008以上误操作数据库恢复方法——日志尾部备份
  12. HTML和CSS实现图片翻转效果
  13. Android 9.0 (P)
  14. 微信支付应用签名修改后多久可以生效?
  15. 上饶师范学院C语言试卷,13级普通科试卷A卷.doc
  16. 使用UnrealPak.exe创建Pak文件
  17. 事业单位招聘计算机类面试自我介绍,2019事业单位面试自我介绍范文
  18. MTK平台驱动基本介绍-2
  19. jhead修改exif的CMD
  20. 使用 JavaScript 进行井字游戏:创建棋盘类

热门文章

  1. 游戏行业面貌不断变化,打破长久以来刻板印象
  2. 【技术晨读】EAV or JSON
  3. win10从旧的固态硬盘迁移系统到新的固态硬盘,开机黑屏LOGO处转圈,并启动不了,已解决,特写此贴,供急需解决该问题的有缘人参考!
  4. 保研之路——北大工学院生物医学工程系夏令营
  5. Java基础复习总结笔记(上)
  6. 基于微信云开发的商家转账至零钱
  7. redis实战第七篇 使用redis工具(redis-cli)搭建redis cluster
  8. 自动创建图片库、文档库
  9. D. Fixed Point Guessing
  10. 交互题 XOR Guessing