本篇学习笔记以HTTP、FTP、P2P叙述与网上下载文件有关的协议node
须要掌握的要点:算法
首先简述HTTP下载和FTP下载的区别:数据库
咱们先要知道,使用Web浏览器时,这两个协议之间的差别几乎不会对使用的方便性及下载时间产生影响。不过,二者却拥有各自不一样的结构。浏览器
FTP即文件传输协议安全
FTP 采用两个 TCP 链接来传输一个文件。服务器
另外一方面,FTP是为了在特定主机之间“传输”文件而开发的协议。所以,在FTP通讯的起始阶段,必须运行经过用户ID和密码确认通讯对方的认证程序,网络
FTP下载和HTTP下载的区别之一就在与此。app
FTP 的两种工做模式:分布式
每传输一个文件,都要创建一个全新的数据链接。FTP 有两种工做模式,分别是主动模式(PORT)和被动模式(PASV),这些都是站在 FTP 服务器的角度来讲的。工具
不管是 HTTP 的方式,仍是 FTP 的方式,都有一个比较大的缺点,就是难以解决单一服务器的带宽压力, 由于它们使用的都是传统的客户端服务器的方式。
后来,一种创新的、称为 P2P 的方式流行起来。P2P就是peer-to-peer。资源开始并不集中地存储在某些设备上,而是分散地存储在多台设备上。这些设备咱们姑且称为 peer。
想要下载一个文件的时候,你只要获得那些已经存在了文件的 peer,并和这些 peer 之间,创建点对点的链接,而不须要到中心服务器上,就能够就近下载文件。
一旦下载了文件,你也就成为 peer 中的一员,你旁边的那些机器,也可能会选择从你这里下载文件,因此当你使用 P2P 软件的时候,例如 BitTorrent,每每可以看到,既有下载流量,也有上传的流量,也即你本身也加入了这个 P2P 的网络,本身从别人那里下载,同时也提供给其余人下载。
能够想象,这种方式,参与的人越多,下载速度越快,一切完美。
可是有一个问题,当你想下载一个文件的时候,怎么知道哪些 peer 有这个文件呢? 这就用到种子啦,也即我们比较熟悉的.torrent 文件。.torrent 文件由两部分组成,分别是:announce(tracker URL)和文件信息。(tracker谷歌翻译为跟踪器)
文件信息里面有这些内容:
工做过程:
此时不须要其余服务器参与,并分散了单个线路上的数据流量,所以减轻了服务器的负担。
这个过程也能够看出,这种方式特别依赖 tracker。tracker 须要收集下载者信息的服务器,并将此信息提供给其余下载者,使下载者们相互链接起来,传输数据。
虽然下载的过程是非中心化的,可是加入这个 P2P 网络的时候,都须要借助 tracker 中心服务器,这个服务器是用来登记有哪些用户在请求哪些资源。
因此,这种工做方式有一个弊端,一旦 tracker 服务器出现故障或者线路遭到屏蔽,BT 工具就没法正常工做了。
为了向完全去中心化迈步前进,后来就有了一种叫做DHT(Distributed Hash Table)的去中心化网络。
每一个加入这个 DHT 网络的人,都要负责存储这个网络里的资源信息和其余成员的联系信息,至关于全部人一块儿构成了一个庞大的分布式存储数据库。
有一种著名的 DHT 协议,叫Kademlia 协议。这个和区块链的概念同样,很抽象。
任何一个 BitTorrent 启动以后,它都有两个角色。一个是peer,监听一个 TCP 端口,用来上传和下载文件,这个角色代表,我这里有某个文件。另外一个角色DHT node,监听一个 UDP 的端口,经过这个角色,这个节点加入了一个 DHT 的网络。
在 DHT 网络里面,每个 DHT node 都有一个 ID。这个 ID 是一个很长的串。每一个 DHT node 都有责任掌握一些知识,也就是文件索引,也即它应该知道某些文件是保存在哪些节点上。
它只须要有这些知识就能够了,而它本身自己不必定就是保存这个文件的节点。