应用层-6、FTP

参考哈工大公开课

FTP概述

FTP采用P2P架构,这种架构有利于文件的传输。下面的图一通过取一组值来进行分析随着需要网络传输的客户端增加,需要时间的变化。X轴表示网络申请传输文件的节点。假设文件分布在各个客户端。

图一:需要网络传输的客户端-时间

从图一中可以,随着需要网络传输的客户端增加,C/S架构时间随节点线性增长,P2P架构却增长越来越缓慢。原因是因为采用C/S架构,所有的资源都需要先上传到服务器上,在去服务器上下载;而采用P2P架构,就直接到文件持有客户端进行直接传输,减少了上传的环节,而且也相当于增加了服务器。

 

文件分发:BitTorrent

文件分发是FTP的典型应用,它的大致思想就是服务器维护一张节点列表,你需要资源就去服务器注册获得并节点列表,查询你需要的资源,并获得资源持有客户端的IP,然后建立TCP连接,进行文件传输。

图二:BitTorrent连接示例图

在BitTorrent文件传输中,文件被划分问256KB的chunk进行传输,当一个节点加入torrent,会向tracker注册以获取节点列表,并于某些节点建立连接;节点在下载的同时也会向其他节点上传chunk;在这个过程中每个节点的加入和离开都是随机的,无法控制。

对于chunk的获取,在给定的任一时刻,不同的节点持有文件不同的chunk集合,而且节点会定期查询每个节点所持有的chunk列表。在节点获取chunk的时候,节点会优先请求那些稀缺的节点。

 

对于chunk的发送,每个节点可以向4个邻居发送chunk,而且该节点会优先向正在向它发送chunk节点且速率最快的发送chunk,并且每10秒重新评估一次。每30秒任选一个其他节点发送chunk。

 

 

P2P系统信息索引:

P2P系统信息索引就是找到需要信息的节点位置(IP地址+端口号)。具体可以分两种:文件共享和即时消息。

文件共享(电驴):1、利用索引动态跟踪节点所共享的文件位置;2、节点需要告诉索引它拥有哪些文件;3、需要的节点会搜索索引,从而获知能够得到哪些文件。

即时消息(QQ):1、索引负责将用户名映射到位置;2、当用户开启IM应用时,需要通知索引它的位置;3、节点检索索引,确定目标节点的IP地址。

 

 

索引的三种方式:集中式索引、洪泛式查询、层次式覆盖网络。

集中式索引:

就是直接将索引表存储在一台服务器上,每个节点都在服务器上去注册IP和资源,查询的时候集中去服务器查询,找到之后在用P2P进行传输。这种方式内容和文件传输是用分布式的,但是内容定位是高度集中的。这种方式就有天然的权限:1、单点失效问题,如果存索引表的服务器挂了,那么系统就不能用了;2、性能瓶颈,高并发问题;3、版权问题,服务器容易成为打击对象。

图三:集中式索引实例

洪泛式查询:

这是一个完全分布式架构。这种方式有点类似于图的遍历,每个节点对它共享的文件进行索引,且只对它共享的文件进行索引。当一个节点需要查询资源时,直接想和它已有TCP连接的节点发送查询消息,与它相邻的会查询自己这里有没有,如果有,返回IP,建立连接;如果没有,继续想该被查询的节点已有TCP连接的节点发送查询消息,直到查询到资源,然后再目标节点IP逐个返回。

图四:洪泛式查询实例

洪泛式查询最大的问题就是查询需要多次转发,导致网络资源的消耗。

 

 

层次式覆盖网络

层次式覆盖网络是上述两种方式的结合,它把节点分成超级节点和普通节点,在局部范围内有一个超级节点类似于服务器,存储局部的索引,这个范围内普通节点和超级节点之间采用集中式索引,而各个局部之间采用洪泛式查询。

图五:层次式覆盖网络示例