基于網絡編碼的多信源組播通信系統(tǒng),包括源代碼,原理圖等(二)
的填充長度:因為不同數據源的數據包的長度可能不一樣,為了便于編碼計算,將它們前位補0使得長度一致。由于一個典型的以太網數據包的長度在500~1500字節(jié)之間,所以填充長度不超過1000字節(jié)。另外,我們還要考慮MAC層的最大傳送單元(MTU)的限制,即編碼后的MAC幀的長度不能超過1518字節(jié)。由此可以計算出,被編碼的數據包的最大長度是1499字節(jié)
本文引用地址:http://www.biyoush.com/article/201612/326828.htm?、蘧幋a系數:即隨機選擇的編碼矢量的系數,是在一個GF256的有限域中隨機選擇。
⑦代的編號:即被編碼的數據包的代的編號,是按照順序產生的編號,目的是方便解碼。
?、喟男旁刺枺?位,對進入編碼路由器的數據包的信源進行編號,其目的是為了方便解碼,在我們目前的體系中,最多允許8個數據包同時被編碼。注意:當信源數少于8個時,例如有3個,則分別將對應的數據包的信源號分別填為0000,0001,0010,其余的都填寫為1111。
2.4.5 轉發(fā)(組播)路由器R工作流程
在實際的應用中,R應該是具有組播功能的路由器,即可以運行網際組播管理協(xié)議IGMP和多播路由選擇協(xié)議DVMRP等,從而它可以知道網絡的局部的拓撲和滿足組播成員的要求。為了初期容易實現(xiàn),我們將其功能簡化為轉發(fā)功能(即廣播功能)。
2.4.6數據包的解碼
(1) 高速緩存和CAM的使用
數據包的解碼由DC解碼路由器完成。每個解碼路由器DC有三個輸入通道,分別連接到R0,R1,R2其解碼的策略是:我們先在DC中開辟三塊不同的高速緩存(DRAM)和與之分別對應的3個CAM,它們分別對應于R0、R1、R2,緩存和CAM的大小為代的編號的大小,即 =1024,在這三個緩存中存放按照順序接收到的數據。根據前面的數據處理過程,顯然,對應于每個緩存中的數據,雖然有的是真正編碼后的數據包,有的只是在IP數據包前增加了一個包頭,但我們都可以認為是NCP數據包。在將數據存入高速緩存的同時,提取NCP數據包頭中的信源號和代的編號,將它們存入到內容可尋址存儲器CAM(content addressable memory),則CAM的輸出即為對應數據在高速緩存的地址。
使用CAM的原因是:由于經過編碼,以及網絡環(huán)境非理想,解碼路由器收到的encoded packet可能是亂序的。因此考慮使用CAM做檢索鏈接,以便快速尋址當前解碼所需要的packet。 (2) 解碼順序
根據實際情況的考慮,目前有兩種解碼的順序,一種情況是按照信源號和代的編號的順序進行解碼,第二種情況是按照緩存及其緩存地址的順序來解碼。
在已知網絡拓撲的情況下,我們按照信源號和代的編號的順序來進行解碼,即對于信源采用輪詢策略,對于內部代的編號采用小數優(yōu)先策略。例如,在我們的拓撲圖中,解碼順序是:S(1,1),S(2,1),S(3,1)→S(1,2),S(2,2),S(3,2)→……S(1,n),S(2,n),S(3,n)……。
在未知網絡拓撲的情況下,我們按照高速緩存的地址順序來進行解碼,即先對高速緩存采用輪詢策略,對每個緩存中,采用地址由小到大的順序進行解碼,如圖2.4-7所示,進行解碼的順序是PZ1
→PX1→ PY1→ PZ2→ PX2→PY2→PZ3……
高速緩存1 高速緩存2 高速緩存3
地址 數據包 地址 數據包 地址 數據
01 PZ1 01 PX1 01 PY1
02 PZ2 02 PX2 02 PY2
03 PZ3 03 PX3 03 PY3
04 …… 04 …… 04 ……
……
圖2.4-7 按照高速緩存的地址順序來進行解碼
上面的兩種解碼方式各有優(yōu)點:在一般情況下,按照信源號和代的編號的順序來進行解碼可獲得較高的解碼速率,但在網絡環(huán)境惡化的情況下,其丟包率(無法解碼的概率)會比第2中方案高一些。由于在我們已有的網絡環(huán)境一般較好,為了體現(xiàn)網絡編碼的傳輸的高效性,我們按照第1種順序進行解碼。
(3) 解碼流程
為了避免高速緩存的寫數據溢出,我們將設置二級緩存,二級緩存也有3個,可用SRAM構造,將SRAM分為3塊地址上獨立的區(qū)域,每個SRAM 大小為256×1800bytes,分別對應不同的信源,我們將解碼后的數據,根據其代的編號,分別暫存在對應SRAM的對應地址上。例如,將S(1,1)存儲在SRAM1的第1個地址空間,S(2,4)則存儲在SRAM2的第4個地址空間。每個RAM各有1個讀、寫指針,可以同時按順序讀寫數據,按照地址由小到大的順序讀出的數據被發(fā)送到輸出隊列中。
如圖2.4-8所示為數據包的解碼過程,每個告訴緩存各有1個讀、寫指針,在解碼過程中,讀取緩存是按照解碼的順序進行的,而在寫緩存是按地址順序寫的。
圖2.4-8:數據包解碼流程
(4) 解碼策略與方法
我們按照信源號和代的編號的順序來進行解碼,即對于信源采用輪詢策略,對于內部代的編號采用小數優(yōu)先策略。例如,在我們的拓撲圖中,解碼順序是:S(1,1),S(2,1),S(3,1)→S(1,2),S(2,2),S(3,2)→……S(1,n), S(2,n), S(3,n)……
假定我們按照上述順序準備解碼S(1,x),解碼程序如圖9:
圖2.4-9 數據包S(1,x)的解碼過程
無法求解一個數據包的原因可能是:該數據包由于延遲或者丟失,在CAM中搜尋不到,再有就是線性相關,無法解出來。在我們的系統(tǒng)中,由于其拓撲的特殊性,沒有線性相關的情況,因此無法解碼的情況只發(fā)生在解碼因子丟失的情況下。
解碼子任務:解碼子任務的輸入是包頭信息,由調用它的程序給出,輸出有兩個變量:解碼后的數據包和解碼標志,解碼標志告訴調用它的程序是否可以解碼,我們假定現(xiàn)在要對S(i,j)解碼,子任務流程如圖2.4-10:
圖2.4-10:解碼子任務流程 (5) 解碼后數據包暫存SRAM的讀寫策略
我們將解碼后的數據包暫存在SRAM中等待發(fā)送,每個信源對應一個SRAM區(qū)域,同一個信源的解碼后的人數據包存儲在同一個RAM中,存儲地址為該包的代的編號。每個RAM各有一個讀指針,寫數據按照RAM的地址大小順序寫入。讀數據時按照信源編號和代的大小讀取。由于發(fā)送速率一般會高于解碼速率,因此RAM不用很大,暫定為256×1800。
每讀取一個數據后,指針加1,若讀取某個SRAM時無數據(可能是延遲或丟失造成),則不用等待,直接進行下一個SRAM的讀取,3次輪詢之后還沒有到達,則強行加讀指針加1,讀取下一個數據包。如圖2.4-11所示為SRAM的讀寫操作。
圖2.4-11 二級緩存SRAM的讀寫操作
(6)舉例說明
為了更清楚地顯示整個解碼的操作過程,我們以DC3為例,圖2.4-12顯示的是DC3的3個高速緩存和CAM,解碼過程如下
圖2.4-12 數據包S(1,x)解碼過程
數據包S(1,x)解碼過程如下:
先將S(1,x)的包頭3個CAM中搜索,在CAM1中得到索引為00,我們利用該索引得到S(1,x)在高速緩存1的地址為00,從高速緩存1讀取數據,得到a S(1,x)+b S(2,y),為了求解S(1,x)我們調用解碼子任務先求解S(2,y),為了防止出現(xiàn)死循環(huán),解碼子任務只在CAM2和CAM3中搜尋S(2,y),在CAM2中得到地址為02,于是讀取高速緩存2的02地址數據,得到eS(2,y)+f S(3,z),于是再調用子任務求解S(3,z),在CAM3中搜索S(3,z)后解出S(3,z), 于是可以解出S(2,y),最后再解出S(1,x),同時,分別將S(3,z)、 S(2,y) 、S(1,x)存入SRAM3,SRAM2,SRAM1相應的地址中。
2.5 系統(tǒng)軟硬件接口及相關軟件功能
在系統(tǒng)中,并非只有硬件邏輯在不同的模塊之間處理數據包,而且還有相應的軟件和控制程序。如圖2.5-1所示,是數據包在系統(tǒng)中的通道與處理流程。數據在系統(tǒng)中的通道分為data bus和register bus,data bus主要進行數據的硬件處理,register bus則是軟硬件的接口。在數據傳輸的每個階段對軟件應該是可控的、透明的,這些軟件在更高層次上執(zhí)行更復雜的算法和協(xié)議,或者處理一些異常情況,同時,對于系統(tǒng)開發(fā)人員,也應該是可控的,因為開發(fā)人員往往需要配置和調試硬件。使用通用的寄存器接口就可以使數據處理對軟件透明化,這是靠映射內部的硬件寄存器來完成的,即所謂的存儲映射技術。對于軟件來講,映射寄存器相當于一個I/O接口,它可以由軟件訪問和修改。
圖2.5-1:系統(tǒng)中的register bus 和data bus
Register bus中每個模塊的register連接在一起,組成一個信息環(huán)路。這些register塊中存儲了數據處理在每個
評論