天天看點

《c# 實作p2p檔案分享與傳輸系統》 二、 設計

c#實作P2P檔案分享與傳輸系統 

二、設計

  在

上一篇文章

中,介紹了P2P網絡的常用模型,并确定了EasyP2P系統的架構,本文将就此設計完成它的主要結構和運作流程。

1. 首先是Tracker Server和Peer這兩個最重要的子產品:

  • Tracker Server負責Peer的資訊的收集和跟蹤,并向下載下傳節點提供其他節點的資訊,實際上就是維護“Peer<-->Resource”之間的這種映射關系,一般來說,在資料結構上,可以把它設計成一個十字連結清單,當然,也可以用其他結構。當Peer啟動時,向Tracker Server進行彙報,Tracker将資訊存入映射表,當Peer退出時,從映射表中清除。
  • Peer主要是驅動下載下傳,當需要下載下傳資源時,向Tracker Server送出要下載下傳的資源資訊,Tracker查詢之後,傳回擁有該資源所的節點清單,Peer便可向其他的節點請求并下載下傳資料,完成p2p下載下傳。

上圖:

《c# 實作p2p檔案分享與傳輸系統》 二、 設計

2. 檔案描述

  P2P系統另一個非常關鍵的部分就是資源(檔案)描述符,它提供某個資源(檔案)的簡短而詳細的描述資訊。

  • 首先,一個資源需要進行辨別,以差別于其他資源,每個不同的資源都有不同的辨別,這裡,我們以資源的MD5值來作為該資源的辨別(ID)。計算方式是:ID = MD5Hash(資源的所有資料)。
  • 其次,為了支援斷點續傳以及利于p2p傳輸,需要對資源進行分塊描述。一個完整的資源(檔案)可以從邏輯上分為多個“塊”,通過對“塊”的标志,可以從更細的粒度來描述資源健康程度(也就是下載下傳進度);通過對每個“塊”進行校驗,還能從更細的粒度防止髒資料對p2p網絡的污染。

  之是以說檔案描述非常重要,是因為它幾乎貫穿了整個p2p傳輸的過程。一個設計良好的檔案描述符,不僅可以詳細的辨別資源健康度,還能夠通過适當的壓縮算法節省存儲空間。

《c# 實作p2p檔案分享與傳輸系統》 二、 設計

  在上圖中,我設計了一個雙層的檔案描述符,Segment層描述整個資源/檔案,用于資料校驗;Piece層描述一個Segment,用于細化描述。這樣做的好處有兩個:一是簡化了校驗資訊的粒度,在peer之間隻需要傳遞segment的描述即可;二是由于我們隻需要對正在下載下傳的Segment進行描述,是以檔案描述符不會占用多少存儲空間。

  考慮到NAT Server的特殊性,将單獨介紹。

《c# 實作p2p檔案分享與傳輸系統》 二、 設計

文章版權所有,如需轉載,請注明作者和出處,謝謝~

繼續閱讀