尚佳佳,霍 如,耿麗萍,汪 碩,3,黃 韜,3
(1.北京郵電大學 網絡與交換技術國家重點實驗室,北京 100876;2.北京工業大學 信息學部,北京 100124;3.紫金山實驗室,南京 211111;4.中國人民解放軍61932 部隊,北京 100088)
傳統的區塊鏈技術大多在P2P(Peer-to-Peer)網絡中基于TCP 網絡架構[1]并通過應用層多播實現數據傳輸,而且不同終端節點對于同一個數據內容的請求相互獨立,導致網絡中存在大量冗余流量以及較高的數據傳輸時延[2]。命名數據網絡(Named Data Networking,NDN)將IP 網絡沙漏模型的細腰部分更換為內容名稱,基于內容名稱進行數據傳輸,其關注點在于內容本身,和區塊鏈的設計思想(即隱藏交易各方信息,公開透明交易內容)相符合。區塊鏈技術已廣泛應用于金融、智慧醫療、智能電網等場景:資金跨境支付結算[3]需要多個中間機構合作構建匯款通道以完成支付結算,其中涉及多個參與方,該過程需要保障支付結算的安全性和隱私性[4];金融行業對交易實時性要求較高,需要實現較低的時延[5];智慧城市關注居民、設施等各類數據的收集、分析和處理,要求保障數據安全和用戶隱私。在實際應用中,需要針對不同場景差異化的服務質量(Quality of Service,QoS)需求來設計有針對性的解決方案。
本文提出一種基于NDN 的區塊鏈網絡QoS 保障方法。為滿足實時性要求,將交易和區塊分為時延較敏感和時延較不敏感2 種類型,設計新的命名空間,為不同類型的區塊鏈數據創建各自的數據傳播結構。在此基礎上,針對不同應用場景對實時性和QoS 的不同要求,采用差異化路由機制對交易和區塊分別進行排隊轉發。
區塊鏈中的各節點具有分布式、對等的特性,因此,一般采用P2P 網絡來組織負責數據驗證和記賬的節點[6]。P2P 網絡中的每個節點地位均等,不存在任何中心化的節點或者特殊節點和結構,每個節點都可以進行交易驗證、交易傳播、區塊驗證、區塊傳播等。
區塊鏈節點在網絡中進行交易(區塊)的分發和接收,并且通過一系列的驗證機制[6]驗證交易(區塊)的有效性。區塊鏈系統的交易(區塊)傳播機制主要包括以下步驟:
1)區塊鏈節點將新生成的交易廣播給鄰居節點,鄰居節點收到后繼續廣播。
2)每個節點將在網絡中廣播的交易收集到區塊中,并且基于自身算力尋找一個難度與自身算力相匹配的工作量證明[7],算力較弱的節點會相互合作建立礦池,匯聚算力以共同解決一個難題,在找到工作量證明之后即全網廣播該區塊。
3)網絡中的其他節點在收到區塊后對區塊中包含的交易進行驗證,當且僅當區塊中包含的所有交易都是有效的并且之前沒有存在過,才認為該區塊有效。
4)在驗證區塊有效之后,其他節點接受該區塊并在該區塊末尾產生新塊延長鏈。
NDN 基于數據內容名稱進行路由轉發,每個數據分組對應唯一的內容名稱[3]。節點若要接收特定的內容,需要主動向網絡中發送對該內容的興趣請求,即“訂閱”該內容,內容擁有者或者緩存有該內容的路由器節點接收到興趣請求后[8],則將該內容按照請求分組路由方向的反方向發送給請求者。
NDN 分組類型具體如下:
1)請求分組(興趣包)。請求分組為內容請求者向內容擁有者發送的用于請求特定內容的分組[9]。請求分組模型包含內容名、選擇器和隨機數。
2)數據分組(數據包)。數據分組為內容源或內容緩存者響應內容請求者的請求向請求者返回的內容,數據傳輸路徑按照請求分組傳輸路徑的反方向進行[10]。數據分組模型包含內容名、簽名、署名信息和數據內容。
NDN 數據結構具體如下:
1)內容存儲(Content Store,CS)。CS 結構由數據內容名稱和數據2 個條目構成,其緩存節點收到的數據分組內容[11]。網絡中存在大量關于相同數據內容的請求,CS 的存在能讓后續請求相同內容的節點得到快速及時的響應。
2)待定興趣表(Pending Interest Table,PIT)。PIT記錄已經轉發出去但沒有收到響應的請求分組的內容名稱及其到來的路由器接口[12],將經過同一個路由器節點并請求相同內容的請求分組匯聚在一個表項中,對同一內容的請求,僅轉發一次對該內容的請求分組,無需重復轉發。在數據分組回傳過程中,PIT 表中有該內容名稱的路由器將該內容緩存在CS 中[13],后續其他節點請求該內容時直接由擁有該內容的鄰近路由器返回即可,無需再次向內容生產者請求。
3)轉發信息庫(Forwarding Information Base,FIB)。FIB 包含名稱前綴和接口列表2 個條目,其和TCP/IP網絡體系架構中的路由表類似,依靠路由協議生成[14],記錄從當前路由器節點通往內容生成者或內容緩存節點的路徑上的下一跳接口。
然而,區塊鏈基于內容擁有者主動推送的“推”模式與NDN 基于內容請求者主動請求的“拉”模式互不兼容。文獻[7]在NDN 上啟動區塊鏈應用程序,將交易包含在興趣包中支持交易的實時廣播,使用“訂閱-推送”來支持區塊的廣播,礦工執行訂閱操作,區塊生成之后所有訂閱的礦工就會收到該區塊。文獻[8]通過“發布-訂閱”模式兼容區塊鏈,采用分層的命名空間實現流量隔離。文獻[9]引入分層命名機制并實現區塊的批量同步。以上方法解決了區塊鏈和NDN 的兼容問題,并針對數據同步等需求提出解決方案,但是沒有考慮到不同應用場景差異化的QoS 需求。為滿足應用場景的實時性要求,本文對傳統的命名空間進行改進,在NDN 中路由轉發時即可基于數據名稱中的實時性要求標識采用差異化的路由策略;通過為每種類型的數據創建專屬的數據傳播結構來降低流量集中化程度,使得流量均勻地分布于網絡各處,提高網絡資源的利用率;采用差異化的路由機制對區塊鏈各類型數據分別進行路由轉發,從而滿足不同應用場景差異化的QoS 需求。
現有在NDN 上部署區塊鏈的方法僅利用NDN的一些特性對區塊鏈進行局部優化(如重新設計命名空間),區塊鏈與NDN 的融合程度還有待提高。此外,差異化服務的思想在TCP/IP 體系下已經非常成熟[15],且表現出較好的性能。隨著NDN 技術的發展,當區塊鏈建立在NDN 上時,也應具備更加精細的差異化服務,而這一方面目前較少有針對性的研究。因此,本文提出一種能夠提供差異化服務的解決方案,以完善區塊鏈業務。
針對不同應用場景提供差異化的QoS 保障可以發揮以下作用:
1)優化網絡資源分配。NDN 基礎設施通常帶寬有限[16],為區塊鏈建立專用的NDN 網絡并不能在實際中得到應用,因此,有必要為其在網絡層面提供差異化服務,從而緩解區塊鏈業務給NDN 設備帶來的處理壓力。
2)提高區塊鏈的性能。基于TCP 的區塊鏈難以提供對多播的內置支持[17],導致在同質節點之間建立連接需要較長的同步時間,而且交易的驗證、分發等會導致大量的數據開銷,極大地限制了區塊鏈的性能,而差異化服務可以在一定程度上打破這種限制。
3)提高安全性和可拓展性。區塊鏈業務通常對實時性有不同的要求[18],優先保證部分時延較敏感的業務可以提升區塊鏈整體的安全性、穩定性和可擴展性。
基于以上分析,本文提出一種基于NDN 的區塊鏈差異化QoS 保障機制,其結構如圖1 所示。在網絡層為不同類別的流量創建數據傳播結構使得流量均勻地分布于網絡各處[11],對支撐的業務進行更細粒度的劃分,主要從實時性要求角度將交易和區塊進行劃分,對這些交易和區塊采取排隊轉發的路由機制,以滿足不同應用場景差異化的QoS 需求。

