應用層-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逐個返回。

圖四:洪泛式查詢實例

洪泛式查詢最大的問題就是查詢需要多次轉發,導致網絡資源的消耗。

 

 

層次式覆蓋網絡

層次式覆蓋網絡是上述兩種方式的結合,它把節點分成超級節點和普通節點,在局部範圍內有一個超級節點類似於服務器,存儲局部的索引,這個範圍內普通節點和超級節點之間採用集中式索引,而各個局部之間採用洪泛式查詢。

圖五:層次式覆蓋網絡示例