摘要:描述了一種在Linux平臺上的IP over DVB-S發送網關的設計和實現方法。該方法發送網關支持單向輕量級封裝與多協議封裝方式,兼容IPv6和IPv4協議,并已在遠程教育實踐中得到應用。
關鍵詞:IPv6; 數字視頻廣播; 單向輕量級封裝; 多協議封裝
中圖分類號:TP393文獻標志碼:A
文章編號:1001-3695(2008)02-0622-03
數字視頻廣播 是歐洲數字電視的傳輸標準。它包括數字信源壓縮編碼#65380;節目數據流的統計復用#65380;信道糾錯編碼#65380;調制等數字傳輸鏈路各相關環節所采用的技術及接口標準。DVB標準根據傳輸介質的不同分為DVB-C(有線)#65380;DVB-T(地面)和DVB-S[1](衛星)三大類。其中:DVB-S是用于數字衛星廣播系統的標準。IPv6是下一代互聯網的核心協議[2],它有效地解決了IPv4中地址不足的問題,還增加了安全性#65380;服務質量保證#65380;自動配置#65380;移動性支持#65380;多點尋址等許多新的特性。基于這些改進和新的特性,IPv6可以使國際互聯網擺脫日益復雜#65380;難以管理和控制的局面,變得更加穩定#65380;可靠#65380;高效和安全。IP over DVB是在DVB數字廣播網絡上傳輸IP業務的一種技術。采用IP over DVB-S接入方式的最大特點是利用衛星廣播實現信息高速下載而且不受地理因素的影響,適用于很難通過有線網絡連接到Internet的地區。
本文介紹的是IPv6 over DVB-S傳輸系統中發送網關的設計與實現。該網關截獲發送方的IP數據包后封裝成MPEG-2傳輸流(transport stream,TS)并傳送給衛星發送裝置。
1封裝方式
在DVB網絡上,MPEG-2 TS的負載單元被用做容器來承載IP分組,TS的頭部為有效處理IP分組提供足夠信息。目前,將IP包封裝成TS包主要有兩種方式,即MPE[3]和ULE[4,5]。MPE封裝示意圖如圖1所示。
當前IPv4 over DVB-S多采用MPE的方式封裝IP數據包,但由于頭部信息多#65380;有效傳輸效率較低,不適宜傳輸IPv6數據。相比于MPE封裝,ULE封裝要簡約很多。其封裝示意圖如圖2所示。
其中:D(1b)標志后面有無dest address項;length(15b)表示type后面開始到SNDU結尾處數據的字節長度;type(16b)是類型標志,標志后面PDU的類型(IPv4=0x0800,IPv6=0x08DD)。
本文稱封裝前IP包的大小和封裝后SNDU的大小比值為封裝效率。當封裝一個IP包為一個SNDU時,封裝效率如圖3所示。可以看出ULE的封裝效率高于MPE的封裝效率。這是因為相比于MPE,ULE減少了大量的控制字段,總體上提高了IP over DVB-S的有效傳輸效率,從而節約了有限#65380;昂貴的衛星帶寬資源。
2IPv 6 over DVB-S系統組成
IP over DVB-S系統總體構成如圖4所示。
在系統的發送端,IP-DVB發送網關利用以太網卡連接IPv4/IPv6網絡,從中接收需轉發的IP數據報文,將其封裝成MPEG-2 TS數據包后,使用DVB發送卡發送;經過衛星調制解調器,數字信號被轉變成高頻模擬信號,最后使用發射裝置向衛星發射。
在系統的接收端,接收裝置接收衛星信號,經過解調#65380;解復用#65380;過濾等處理后輸出MPEG-2 TS數據包,經過必要的幀處理后,數據通過PCI總線接口電路輸入IP-DVB接收網關;網關通過解封裝操作,重組形成完整的IP報文,并可利用以太網卡將該IP數據報經過IPv4/IPv6網絡發送到目的節點。
發送端/接收端網關監控設備均可直接或通過網絡間接對IP-DVB發送/接收網關進行配置設定和狀態查詢。IP-DVB發送/接收網關可根據用戶配置,對任一邏輯通道數據流(用PID標志)選擇MPE或ULE方式進行封裝/解封裝操作。通常,IP-DVB發送網關連接Internet,以獲得豐富的數據資源,IP-DVB接收網關連接局域網,使不便通過有線方式接入Internet的地區能夠方便地獲得Internet上的資源。
3IPv6 over DVB-S發送網關
IPv6 over DVB-S發送網關由硬件系統和軟件系統組成。其中:硬件系統由普通網卡和DVB發送卡組成(普通網卡實現從以太網獲取資源數據的功能;DVB發送卡實現將軟件系統封裝好的MPGE-2 TS數據發送給衛星網絡的功能);軟件系統負責硬件卡的驅動,數據包的截獲#65380;封裝和發送,網關配置控制及監控等功能。IP-DVB發送網關系統結構如圖5所示。
3.1硬件系統
IP-DVB發送網關硬件系統由普通網卡和DVB發送卡兩部分組成。網卡從以太網上接收數據,這些數據被軟件系統截獲后進行配置控制處理或協議封裝處理。如果是要發送給衛星網絡的數據則進行協議封裝處理后交給DVB發送卡,由DVB發送卡處理后再交給衛星調制解調器。以太網卡的工作原理本文不再敘述。下面介紹DVB衛星發送卡的工作原理。
在本文介紹的發送網關中,DVB衛星發送卡的組成如圖6所示。發送卡的工作原理是利用PCI總線控制器AMCC-S5920通過PCI總線將節目數據流發送到FIFO中,由FIFO的空#65380;滿#65380;半滿標志,以及讀#65380;寫標志來實現對傳送數據流的控制。CPLD完成S5920的本地接口時序到FIFO寫入時序的轉換,并在ASI/SPI信號輸出模塊中將數據轉換成串行TS流。TS流接著進入衛星調制解調器。
3.2軟件系統
發送網關軟件系統分為監控軟件和發送處理軟件。發送處理軟件共分為五個模塊,即IP數據包截獲模塊#65380;協議封裝模塊#65380;數據發送模塊#65380;配置控制模塊和發送卡硬件驅動初始化模塊。處理流程如圖7所示。
1)IP數據包截獲該模塊采用的是Linux的netfilter機制[6],利用檢測點(hook)在IP層截獲IP數據包后,根據所截獲包的包頭中源和目的地址信息檢索配置信息表,判斷是進行轉發處理還是監控處理。若有匹配的PID值,則進行轉發處理,將該數據包發送給協議封裝模塊;若無匹配的PID值,則進行配置控制處理。Netfilter的檢測點設在NF_IP6_PRE_ROU-TING處,如圖8所示。
Hook點采用的數據結構是struct nf_hook_ops,注冊函數是nf_register_hook()。Nf_hook_ops中幾個關鍵值設置如下:
nfhkops.hook= HookForIpCap6
nfhkops.hooknum= NF_IP6_PRE_ROUTING
nfhkops.pf= PF_INET6。
Nfhkops.hook是hook點截獲數據后的處理函數,對應后面的協議封裝處理函數。nfhkops.hooknum是施行截獲的hook位置。Nfhkops.pf是網絡類型。這些設置對于IPv6和IPv4數據均要分開設置處理。以上是針對IPv6數據進行的設置。對于IPv4的數據,以上參數分別設置為HookForIpCap4#65380;NF_IP_PRE_ROUTING和PF_INET。
2)協議封裝封裝函數是hook點截獲數據后進行處理的函數。該模塊先根據IP包頭中的信息檢索配置表中的封裝方式(如果是ULE封裝,需要增加頭部形成SNDU;如果是MPE封裝,則需要增加DSM-CC頭部形成SNDU)將封裝好的數據包進行分段#65380;填充成為完整(188 Byte)的MPEG-2 TS后調用數據發送模塊。
在ULE封裝中,需要增加的頭部共4 Byte,包括:16 bit的類型標志,表明后面所封裝數據的類型,IPv6時為0x08DD,IPv4時為0x0800;15 bit的長度標志,是從type之后算起到包括CRC-32的數據長度;1 bit的帶地址標志,標志后面是否存在目的地址。添加完頭部后,需要計算32 bit的CRC校驗和,將校驗結果放在SNDU的最后。
在MPE封裝中,需要增加的頭部共12 byte,各比特位的語法詳盡解釋參見文獻[2]。封裝好IP數據包之后對整個MPE進行CRC-32校驗編碼,將校驗結果放入MPE有效載荷后構成完整的SNDU。
將IP數據包封裝成SNDU后,要將封裝好的數據包進行分段#65380;填充成為完整的188 Byte的MPEG-2 TS。TS包的包頭固定是4 Byte,包括該數據流的PID#65380;連續計數值#65380;PUSI等。PID由發送方和接收方協商好以配置文件的形式告訴發送網關。連續計數值在封裝同一個SNDU時是連續計數的。對于有SNDU在當前TS包中開始的,要設置PUSI域為1,同時插入1 Byte的NMP(next message pointer)域。NMP用于指出新SNDU包在當前TS包中的開始字節,此時TS的有效載荷就只有183 Byte了。如果當前TS包中沒有新SNDU開始,則設置PUSI為0,不插入NMP,此時的有效載荷為184 Byte。最后將已經碎片化的SNDU封裝入TS包的有效載荷中。對于TS包空余的有效載荷用0xFF進行填充,從而保證每個TS包均為188 Byte。
3)數據發送模塊收到MPEG-2 TS數據包后,將要發送的數據包放在發送緩沖ts_buff中。首先對數據包進行188 Byte的檢查,若數據包的長度為188 Byte,表示通過檢查;否則丟棄數據包。接著再檢測DVB發送卡是否空閑。如果DVB卡空閑,Linux調用dev→hard_start_xmit將數據寫入硬件卡,dev是發送卡在系統中對應的變量。如果發送卡空閑,發送成功,返回0;否則要進行等待,此時dev→tbusy置為非0,不釋放ts_buff。硬件在發送結束后產生中斷,這時才可以把tbusy置0,然后通知系統可以再次發送。
4)其他過程在IP-DVB發送網關的軟件系統中還包括硬件驅動初始化模塊#65380;配置控制模塊和網關監控軟件。DVB發送卡驅動是基于PCI設備驅動方式的[7],用register_netdev(dev)注冊設備后以struct net_device類型的變量dev存放于系統上,與DVB發送卡相關的所有信息均可由這個變量獲取。配置控制模塊保存了一張配置信息表,主要包括PID值#65380;源IP地址#65380;目的IP地址#65380;封裝方式和限制速率等。該模塊通過查詢此表判斷所截獲數據包是需要轉發還是用于監控。網關監控設備與IP-DVB發送網關之間的遠程監控基于UDP報文實現。這三個部分在本文中不再詳細敘述。
4實驗結果
實驗環境是:衛星調制解調器的帶寬設置為8 MBps,資源服務器的發送速率設置為每100 ms發送一個數據包,數據包的類型為IPv6;發送網關配置16個PID選項,封裝數據包前先在這16個PID選項中查找是否有匹配的PID號,然后進行相應的封裝。
測試分別采用MPE和ULE的封裝方式,開始發送時設置包的大小為100 Byte,每發送一個包,包的大小增加5 Byte,直到1 500 Byte為止。測試的時間從發送端截獲數據包開始,到封裝完畢要送到緩沖區為止。隨著數據包的增加,兩種封裝方式所耗時間的變化如圖9所示。
通過實驗數據可以看出,在封裝IPv6數據包過程中,采用ULE方式封裝的時間總體上小于采用MPE方式封裝的時間。
5在遠程教育中的應用
IP over DVB-S技術利用了衛星信道天然的廣播優勢,能以較低廉的價格實現廣大區域內大數據量的分發,可降低遠程教育的實施成本,非常適合于我國中西部等很難通過有線網絡連接到Internet的地區。采用IPv6協議的互聯網具有更好的擴展性,并且更安全#65380;更容易為用戶提供高質量服務。利用IP over DVB-S技術可以讓遠程教育的內容提供商以較高的傳輸速度向任意的遠端接收站發送數字#65380;音頻#65380;視頻及文本文件,如軟件#65380;電子文檔#65380;遠程教學教材等,如圖10所示。
筆者將本文網關應用于CNGI遠程教育中,取得了很好的效果。在實際運行中,一次封裝處理與解封裝處理的時間延遲皆小于0.1ms,平均無故障時間(mean time to failure, MTTF)大于4個月,達到了應用于遠程教育的要求。
6結束語
本文詳細闡述了Linux平臺下IP over DVB-S發送網關的設計及實現,它支持IPv4/IPv6雙協議棧與MPE/ULE封裝方式。在遠程教育中的實際應用表明,本網關系統能很好地利用IP網絡與衛星通信網的優勢,實現在DVB-S網絡中承載IP數據業務,并具備良好的處理效率和可靠性。另外,本文網關很容易擴展到其他DVB網絡,實現如IP over DVB-C#65380;IP over DVB-T的數據傳輸。
參考文獻:
[1]ETS 300 421,Digital broadcasting systems for television, sound and data services,framing structure, channel coding and modulation for 11/12 GHz satellite services[S].
[2]RFC 1752,The recommendation for the IP next generation protocol[S].
[3]EN 301 192,DVB specification for data broadcasting[S].
[4]RFC 4259,A framework for transmission of IP datagrams over MPEG -2 network[S].
[5]RFC 4326,Unidirectional lightweight encapsulation (ULE) for transmission of IP datagrams over an MPEG -2 transport stream (TS)[S].
[6]李善平. Linux內核2.4版源代碼分析大全[M]. 北京: 機械工業出版社, 2002:433-845.
[7]CORBET J,RUBINI A,KROAH-HARTMAN G.Linux device drivers[M]. 3rd ed.[S.l.]:O’Reilly Press, 2005:491-537.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”