圖1 QoS 保障機制結構示意圖Fig.1 Structure diagram of QoS assurance mechanism
本文差異化QoS 保障方法首先從實時性要求角度設計分層的命名空間;其次為不同類型的交易或者區塊創建數據傳播結構,使網絡中的流量盡可能分散在網絡各處;最后設計一種差異化的路由排隊機制以及兼容NDN 和區塊鏈不同模式的信息傳輸機制。
NDN 中基于內容名稱進行數據內容路由,本文在區塊鏈交易和區塊的命名中添加“差異化服務”字段來區分類別。數據在網絡中路由時基于各自的數據傳播結構,在檢索時基于交易名稱或者區塊名稱,同時路由器根據數據名稱識別服務類型。因此,為滿足路由、檢索和服務類型識別這3 個需求,數據的名稱需要包括以下3 個部分:
1)類別標識符(Category Identifier,CID)。CID
2)服務標識符(Service Identifier,SID)。本文主要從服務的實時性要求角度(即時延敏感角度)對QoS 需求進行劃分,因此,SID 的取值有時延較敏感(Delay Sensitive,DS)和時延較不敏感(Delay Less Sensitive,DLS)2 種。路由器根據數據內容名稱中的SID 字段區分識別數據內容的實時性要求,然后進行差異化的路由處理。
3)檢索標識符(Retrieval Identifier,RID)。考慮到在同一個數據傳播結構上傳播的可能是交易也可能是區塊,因此,在命名中添加區分字段
因此,本文數據內容按照
大多數區塊鏈網絡都是基于P2P 網絡的應用層多播而實現的[19],即節點之間直接在邏輯拓撲上建立連接,缺乏對基礎網絡物理拓撲的考慮,導致上層流量與底層物理網絡拓撲之間不匹配[12]。此外,傳統的路由方式過多地依賴于志愿節點或性能較好的若干個節點[20],導致網絡中大量的流量集中在網絡中的少部分區域。為解決以上2 個問題,本文在網絡層創建分布式數據傳播樹(Distributed Data Propagation Tree,DDPT),使流量均勻分散在網絡中各處,降低對性能較好的若干個節點或者志愿節點的依賴程度,即降低中心化程度。DDPT 的創建流程如圖2 所示。

