一、文件传输
前端时间做了和文件传输相关的工作,今天抽空做个总结。总结一下平常使用的几种协议以及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协议
由于FTP协议的安全性相对不高,后来又发展出来SFTP协议。SFTP:SSH文件传输协议(英语:SSHFile Transfer Protocol,也称Secret File Transfer Protocol,中文:安全文件传送协议,英文:Secure FTP或字母缩写:SFTP)是一数据流连接,提供文件访问、传输和管理功能的网络传输协议。SFTP协议是在FTP的基础上对数据进行加密,使得传输的数据相对来说更安全。但是这种安全是以牺牲效率为代价的,也就是说SFTP的传输效率比FTP要低。3、SCP协议
全称Secure Copy协议,是用来定义“本地机器和远端机器之间”或者“远端机器和远端机器之间”传输文件的过程的协议。SCP协议处于OSI(Open System Interconnection)七层体系中的应用层。通常是在linux之间分发文件使用的。scp是secure copy的缩写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。上述三种方式区别:FTP是基于TCP协议传输文件,明文传输文件数据和用户信息;SFTP基于SSH协议,文件加密,可靠性高,可断点续传;SCP基于SSH协议,文件加密,但不可断点续传,由此诞生scp的增强版rsync。4、rsync
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。与scp不同:sync和scp在文件均不存在时,执行时间相差不大,但是文件存在的情况下差异很大。原因是scp是复制:若文件不存在则新建,若存在则覆盖,可以理解为scp为“复制”。而rsync则在文件在存在于两主机时,比较两文件是够相同,相同的话,就什么都不做,若存在差异就直接更新。简单的说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具有非常明显的优势:分发速度快、分发机器多、节省带宽。
缺点也很明显:耗资源,尤其是cpu和内存,那是因为BitTorrent是把文件划分为一个个小文件用于peer之间进行比对。分发文件时,peer之间需要频繁的对自己和其它peer拥有的小文件碎片进行比对,以判断哪些小文件是自己能下载的,以及能上传的,这很耗CPU。并且不断的上传和下载对内存的使用也是一种负担。四、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下载文件):
五、结语
这几个文件分发协议其实各有优劣,没有哪个是完完全全碾压其它协议的。总之,有所得就得有所失。今天大概只是讲了几个文件传输协议的基础原理,并没有很探讨更深入的原理。里面还有很多可讲的点,比如DHT网络,怎么制作一个类似迅雷的软件,这些东西我们下次再聊。
了解新钛云服
招聘:高级运维工程师
新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照
深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资
新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁
新钛云服一周年,完成两轮融资,服务五十多家客户
上海某仓储物流电子商务公司混合云解决方案
新钛云服出品的部分精品技术干货
国内主流公有云VPC使用对比及总结
万字长文:云架构设计原则|附PDF下载
刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!
Ceph OSD故障排除|万字经验总结
七个用于Docker和Kubernetes防护的安全工具
运维人的终身成长,从清单管理开始|万字长文!
OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等
什么是云原生?
IT混合云战略:是什么、为什么,如何构建?