一、文件传输
前端时间做了和文件传输相关的工作,今天抽空做个总结。总结一下平常使用的几种协议以及BtTorrent协议。其实BitTorrent协议也不是什么新协议,它诞生也十几年了。咱也蹭个热点,最近几年大火的区块链技术也和BitTorrent协议有着异曲同工之处,都是p2p。话不多说,先介绍几种传统的文件传输协议:
1、FTP协议
FTP,File Transfer Protocol的简写,文件传输协议,属于TCP/IP协议之一。包含两个部分:FTP服务器和FTP客户端。
FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源,包括上传和下载。
通常情况下,FTP传输效率非常高,一般网络上传输大的文件时,也采用该协议。
不过,FTP毕竟已经诞生40多年了,许多厂商已经考虑不再支持FTP了。
据悉,Chrome浏览器开发者正讨论逐步放弃对FTP协议的支持。即将生效的一个变化是,部分FTP文件将不再提供页面预览,而是直接跳转下载。这是弱化FTP协议并最终取消的开端,Chrome开发者们对维护文件服务器目录也已经厌倦了,况且还有安全问题。
另外,Mozilla也早有类似弱化FTP的讨论,预计Firefox也将追随Chrome的脚步。
FTP协议有一些难以改善的缺点,尤其是密码和文件内容都使用明文传输而容易被窃听、传输大量小文件时效果不好等,很早之前,有将SSL证书应用到FTP上的讨论,但最终,开发者们认为继续为FTP增加代码已经没有必要,倒不如扫入回收站。如今,P2P点对点协议已经在很大程度上成为如今互联网文件传输的主流。
2、SFTP协议
3、SCP协议
4、rsync
二、BitTorrent协议
1、简介
BitTorrent是一种内容分发协议,由布拉姆·科恩2001年自主开发。
一般的下载服务器为每一个发出下载请求的用户提供下载服务,而BitTorrent的工作方式与之不同。文件的持有者将文件发送给其中一名用户,再由这名用户转发给其它用户,用户之间相互转发自己所拥有的文件部分,直到每个用户的下载都全部完成。这种方法可以使下载服务器同时处理多个大体积文件的下载请求,而无须占用大量带宽。
简而言之:资源不再由一个服务器提供,而是所有下载文件的服务器提供。服务器既是下载者,也是上传者。参与者越多,速度也快!
原理:制作目标文件的种子文件或者磁力链接(其中会把目标文件分成若干个碎片文件),下载者通过种子文件或磁力链接,去tracker服务器或DHT网络下载文件,同时获取其它下载该文件的下载者信息。此时,每一个下载者不光能从文件源服务器处下载文件,也能从其它下载者处获取文件。
传统文件传输方式与p2p模式对比:
1)传统文件传输方式:
传统文件传输方式,比如FTP、SCP、RSYNC等都是一对一传输,如下图所示。这种方式对于下载者少是很好的,但是如果下载者多了,对服务器来说就是一种负担了,占带宽并且速度慢,这种方式是串行的。
2)p2p分发文件方式:
BitTorrent协议就归属于P2P分发方式,p2p文件分发上面已经说过,就是peer-to-peer。每一个peer既是下载者也是上传者,peer下载的同时也会向其它的peer提供上传服务。甚至在下载完毕的时候,也会向其它peer再提供一段时间的上传服务。如下图所示:
2、架构
BitTorrent架构主要包括:Tracker服务器(或者DHT网络)、种子解析文件服务器、以及下载者BTclient。
Tracker服务器:一个BTclient在开始下载以及下载进行的过程中,要不断与tracker服务器进行通信,并报告自己的信息,同时获取其它BTclient的信息。这种通信是基于HTTP协议的,故又称之为tracker HTTP协议。不过这种方式弊端还是比较大的,如果Tracker服务器一旦挂掉,BTclient就不能继续下载文件了。由此,后来者又发明了DHT网络,这我们之后的文章会讲。
备注:
P2P文件分发是有几个阶段的,最早是使用Tracker服务器作为BTclient信息的交换网络。后来因为Tracker的局限性,又发展处DHT网络以及混合型P2P网络。
种子解析文件服务器:该服务器通常的作用就是把文件制作成种子文件,并且一直提供该文件的上传服务,BTclient通过Tracker服务器找到它,并从中下载文件。
下载者BTclient,其实就是下载的用户,用户通过相应的软件去对应地址下载文件。
它们之间的关系如下:
三、BitTorrent优缺点
有得就有失,这个世界没有什么是只有好处没有坏处的,技术发展也一样。BitTorrent具有非常明显的优势:分发速度快、分发机器多、节省带宽。
四、BitTorrent的python实现
1、使用python-libtorrent
Python-libtorrent模块是一个使用python语言编写的BitTorrent模块,使用它可以制作BT种子,以及根据种子下载文件。和OpenTracker结合起来可以搭建一整套BT环境。篇幅所限,就不在此赘述了,有兴趣者可以百度自行搜索。
2、murder
除了使用python-libtorrent外,我们还可以使用相对便捷的murder。murder是twitter开源的一款产品,比较成熟,不需要python-libtorrent那样还需要自己写程序,非程序员可以考虑使用它。而且里面包含了上述所有的组件。方便快捷,具体安装和使用方式如下:
1)tracker服务器安装:
2)seeder生成种子以及开启种子解析文件服务器:
3)peer节点下载文件(BTclient下载文件):
五、结语
了解新钛云服