圖2 DDPT 的創建流程Fig.2 The creation procedure of DDPT
DDPT 創建具體步驟如下:
1)選擇根節點。假設高性能區塊鏈節點(High Performance Blockchain Node,HPBN)在網絡中近似均勻分布,在由所有HPBN 構成的候選子集中,選擇與已有根節點(Root Node,RN)歐式距離最遠的HPBN 作為本次構建的DDPT 的RN。
2)發送根節點ID。在選出RN 之后,由發起本次DDPT 構建的區塊鏈節點(Blockchain Node,BN)向網絡中的其他節點發送RN 的ID。
3)請求加入DDPT。網絡中其他節點在收到RN 的ID 之后,向RN 發 起加入DDPT 的請求,RN 在收到節點的請求之后向節點返回確認消息,DDPT創建成功。
本文從實時性要求角度對交易進行分類,將其分為時延較敏感和時延較不敏感2 種類型。區塊鏈節點自行決定收集哪種類型的交易,對不同類型的交易進行處理可以獲得不同的獎勵[21]。節點收集時延較敏感交易形成時延較敏感區塊,收集時延較不敏感交易形成時延較不敏感區塊。NDN 路由器識別交易和區塊的名稱,根據名稱中的
差異化路由策略需要從2 個角度進行分組的區分判別:一是路由器節點區分收到的分組是區塊鏈分組還是常規NDN 分組;二是區分區塊鏈類型分組的實時性要求。如圖1 所示,交易或區塊由生成者生成命名之后發送到網絡中,路由器節點收到交易或區塊后,內容分發器根據內容名稱中SID 字段標識的實時性要求,將到達的區塊分為兩隊,一隊為時延較敏感交易/區塊,另一隊為時延較不敏感交易/區塊,在隊內按照到達的先后次序排隊,NDN 常規的請求分組和數據分組不參與排隊。在轉發時根據不同應用場景對實時性的不同需求設定不同的轉發隊列入隊比例,NDN 常規的請求分組和數據分組正常進入轉發隊列排隊等待轉發[3]。在每個路由器處都執行差異化業務排隊機制,以滿足各類業務不同的QoS 需求。基于NDN 的區塊鏈差異化路由建立算法描述如算法1 所示。
算法1基于NDN 的區塊鏈差異化路由建立算法

