p2p传输协议详解(程序员面试题之文件传输协议)

在网络上,我们除了浏览新闻,网上购物,聊天等,偶尔还需要下载文件。很多人都有从种子下载视频的经历,种子又是什么东西呢?在程序员面试中,偶尔也会有文件传输相关的面试题,我们今天来看看常见的文件传输相关的协议?

问:

常见的文件传输协议有哪些?

FTP协议默认端口是?FTP的主动/被动模式有什么区别?

P2P文件传输的优点是什么?

什么是去中心化的P2P传输?

一般来说,我们常用HTTP/FTP/P2P等协议进行文件传输,HTTP的话相信大家已经很熟悉了,今天我们来聊一聊FTP协议。

FTP(File Transfer Protocol)文件传输协议,是一种Client/Server架构的文件传输协议。在TCP/IP协议族中属于应用层协议运行于TCP协议之上是一种可靠的传输协议,主要功能用于实现用户间文件分发共享,以及网络管理者在进行设备版本升级、日志下载和配置保存等业务操作时,均会使用到FTP功能。

FTP默认的端口有2个,其中21端口称之为控制端口,20端口称之为数据端口。FTP的工作模式有两种,分别为PORT主动方式与PASV被动方式。我们先来看看这两种方式的工作流程。

主动方式:

  1. 客户端向服务器21端口建立连接,发送请求。
  2. 客户端向服务器发送请求,告知客户端传输数据的端口号A。
  3. 服务器使用20端口与客户端端口A建立连接
  4. 开始传输数据。

被动方式:

  1. 客户端向服务器21端口建立连接,发送请求
  2. 客户端向服务器发送PASV请求,服务器告知服务器数据端口B
  3. 客户端与服务器端口B建立连接
  4. 可是传输数据

综上可知,主动与被动方式的区别,主要是传输数据是谁发起连接的。为什么需要这两种方式呢?很大程度跟防火墙有一定的关系。

事实上,今天FTP的使用场景越来越少了,在我们日常上网体验中,小型文件更多的是使用HTTP进行文件传输,而在大型文件的传输上,更多地使用到例外一个协议P2P传输协议。这是为什么呢?无论是HTTP还是FTP,传输文件都需要占用服务器的大量带宽,大大增加了运营成本。

所以,有一种众人拾柴火焰高的做法,就是P2P协议。每个人下载完数据之后,又能够把数据提供出去,给别人进行下载,成为一个小型的数据节点。

很多人都在网上看到很多人在求种子文件,那么什么是种子文件呢?种子文件上,主要记录两个信息,TrackerUrl与文件件信息。文件信息除了包含常规的文件大小,类型,目录结构等,还包含了这个文件拆分成多少块,每一块的哈希值是多少。

当你使用下载客户端解析完种子文件之后,下载客户端就会到Tracker服务器去问可以到哪些节点上去下载相关的分块。每下载完一个分块之后,会跟种子文件里面的哈希值进行匹配,如果匹配成功,说明该分块数据正确,然后到Tracker服务器进行注册,告诉服务器说,这个分块我已经下载了,后面我可以作为一个数据节点,发光发热,让别人来我这里下载。

很显然,P2P的传输方式大大地减少了服务器的压力,服务器只需要维护哪些分块可以到哪些节点下载就行。但是这种方式下,Tracker节点仍然是一个中心节点,如果Tracker节点故障,就无法正常进行下载服务。

为了解决这个问题,DHT网络应运而生,DHT网络是一个去中心化的网络,主要采用Kademlia协议。在DHT网络中,每个节点除了记录自身的存储情况,还会记录周边邻居的数据存储情况,相当于一个大型的分布式数据库。

这种去中心化的思想,除了在P2P的文件传输,在加密货币中,也被广泛地应用。出于篇幅考虑,我们下次再聊。我们再来总结一下我们最开始的几个问题。

互联网中常见的文件下载协议有HTTP/FTP/P2P等。其中,FTP端口号为20/21端口,FTP有两种工作模式,分别为主动模式与被动模式,区别在于传输连接是由哪一方发起的。

P2P传输协议也有两种模式,一种是简单的中心化Tacker模式,另一种则是去中心化的网络,如DHT。

p2p传输

您可以还会对下面的文章感兴趣

使用微信扫描二维码后

点击右上角发送给好友