引言

之前我这边在生产环境中使用 Murder 软件的 BT 上传下载的方式来实现大文件的快速分发。
这属于 BT 软件的应用。最近重新看了下 BT 协议的分析与实现,现在重新了解下 BT 协议原理。

BitTorrent 原理简述

与传统客户端/服务器网络通信模式不同,对等方到对等方(P2P)通信模式在近年来越来越流行起来。
在 P2P 模式中,服务和资源分布化,资源不集中存储在某些设备上,而是分散存储在运行 P2P 程序的设备上,
每一个对等方都可以为其他对等方提供服务。
BitTorrent(中文全称比特流,简称 BT)是一个网络文件传输协议,是能够实现点对点文件分享的技术。
在大多数人感觉中与 P2P 成了对等的一组概念,而它也将 P2P 技术发展到了近乎完美的地步。
研究 BitTorrent 协议对我们深入把握 P2P 技术,了解 Interent 网络发展的未来走向有很大的意义。
BitTorrent 协议是架构于 TCP/IP 协议之上的一个 P2P 文件传输协议,处于 TCP/IP 结构的应用层。
BitTorrent 协议本身也包含了很多具体的内容协议和扩展协议,并在不断扩充中。
如果有多个下载者并发的下载同一个文件,则每个下载者也同时为其它下载者上传文件,
这样,文件源可以支持大量的用户进行下载,而只带来适当的负载的增长。BitTorrent 协议把提供下载的文件虚拟分成大小相等的块,块大小必须为 2k 的整数次方
(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和 Hash 验证码
写入 .torrent 文件(即种子文件,也简称为“种子”)中,作为被下载文件的“索引”。
下载者要下载文件内容,需要先得到相应的 .torrent 文件,然后使用 BT 客户端软件进行下载。 下载时,BT 客户端首先解析 .torrent 文件得到 Tracker 地址,然后连接 Tracker 服务器。
Tracker 服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的 IP。
或者,BT客户端也可解析 .torrent 文件得到 nodes 路由表,然后连接路由表中的有效节点,
由网络节点提供下载者其他下载者的 IP。下载者再连接其他下载者,根据 .torrent 文件,两者分别对方告知自己已经有的块,
然后交换对方没有的数据。此时不需要其他服务器参或者其他网络节点的参与,
分散了单个线路上的数据流量,因此减轻了服务器负担。
下载者每得到一个块,需要算出下载块的 Hash 验证码与 .torrent 文件中的对比,
如果一样则说明块正确,不一样则需要重新下载这个块。因此,下载的人越多,提供的带宽也越多,种子也会越来越多,下载速度就越快。从 BT 客户端角度考虑,下载原理分为以下几步:一.根据 BitTorrent 协议,文件发布者会根据要发布的文件生成提供一个 .torrent 文件。
客户端可从 Web 服务器上下载种子文件,并从中得到 Tracker 服务器 URL 和 DHT 网络 nodes 等信息。二.根据 Tracker URL 与 Tracker 服务器建立连接,并从服务器上得到 Peers 信息。
或者根据 nodes 与 DHT 网络中节点通信,并从节点上得到 Peers 信息。三.根据 Peers 信息与一个 Peer 建立连接,依据 Peer wire 协议完成握手,
并从 Peer 端下载数据文件。同时监听 Peer 的连接,并给 Peer 上传数据文件。依据得到 Peers 信息的途径的不同,可分为使用 Tracker 服务器和使用 Trackerless DHT 网络两种方式。基于 HTTP 的 Tracker 协议,
基于 UDP 的 Trackerless 协议,
基于 TCP 的 Peer wire 协议。

BitTorrent 原理简介相关推荐

  1. Kademlia协议原理简介V1.1

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   Kadem ...

  2. javascript原理_JavaScript程序包管理器工作原理简介

    javascript原理 by Shubheksha 通过Shubheksha JavaScript程序包管理器工作原理简介 (An introduction to how JavaScript pa ...

  3. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  4. DeepLearning tutorial(1)Softmax回归原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...

  5. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...

  6. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

  7. 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )

    文章目录 一.主线程中的 Handler 与 Looper 二.Handler 原理简介 一.主线程中的 Handler 与 Looper Android 系统中 , 点击图标启动一个应用进程 , 就 ...

  8. 量子计算机编程原理简介 和 机器学习

    量子计算机编程原理简介 和 机器学习 本文翻译自D-Wave公司网站 www.dwavesys.com/en/dev-tutorial-intro.html D-wave公司在2007年就声称实现了1 ...

  9. DL之CNN:卷积神经网络算法简介之原理简介——CNN网络的3D可视化(LeNet-5为例可视化)

    DL之CNN:卷积神经网络算法简介之原理简介--CNN网络的3D可视化(LeNet-5为例可视化) CNN网络的3D可视化 3D可视化地址:http://scs.ryerson.ca/~aharley ...

  10. DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图)、七大层级结构(动态图详解卷积/池化+方块法理解卷积运算)、CNN各层作用及其可视化等之详细攻略

    DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图).七大层级结构(动态图详解卷积/池化+方块法理解卷积运算).CNN各层作用及其可视化等之详细攻略 目录 CNN 的层级结构及相关概念 ...

最新文章

  1. GPU模拟猴子大脑,普通台式机变超算,英国大学研究登上Nature子刊
  2. 白话Elasticsearch16-深度探秘搜索技术之使用原生cross-fiedls技术解决搜索弊端
  3. c++实现全局优化的了望算法
  4. 网易超分黑科技来了!全新移动端视频体验时代来临
  5. 谷歌大中华区总裁李开复今日离职
  6. 12位故去的国家最高科技奖得主:科学寰宇,那些永不陨落的“星”
  7. 安卓实训项目:贪吃蛇V1.0
  8. ubuntu18.04 没声音解决方案(坑自己版)
  9. 进程控制(PCB,进程ID,进程状态,fork函数,文件共享)
  10. Apache Spark技术实战之7 -- CassandraRDD高并发数据读取实现剖析
  11. mysql5.5默认引擎,在MySQL5.5以上系统中,默认的存储引擎是( )。
  12. 《Redis开发与运维》笔记-复制
  13. Django前端使用ECharts完成数据可视化
  14. 关于跑步,总感觉得写点什么!
  15. php nginx 伪静态规则,常见PHP程序的Nginx 伪静态规则
  16. <aop:aspectj-autoproxy />作用
  17. 2017滴滴校招编程
  18. 电脑鸿蒙系统怎么连接无线网络,手提电脑怎样连接WiFi?
  19. “21天好习惯“ 第十九期 — 19之黑马面面移动端布局(暂时完结)
  20. 达内学员就业率远超名校大学生就业率

热门文章

  1. Javaer换坑指南之Linux
  2. 如何添加油猴脚本用以模拟点击网页按钮
  3. firefox插件使用:hackbar
  4. su 与 su - 的区别
  5. javascript Date format(js日期格式化)
  6. Android intent category大全
  7. Usability: Rules and Principle
  8. 个人博客logo如何设计?案例合集参考
  9. 【Python 3.7】序数:序数表示位置,如 1st和 2nd。大多数序数都以 th结尾,只有 1、2和 3 例外。
  10. 黑盒测试具体有哪些操作步骤?