為兼容NDN 與區塊鏈不同的通信模式,本文在NDN 基礎上增加訂閱推送表(Subscribe Forward Table,SFT),實時記錄“推送”類型服務,即與區塊鏈相關的分組信息。SFT 包含的信息條目包括內容名稱、數據分組轉發端口號、數據內容序列號。為了適配區塊鏈基于內容生成者主動向網絡中“推送”數據內容的模式,NDN 網絡架構中內容生成者主動向網絡中發送一個對于自己所產生內容的興趣請求。SFT 在“推送”類型請求分組分發的過程中將數據內容名和回傳的數據分組經過的端口號記錄在SFT 表相應的條目中。信息傳輸流程如圖3 所示。

圖3 信息傳輸流程Fig.3 Information transmission procedure
信息傳輸具體步驟如下:
1)建立初始路由。所有區塊鏈節點定期向網絡中發送表達節點活躍狀態的請求分組,路由器節點在收到該分組后,如果節點表達自身為“活躍”狀態,則在FIB 表中添加相關信息;如果節點表達自身為“退出”狀態,則在FIB 表中刪除相關信息。路由器向其他路由器節點繼續轉發該請求分組,以完成初始路由的建立和狀態更新。
2)建立SFT 表項。數據內容生成者主動向網絡中發送對自身所產生數據內容的請求分組,路由器節點在收到該請求分組后,首先判斷CS 中是否有相關內容,有則直接返回,沒有則判定請求分組類型:若判定是區塊鏈類型的“推送”請求分組,在SFT 中查詢是否有該內容的名稱,若沒有則在表項中添加全部信息,若有則更新SFT 表中與該內容相關的接口和內容序列號信息;若判定是NDN 類型的請求分組,則交由PIT 表進行后續處理。
3)數據分組回傳。路由器節點在收到數據分組后,首先判斷數據分組類型,如果判定是區塊鏈“推送”類型數據分組[22],則交由SFT 表,若數據分組的內容序列號大于等于SFT 中對應條目記錄的內容序列號,則在內容序列號條目中添加新的序列號,按照SFT 中記錄的端口號轉發,并且將內容緩存在CS中,若數據分組的內容序列號小于SFT 中對應條目的序列號,則交由PIT 表進一步處理;若判定是NDN常規數據分組,則交由PIT 表進行進一步處理。
基于NDN 的區塊鏈分組通信算法描述如算法2所示。
算法2基于NDN 的區塊鏈分組通信算法


本文實驗選擇基于TCP 的區塊鏈[5]和基于NDN批量同步網絡內區塊的BlockNDN[9],在仿真中將本文方法記為“BlockQoS”,實驗網絡由7 個區塊鏈節點和3 個路由器構成,其中包含2 個邊緣節點。各項網絡參數設置如表1 所示。

