基于網絡編碼的多信源組播通信系統,包括源代碼,原理圖等(二)
2 多信源組播系統結構及整體設計方案
本文引用地址:http://www.104case.com/article/201612/326828.htm2.1項目研究需求、目標和內容
網絡編碼能夠提高網絡吞吐量,提升魯棒性、安全性等網絡性能。具有網絡編碼功能的路由器是未來網絡發展的趨勢。組播通信在網絡通信中有重要的作用,事實上,任何一個網絡都可以認為是組播網的一個特例。然而,目前在世界上研究網絡編碼在組播上的應用大多集中在單信源組播方面,例如,單信源多信宿網絡如何達到最大傳輸速率問題[25],基于網絡編碼的組播路由算法和性能評估[26], 基于網絡編碼的組播通信網絡的拓撲設計[27], 多信源隨機線性網絡編碼在組播通信的研究[28]以及單信源組播網中編碼節點的研究[29],以上研究都是以軟件仿真為主,沒有形成實際的硬件平臺和系統。
多信源組播的應用非常廣泛,如P2P內容分發網絡等。事實上,任何一個網絡都可以作為多信源組播的一個特例,因此研究多信源組播是有意義且必要的。
本項目的主要研究目標是基于網絡編碼的多信源組播系統的實現。在基于國內外網絡編碼理論在組播通信中的最新研究成果和技術,對網絡編碼理論進行深入學習和探討,提出一種基于網絡編碼的多信源組播系統和網絡,然后依據此系統設計出可實現組播的通信協議和相關算法,再利用開放式的網絡設計硬件平臺NetFPGA[30],使提出的協議和算法在硬件上實現,最后在實際的環境中用若干電腦和NetFPGA組成一個小型組播通信網絡進行系統測試和性能評估。
2.2 NetFPGA——新一代開放式網絡研究平臺簡介
由斯坦福大學開發的NetFPGA是一個基于Linux操作系統的可重用開放性硬件平臺,允許用戶在實驗室內搭建高性能的網絡模型進行仿真和研究。它具有以下特點[31]:
(1)很好地支持模塊化設計,它可以使研究人員在硬件上搭建Gb/s高性能網絡系統模型。(2)NetFPGA是一個基于Linux系統的開放性平臺,可以利用平臺上現有的資源,在前人開發的基礎上添加自己的模塊和修改現有的系統,而不需要重復地搭建外圍模塊、開發驅動和GUI等,大大減輕了網絡研究的任務。
NetFPGA的硬件主要包含了4個1Gb/s的以太網接口(GigE),一個用戶可編程的FPGA,以及兩片SRAM和一片DRAM。NetFPGA開發板通過標準的PCI總線接口連接到PC機或服務器,模塊框圖如圖2.2-1所示。

圖 2.2-1:NetFPGA平臺的組成框圖
在外部硬件接口方面,除了連接PC主機的PCI總線插口,一個Broadcom公司的物理層收發器(PHY)包含了四個千兆位以太網接口,板子上的兩個SATA連接口使得系統內部的多個NetFPGA可以通過SATA數據線連接起來,互相之間直接以很高的速度交換數據,而不必再通過PCI總線。NetFPGA通過PCI總線與主機CPU連接,提供了硬件加速的數據通道,分擔CPU的處理任務。主機CPU按照DMA方式讀寫NetFPGA上的寄存器和存儲器來配置NetFPGA的工作模式,并對NetFPGA的工作狀態進行監控。
NetFPGA平臺的軟件系統包括操作系統、作為軟件接口的驅動程序、實現各種硬件功能的邏輯代碼、執行控制功能的軟件程序、系統測試的腳本程序,以及計算機輔助設計軟件工具。
2.3 利用NetFPGA實現本設計的總體構想
基于網絡編碼的組播通信系統將充分運用NetFPGA上面的各種硬件和軟件資源,實現系統的設計目標,具體是:(1)根據項目的需求,合理且充分利用NetFPGA卡上面的各種硬件資源,如FPGA、存儲芯片和輸入輸出接口;(2)由于基于NetFPGA實現的IPv4原理性路由器是一個開源的系統,因此我們可以運用其提供的部分代碼和已經設計好的底層硬件平臺,來幫助我們實現設計目標。例如,我們的系統的編碼、解碼工作主要在網絡層完成,因此我們可以利用NetFPGA中已有的物理層、MAC層硬件邏輯來實現數據的接收和發送;(3)在軟件方面,由于NetFPGA平臺選擇了CentOS操作系統,并且開發了軟硬件接口的驅動程序,基于Linux內核的設備驅動程序和Java程序開發的圖形用戶界面(Java GUI)等,因此我們可以對其應用、改進,使我們的系統更加完善,方便調試和后續的進一步研究。
2.4系統實現的整體設計方案說明
2.4.1 系統拓撲圖及說明
如圖2.4-1所示,是擬采用的組播通信網絡的拓撲圖:

圖2.4-1基于網絡編碼組播的網絡拓撲圖
說明:為了易于在工程上實現,將網絡編碼路由器分為編碼路由器EC(Encoding router)和解碼路由器DC(Decoding router),分別專門負責編碼和解碼。具體講,如圖1所示,信源S1,S2,S3發送數據包,編碼路由器EC0和EC1負責將接收到的數據包以隨機的系數進行線性編碼后發送給組播路由器R,注意,這里的組播路由器更準確地說是轉發路由器,因為它的功能只是將收到的數據包轉發到其三個輸出端口,而沒有IGMP(組播管理)和相應的組播路由功能。當然,我們也可以直接在EC上實現轉發的功能,增加R的原因是考慮到NetFPGA端口數量的限制(每塊NetFPGA只有4個端口)。解碼路由器DC接收編碼的數據并解碼,并將它發送給下游的信宿主機,在這里,由于PC數量的限制,我們使用雙口網卡可以將解碼路由器和信宿放到同一臺主機上,這對網絡性能的測試和實現沒有任何影響。
2.4.2編碼策略與方案
作為一種編碼結構的提出,我們將編碼只限于不同信源數據包之間,暫不考慮信源包內部編碼。相同信源的數據包之間分“代”,以便在解碼時區分信息先后順序[32]。不同信源的包之間不區分代的概念。
定義:為了討論的方便性和簡潔性,我們將信源S1的第1代記為S(1,1),信源S2的第3代記為S(2,3),……依此類推。依據包頭和緩存,每個信源的代的編號從0開始,至1023結束,即信源n的最大的代編號為S(n,1023)
在編碼路由器EC上對不同信源的IP數據包進行編碼,編碼系數矢量隨機選擇,編碼方法是線性編碼。例如,在上圖中的編碼路由器EC0,設兩個鏈路的輸入的全局編碼向量為:in(e)=由于只有兩個信源之間的編碼有且只有一條邊輸出,則本地編碼向量為(α β),依據文章[33]的公式:

則輸出out(e)=(α β)=αS(1,x)+βS(2,y)。編碼后的數據以NCP(network coding protocol)包頭封裝,然后再封裝在IP數據報中,如圖2.4-2所示:

圖2.4-2:編碼后數據的封裝格式
為減小相應的編碼負擔和提高編碼效率,我們只對網絡中的IP數據報中的有效載荷進行編碼(已經編碼過的數據包可以再進行編碼),不對ARP等其他數據包編碼。在編碼路由器中,我們為不同的輸入通道開辟不同的FIFO以進行順序存取和編碼
2.4.3隨機系數的選擇
根據相關資料可知,隨即編碼系數矢量的選擇可以從Galois Field中進行選擇,依據論文[33][34],我們選擇域為GF256,即,此時可以解碼的概率為1-
=0.996,這個概率可以滿足大多數的應用需求。
2.4.4 NCP數據包頭的格式
為了能夠在解碼路由器上進行解碼,我們需要在被編碼的有效載荷前增加NCP數據包頭[35],根據我們的方案,其包頭格式如圖2.4-4:
版本 4位 | 首部長度 4位 | 總長度 16位) | 標志 2位 | 保留 6位 | |||||||||
第1個包信源號 | 第2個包信源號 | …… | …… | 第8個包信源號 | |||||||||
第1個包的填充長度(10位) | 編碼系數矢量1 (8位) | 代的編號(10位) | 編碼次數 (4位) | ||||||||||
第2個包的填充長度 | 編碼系數矢量2 | 代的編號 | 編碼次數 | ||||||||||
……………… | …… | …… | |||||||||||
第n個包的填充長度 | 編碼系數n | 代的編號 | 編碼次數 | ||||||||||
編碼后的有效載荷 | |||||||||||||
圖2.4-4:NCP數據包的包頭格式
先將包頭各個字段的含義說明如下:
①版本:NCP數據包格式的版本,為了后續開發研究和以前版本的區分,第一個版本為0001.
②首部長度和總長度:首部長度是指除了有效數據載荷以外的部分,共4位,單位是4字節,其最小值為2。當首部長度為3時,意味著該包的載荷沒有被編碼,只是加了包頭。當其值大于3時,其值減去3為被編碼的信源數。
總長度是之首部長度和有效載荷之和的長度,16位,單位為字節。
③標志:若進入編碼路由器的只是一個沒有編碼過的IP數據包時,不進行編碼,直接將包頭前2行加在原IP數據包的有效載荷的前面即可。當僅有一個NCP數據包進入編碼路由器時,我們不進行編碼,直接進行轉發,如圖2.4-5所示:
有效載荷的數據包類型 | 標志位 |
沒有編碼的IP數據包 | 01 |
編碼后的NCP數據包 | 10 |
保留 | 00 |
保留 | 11 |
圖2.4-5:標志位的含義
④編碼次數:即從原始數據包算起,被編碼的次數,因為在一個實際的網絡中,數據的編碼可以是遞歸的,即可以多次被編碼。有時,只有一個數據源時,直接在其前面加上NCP包頭而不進行編碼。增加編碼次數是為了能夠在多次編碼后進行解碼。若編碼前數據包為IP數據包,其編碼次數為0,若為NCP數據包,則次數≥1.當一個IP數據包和一個已編碼的數據包編碼時,利用編碼次數,可以避免解碼路由器將NCP數據包誤以為IP數據包而交給主機。
⑤第一個包
評論