概述 当我们通过bt下载一个文件的时候,有没有想过为什么bt下载会比普通下载要快呢?这中间到底经历了哪些有趣的事情呢?这篇文章将为大家揭晓bt下载的秘密,并且我们将从零开始用golang手写一个bt下载的客户端,其他语言类似。目录本教程将分为两部分来详细介绍bt下载的细节:1.通过示例演示bt下载的基本流程和原理2.使用golang从0开始手写一个bt下载的客户端3.针对客户端的缺点讨论改进方案bt下载原理BitTorrent是一个从互联网下载和分发文件的协议,在传统的client/server架构中,下载者们通常都从一个中心服务器获得一个完整文件内容,但在BitTorrent网络中,下载者们通常从其他人那里下载一个文件的分片,并且分享自己已经下载的分片,这样就构成了一个p2p(peer-to-peer)网络。用图片来描述就是:cs网络和p2p网络概念当我们要通过p2p网络下载一个文件时,我们首先会得到一个.torrent格式的文件,里面包含了要下载的文件的信息:从哪里知道其他人也在下载改文件,文件的指纹信息等。接下来需要解决的问题就是:我们如何找到其他的peers,这就像你想移民但你自己又没有途径,这时候你可以找一个中介,这个中介我们称之为tracker,他记录了peers的通信方式,peer和peer之间可以通过tracker来发现彼此。当我们获得了其他peers的信息之后,就可以和他们进行连接并下载文件了。拥有完整资源的peer都可以做种子。搭建P2P网络因此接下来我们将在本机手动搭建一个p2p网络,用以演示p2p的工作原理。首先需要一个tracker服务器BitCometTracker,peers们可以注册自己到该服务器,其他人从tracker服务器获得peers的列表。接下来需要用两个bt客户端,我们选择BitComet和qBittorrent。uTorrent有广告和流氓软件,所以不用他。1.启动BitCometTracker,启动后会显示使用的端口80802.启动BitComet客户端,点击“文件”-》“制作torrent文件”-》选择一个文件,填写tracker服务器地址为http://127.0.0.1:8080/announce,任务列表中就会出现一个待上传的列表。这个过程俗称“做种”bt种子3.把刚才生成的.torrent文件拷贝到其他目录,启动qbittorrent客户端,在客户端中载入刚才拷贝过来的.torrent文件,可以看到正在下载bt下载好,到现在为止,我们已经了解了BT下载的原理和流程,下篇文章我们将用golang实现一个这样的简易的BT下载客户端。敬请关注!