表1 實驗參數設置Table 1 Experimental parameters setting
不同的區塊鏈應用場景對時延敏感程度不同,針對性地設置轉發隊列入隊比例能夠更好地滿足不同應用場景的QoS 需求。本文設置網絡中時延較敏感數據(包括交易和區塊)和時延較不敏感數據(包括交易和區塊)的數量比例為3∶1,設置不同的入隊比例a∶b,a代表時延較敏感類數據的入隊量,b代表時延較不敏感類數據的入隊量,以驗證排隊策略的性能。設置a∶b為1∶1 表示不采用排隊機制,設置a∶b為3∶1 驗證排隊策略對性能的提升作用。在一定時間Δt(6×103s)內,記錄在2 種不同的入隊比例下DDPT 上任意區塊鏈節點產生的所有交易和區塊被所有其他區塊鏈節點獲取到所花費的時間。實驗共進行100 次,結果取平均值。
圖4 所示為2 種不同的入隊比例下,在特定時間段內網絡中所有節點產生的交易或者區塊被其他節點同步所耗費的時間。從圖4 可以看出:隨著區塊數量的增加,不采用排隊策略(即對網絡中所有交易和區塊進行統一轉發)所消耗的時間明顯高于采用排隊策略所消耗的時間;采用和網絡中數據類型同樣比例進行排隊轉發的方法,其性能表現出明顯的優勢,并且隨著實驗的進行,區塊數目越多,優勢越明顯。

圖4 排隊策略對時延的影響Fig.4 Influence of queuing strategy on delay
設置一個區塊的生成時間為10~15 min 內的隨機值,圖5 所示為在形成區塊鏈過程中不同網絡中的流量占比。從圖5 可以看出:傳統基于TCP/IP 的區塊鏈網絡內存在大量冗余數據包,不同節點對同一個數據內容的請求是獨立的,即網絡中存在大量對于同一個數據內容的重復請求;BlockNDN 利用了NDN 網絡內緩存的特性,采用批量同步的方式使得網絡中的節點可以快速同步交易和區塊,但網絡中的流量沒有被均勻分散到網絡各處,導致一些交易或者區塊在傳輸過程中因為網絡擁塞而發生丟包或者過期現象,數據的重傳帶來了額外的流量;本文利用NDN支持多播,并且為不同的數據類型創建DDPT,使流量盡可能地均勻分布,提高了網絡資源利用率,相比基于TCP 的區塊鏈網絡,本文方法的網內流量約降低24%。

圖5 形成區塊鏈過程中不同網絡中的流量占比Fig.5 Proportion of traffic in different networks during the formation of blockchain
圖6 所示為3 種不同網絡中所有區塊鏈節點生成的區塊全網同步所消耗的時間情況。為驗證本文排隊策略的性能優勢,本次實驗仍設定網絡中時延較敏感數據(包括交易和區塊)和時延較不敏感數據(包括交易和區塊)的數量比例為3∶1,轉發入隊比例也為3∶1。從圖6 可以看出:當區塊數量較少時,網絡資源較為充足,鏈路擁塞可能性較小,在3 種網絡中同步區塊消耗的時間較為接近,DDPT 和比例入隊的性能優勢沒有完全體現出來;隨著網絡中區塊數量的增多,3 種網絡所消耗的時間出現了較為明顯的差異,并且網絡中區塊數量越多,本文排隊策略的優勢越明顯。

圖6 3 種網絡中全網同步所有區塊所消耗的時間情況Fig.6 Time consumed by the whole network to synchronize all blocks in the three networks
本文提出一種基于NDN 的區塊鏈差異化QoS保障方法,利用在TCP/IP 體系下較為成熟的差異化服務的思想,結合NDN 基于數據名稱路由和網絡內緩存的優勢,為區塊鏈應用場景提供更加有針對性的差異化QoS 保障。實驗結果驗證了該方法的有效性。下一步將從帶寬、吞吐量、并發性等方面優化區塊鏈網絡層的性能,從而為不同的應用場景提供更加精細和多樣的服務。