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

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

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

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

圖2.4-2:編碼后數據的封裝格式
為減小相應的編碼負擔和提高編碼效率,我們只對網(wǎng)絡(luò )中的IP數據報中的有效載荷進(jìn)行編碼(已經(jīng)編碼過(guò)的數據包可以再進(jìn)行編碼),不對ARP等其他數據包編碼。在編碼路由器中,我們?yōu)椴煌妮斎胪ǖ篱_(kāi)辟不同的FIFO以進(jìn)行順序存取和編碼
2.4.3隨機系數的選擇
根據相關(guān)資料可知,隨即編碼系數矢量的選擇可以從Galois Field中進(jìn)行選擇,依據論文[33][34],我們選擇域為GF256,即,此時(shí)可以解碼的概率為1-
=0.996,這個(gè)概率可以滿(mǎn)足大多數的應用需求。
2.4.4 NCP數據包頭的格式
為了能夠在解碼路由器上進(jìn)行解碼,我們需要在被編碼的有效載荷前增加NCP數據包頭[35],根據我們的方案,其包頭格式如圖2.4-4:
版本 4位 | 首部長(cháng)度 4位 | 總長(cháng)度 16位) | 標志 2位 | 保留 6位 | |||||||||
第1個(gè)包信源號 | 第2個(gè)包信源號 | …… | …… | 第8個(gè)包信源號 | |||||||||
第1個(gè)包的填充長(cháng)度(10位) | 編碼系數矢量1 (8位) | 代的編號(10位) | 編碼次數 (4位) | ||||||||||
第2個(gè)包的填充長(cháng)度 | 編碼系數矢量2 | 代的編號 | 編碼次數 | ||||||||||
……………… | …… | …… | |||||||||||
第n個(gè)包的填充長(cháng)度 | 編碼系數n | 代的編號 | 編碼次數 | ||||||||||
編碼后的有效載荷 | |||||||||||||
圖2.4-4:NCP數據包的包頭格式
先將包頭各個(gè)字段的含義說(shuō)明如下:
?、侔姹荆篘CP數據包格式的版本,為了后續開(kāi)發(fā)研究和以前版本的區分,第一個(gè)版本為0001.
?、谑撞块L(cháng)度和總長(cháng)度:首部長(cháng)度是指除了有效數據載荷以外的部分,共4位,單位是4字節,其最小值為2。當首部長(cháng)度為3時(shí),意味著(zhù)該包的載荷沒(méi)有被編碼,只是加了包頭。當其值大于3時(shí),其值減去3為被編碼的信源數。
總長(cháng)度是之首部長(cháng)度和有效載荷之和的長(cháng)度,16位,單位為字節。
?、蹣酥荆喝暨M(jìn)入編碼路由器的只是一個(gè)沒(méi)有編碼過(guò)的IP數據包時(shí),不進(jìn)行編碼,直接將包頭前2行加在原IP數據包的有效載荷的前面即可。當僅有一個(gè)NCP數據包進(jìn)入編碼路由器時(shí),我們不進(jìn)行編碼,直接進(jìn)行轉發(fā),如圖2.4-5所示:
有效載荷的數據包類(lèi)型 | 標志位 |
沒(méi)有編碼的IP數據包 | 01 |
編碼后的NCP數據包 | 10 |
保留 | 00 |
保留 | 11 |
圖2.4-5:標志位的含義
?、芫幋a次數:即從原始數據包算起,被編碼的次數,因為在一個(gè)實(shí)際的網(wǎng)絡(luò )中,數據的編碼可以是遞歸的,即可以多次被編碼。有時(shí),只有一個(gè)數據源時(shí),直接在其前面加上NCP包頭而不進(jìn)行編碼。增加編碼次數是為了能夠在多次編碼后進(jìn)行解碼。若編碼前數據包為IP數據包,其編碼次數為0,若為NCP數據包,則次數≥1.當一個(gè)IP數據包和一個(gè)已編碼的數據包編碼時(shí),利用編碼次數,可以避免解碼路由器將NCP數據包誤以為IP數據包而交給主機。
⑤第一個(gè)包
評論