P2P 协议简介

2017-08-28 linux language

不同于传统的 C/S 服务模型,取消了中心服务器,每个节点都可以作为客户端和服务端。

简介

BitTorrent 实际上是一个协议族,其基本协议是 BEP-3 ,其它的大部分协议都是围绕这个来进行扩展或补充。

如果要通过 P2P 协议进行下载,必须要包含如下的几个文件:

  • 种子文件,一般后缀为 .torrent ,本质上是一个由 bencode 编码的文本文件,把资源分成很多虚拟块,并记录每个块的 hash 值,还包括了文件大小、名字、Tracker服务器等信息。
  • BT 客户端,也就是专门解析 BT 协议的程序,例如迅雷、电驴等。
  • Tracker 服务器,记录着 Peer 和种子相关信息,起着中心调控的作用。

在下载资源的时候,大致的流程如下:

  1. 客户端解码种子文件,得到 Tracker 服务器的地址和资源信息;
  2. 通过和 Tracker 服务器沟通得到其它已经下载该资源的 Peers 信息;
  3. 再和这些 Peers 沟通得到自己想要的部分。

可以看到,在上述的流程中,Tracker 是整个流程的关键部分,如果不能通过 Tracker 读取到 Peers 的相关信息,那么也就无法下载资源。

DHT 协议

为了弥补 Tracker 的单点问题,于是出现了 Distributed Hash Table, DHT 协议,该协议基于 Kademlia 建立。

参考

  • 一个资源嗅探器的网站 bthub.io
  • 官方网站 bittorrent.org 包括了很多相关协议的开发文档。
  • 一个传输可视化的示例网站 mq8.org