下载文件的协议:HTTP、FTP、P2P |
您所在的位置:网站首页 › 视频上传用什么网络协议 › 下载文件的协议:HTTP、FTP、P2P |
另一方面,FTP是为了在特定主机之间“传输”文件而开发的协议。因此,在FTP通信的起始阶段,必须运行通过用户ID和密码确认通信对方的认证程序, FTP下载和HTTP下载的区别之一就在与此。 FTP 的两种工作模式: 每传输一个文件,都要建立一个全新的数据连接。FTP 有两种工作模式,分别是主动模式(PORT)和被动模式(PASV),这些都是站在 FTP 服务器的角度来说的。 P2P无论是 HTTP 的方式,还是 FTP 的方式,都有一个比较大的缺点,就是难以解决单一服务器的带宽压力, 因为它们使用的都是传统的客户端服务器的方式。 后来,一种创新的、称为 P2P 的方式流行起来。P2P就是peer-to-peer。资源开始并不集中地存储在某些设备上,而是分散地存储在多台设备上。这些设备我们姑且称为 peer。 P2P定义 Peer-to-peer 是一类允许一组用户互相连接并直接从用户硬盘上获取文件的网络 Peer-to-peer网络是一个运行于个人电脑上的应用,通过网络在用户间分享文件。P2P网络通过连接个人电脑分享文件而不是通过中央服务器 P2P是一种分布式网络,网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源需要由网络提供服务和内容,能被其它对等节点(peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源(服务和内容)提供者(server),又是资源(服务和内容)获取者(client) P2P特点 无中央服务器,打破了C/S模式 用户之间互联并分享文件。 P2P分类 提供文件和其他内容共享的P2P网络,如Napster、Gnutella、eDonkey、emule、BitTorrent等; 挖掘P2P对等计算能力和存储共享能力,如SETI@home、Avaki、Popular Power等; 基于P2P方式的协同处理与服务共享平台,如JXTA、Magi、Groove、.NET My Service等; 即时通讯交流,包括ICQ、QICQ、Yahoo Messenger等; 安全的P2P通讯与信息共享,如Skype、Crowds、Onion Routing等。 BitTorrent想要下载一个文件的时候,你只要得到那些已经存在了文件的 peer,并和这些 peer 之间,建立点对点的连接,而不需要到中心服务器上,就可以就近下载文件。 一旦下载了文件,你也就成为 peer 中的一员,你旁边的那些机器,也可能会选择从你这里下载文件,所以当你使用 P2P 软件的时候,例如 BitTorrent,往往能够看到,既有下载流量,也有上传的流量,也即你自己也加入了这个 P2P 的网络,自己从别人那里下载,同时也提供给其他人下载。 可以想象,这种方式,参与的人越多,下载速度越快,一切完美。 种子(.torrent)文件但是有一个问题,当你想下载一个文件的时候,怎么知道哪些 peer 有这个文件呢? 这就用到种子啦,也即咱们比较熟悉的.torrent 文件。.torrent 文件由两部分组成,分别是:announce(tracker URL)和文件信息。(tracker谷歌翻译为跟踪器) 文件信息里面有这些内容: info 区:这里指定的是该种子有几个文件、文件有多长、目录结构,以及目录和文件的名字 Name 字段:指定顶层目录名字 每个段的大小:BitTorrent(简称 BT)协议把一个文件分成很多个小段,然后分段下载 段哈希值:将整个种子中,每个段的 SHA-1 哈希值拼在一起工作过程: 下载时,BT 客户端首先解析.torrent 文件,得到 tracker 地址,然后连接 tracker 服务器。 tracker 服务器回应下载者的请求,将其他下载者(包括发布者)的 IP 提供给下载者。 下载者再连接其他下载者,根据.torrent 文件,两者分别对方告知自己已经有的块,然后交换对方没有的数据。此时不需要其他服务器参与,并分散了单个线路上的数据流量,因此减轻了服务器的负担。 这个过程也可以看出,这种方式特别依赖 tracker。tracker 需要收集下载者信息的服务器,并将此信息提供给其他下载者,使下载者们相互连接起来,传输数据。 虽然下载的过程是非中心化的,但是加入这个 P2P 网络的时候,都需要借助 tracker 中心服务器,这个服务器是用来登记有哪些用户在请求哪些资源。 所以,这种工作方式有一个弊端,一旦 tracker 服务器出现故障或者线路遭到屏蔽,BT 工具就无法正常工作了。 去中心化网络(DHT)为了向彻底去中心化迈步前进,后来就有了一种叫作DHT(Distributed Hash Table)的去中心化网络。 每个加入这个 DHT 网络的人,都要负责存储这个网络里的资源信息和其他成员的联系信息,相当于所有人一起构成了一个庞大的分布式存储数据库。 有一种著名的 DHT 协议,叫Kademlia 协议。这个和区块链的概念一样,很抽象。 任何一个 BitTorrent 启动之后,它都有两个角色。一个是peer,监听一个 TCP 端口,用来上传和下载文件,这个角色表明,我这里有某个文件。另一个角色DHT node,监听一个 UDP 的端口,通过这个角色,这个节点加入了一个 DHT 的网络。 在 DHT 网络里面,每一个 DHT node 都有一个 ID。这个 ID 是一个很长的串。每个 DHT node 都有责任掌握一些知识,也就是文件索引,也即它应该知道某些文件是保存在哪些节点上。 它只需要有这些知识就可以了,而它自己本身不一定就是保存这个文件的节点。
学习参考资料:知乎下载文件的协议的回答、P2P协议概述、常见P2P协议之BitTorrent 分析 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |