作者:宋嵩,杜文,牛志升,李康
移動通信給人們帶來了十分方便的服務,無線局域網作為一種移動接入Internet的方法,逐漸成為研究的熱門課題。但是,由于應用日益廣泛的多媒體業(yè)務數(shù)據(jù)流量比較大,而無線帶寬有限,同時IP 網絡基本上是采用點到點盡力型(BestEffort) 服務方式,所以很難有效滿足實時多媒體業(yè)務的服務質量(Quality of Service)要求。為保證WLAN中多媒體業(yè)務的實時傳輸,需要進行QoS差分,給多媒體業(yè)務提供不同服務質量選擇。目前,關于多媒體QoS保證的研究普遍采用軟件仿真來完成,缺乏實際網絡測試。為了驗證各種差分算法的可行性,我們開發(fā)了一個實時多媒體業(yè)務開放式試驗平臺,實驗測試多媒體業(yè)務QoS保證調度算法,包括我們自己提出的調度算法。
IPv6擴大了IPv4地址空間,徹底解決了IPv4的地址空間耗盡和路由表爆炸等問題,并且在安全性、移動性以及QoS等方面提供了強有力的支持,而且, 更加合理的IPv6協(xié)議包頭設計使得路由器在處理數(shù)據(jù)包時更加快捷。Linux操作系統(tǒng)以其源代碼開放、性能高和穩(wěn)定可靠等優(yōu)點得到了日益廣泛的應用,越來越多的科研項目利用Linux系統(tǒng)作為實驗的軟件平臺。因此,測試平臺選擇了在IPv6 網絡環(huán)境下使用Linux操作系統(tǒng)來實現(xiàn)。
IPv6網絡環(huán)境和L inux實現(xiàn)機制
IPv6對IP4的改進
IPv6繼承了IPv4的優(yōu)點,摒棄了它的缺點。IPv6與IPv4不兼容,但同所有TCP / IP 協(xié)議簇中的協(xié)議兼容,所以IPv6完全可以取代IPv4。相對于IPv4, IPv6 最大的優(yōu)點是有足夠的地址空間。IPv6的地址是128位,大大增加了可用的地址空間,甚至以后每臺家電或者手機都分配一個IP地址都綽綽有余。而且, IPv6 的自動配置地址的功能使得用戶配置網絡非常簡單。
相對于IPv4, IPv6簡化了包頭格式,包頭有8個字段,總長固定為40字節(jié);由于包頭長度統(tǒng)一,因此不再需要包頭長度字段,并且去除了IPv4 中一些其他字段,可以節(jié)省大量網絡路由器資源。此外, IPv6 提供了可擴展協(xié)議( ExtensibleProtocol) ,設計更為靈活,去掉選項字段,引入“下一頭標”(Next Header)指示IPv6 報頭之后的第一個擴展頭的類型。
IPv6擴展頭也必須攜帶一個Next Header字段。這樣,協(xié)議頭的結構像一個鏈表一樣可以不斷擴展,所以很容易加入新的特性,加強選擇功能。
Linux 2. 2以上內核版本,Windows XP Service Pack 1和Windows Server 2003等操作系統(tǒng)都提供對IPv6的支持。
Linux的Netfilter鉤子函數(shù)
NetFilter是Linux 2. 4內核實現(xiàn)數(shù)據(jù)包過濾、數(shù)據(jù)包處理等的功能框架。NetFilter提供了一個抽象、通用化的框架,該框架定義的一個子功能的實現(xiàn)就是包過濾子系統(tǒng)。Netfilter框架包含以下三部分:
1) 鉤子(Hook) 。Netfiter為IPv6協(xié)議定義了5個鉤子函數(shù)(如表1所示) ,這些鉤子函數(shù)在數(shù)據(jù)包流過協(xié)議棧的幾個關鍵點被調用。在這幾個點中,協(xié)議棧將把數(shù)據(jù)包及鉤子函數(shù)標號作為參數(shù)調用Netfilter的框架。
2) ip tables。內核模塊可以對一個或多個鉤子進行注冊,實現(xiàn)掛接,當某個數(shù)據(jù)包被傳遞給Netfilter框架時,內核檢測是否有模塊對該協(xié)議和鉤子函數(shù)進行了注冊。若注冊了,則調用該模塊注冊的回調函數(shù),檢查、修改、丟棄該數(shù)據(jù)包并指示Netfilter將該數(shù)據(jù)包傳入用戶空間的隊列。
3) 用戶空間。排隊的數(shù)據(jù)包被傳遞給用戶空間異步地進行處理。一個用戶進程能檢查、修改數(shù)據(jù)包,甚至可以重新將該數(shù)據(jù)包通過離開內核的同一個鉤子函數(shù)注入內核。
Netfilter實現(xiàn)流程如圖1所示。圖示指明了Netfilter 5個鉤子函數(shù)掛載點在Linux內核協(xié)議棧中的位置,箭頭標明了IP包在包含Netfilter框架的IP層的流向。IP包從最左端進入系統(tǒng)經過校驗和版本檢查后經過第一個掛載點, 交給NF_IP6_PRE_ROUTING注冊的鉤子函數(shù)進行處理;經過路由選擇,決定該數(shù)據(jù)包需要轉發(fā)還是發(fā)給本機;若該數(shù)據(jù)包是發(fā)給本機的,則經過NF_ IP6_LOCAL_ IN注冊的鉤子函數(shù)處理以后傳遞給上層協(xié)議; 若需要轉發(fā),則轉至NF_ IP6_FORWARD注冊的鉤子函數(shù)進行處理;所有需要發(fā)送到網絡的數(shù)據(jù)包,無論是本機發(fā)出的還是轉發(fā)的,都要經過最后一個鉤子函數(shù)NF_IP6_POST_ROUTING處理以后,才能發(fā)送到網絡上。本地網絡層以上產生的數(shù)據(jù)包通過NF_ IP6_LOCAL _OUT注冊的鉤子函數(shù)處理后,才可以進行路由選擇,然后由NF_ IP6_POST_ROUTING處的鉤子函數(shù)處理后發(fā)送到網絡上。

根據(jù)所需要處理的數(shù)據(jù)包的不同特點,選擇合適的掛載點,加入相應的回調處理函數(shù),就可以實現(xiàn)對網絡數(shù)據(jù)包的截獲和各種控制。本文測試平臺使用Netfilter在NF_ IP6_POST_ROUTING掛載點截獲所有網絡數(shù)據(jù)包對其進行調度管理,實現(xiàn)差分QoS機制,保證多媒體業(yè)務的實時傳輸。
實時多媒體業(yè)務服務質量保證機制
基于SIP協(xié)議的多媒體業(yè)務
會話初始協(xié)議SIP ( Session Initiation Protocol)是一個基于應用層的控制協(xié)議,用來建立、控制維護和終止多媒體會話或呼叫。SIP協(xié)議為大范圍應用的多媒體通信提供了高級的信令和控制功能,通過少量基于文本的消息包在兩個實體之間傳遞消息, 還在網絡中提供代理服務器和重定位服務器來中繼和傳送消息, 支持多媒體會議、遠程學習、Internet會話和多媒體發(fā)布等一系列服務。在SIP協(xié)議應用中包含兩個部分:用戶端和網絡服務器。用戶端可以產生SIP消息包并通過一個或多個網絡服務器傳送到其他用戶端, 用戶端之間也可以直接通信。這里使用IPv6下的SIP服務器為用戶端建立連接。這樣,在進行多媒體通信時,就構成了兩類數(shù)據(jù)包,一類用于管理多媒體業(yè)務的信令數(shù)據(jù)包,一類為用于不同的SIP客戶端之間通信時的圖像、語音數(shù)據(jù)。為了保證在網絡中多媒體業(yè)務的實時傳輸,給多媒體業(yè)務以高優(yōu)先級進行傳輸;同時,為了保證多媒體會話可以隨時建立,特別給予用于建立連接的信令數(shù)據(jù)以更高的優(yōu)先級。這樣就形成了三級服務差分的概念,信令、多媒體業(yè)務、數(shù)據(jù)傳輸,其中SIP服務器的數(shù)據(jù)為信令數(shù)據(jù),具有絕對高優(yōu)先級,多媒體業(yè)務和數(shù)據(jù)傳輸分別具有高優(yōu)先級和低優(yōu)先級。
差分QoS調度
先入先出( FIFO)排隊法是指先到達的分組先被發(fā)送,這和處理機任務調度的F IFO算法思想是一致的。系統(tǒng)每次發(fā)送位于等待隊列頭部的分組,新到的分組則加到隊列的尾部。當一個新的分組到達而緩存已滿時,就需要一個丟棄策略來決定丟棄分組。這里,使用隊尾丟棄(Drop Tail)策略, 丟棄最新到達的分組。根據(jù)使用SIP服務器在IP網絡中進行多媒體通信時的三種數(shù)據(jù)包劃分三種不同的優(yōu)先級,設置三個不同隊列,如圖2所示。

其中,用于建立實時業(yè)務連接的信令數(shù)據(jù)包,具有絕對高優(yōu)先級,對應接入隊列0,系統(tǒng)檢測到之后,直接轉發(fā),以保證實時通信業(yè)務可以隨時建立。SIP客戶端進行多媒體通信的數(shù)據(jù)具有高優(yōu)先級,對應接入隊列1;普通數(shù)據(jù)具有地優(yōu)先級,對應接入隊列2。接入隊列1和2中的數(shù)據(jù)包都將等待系統(tǒng)轉發(fā)。系統(tǒng)每次進入時間中斷進行數(shù)據(jù)包發(fā)送時,都先檢查高優(yōu)先級的接入隊列1,如果隊列中有數(shù)據(jù)包等待則轉發(fā)、退出;如果隊列為空,則檢查接入隊列2執(zhí)行相同的操作。這樣,多媒體業(yè)務會話就可以隨時建立,并進行有服務質量保證的實時傳輸。
測試平臺的設計與實現(xiàn)
測試平臺拓撲結構
測試平臺由六臺計算機、一個AP和一個Hub組成,拓撲結構如圖3所示。測試網絡由一個無線局域網和一個有線局域網組成,兩個子網間的數(shù)據(jù)通過路由器(計算機F)來轉發(fā)。數(shù)據(jù)通過路由器時,路由器將其截獲,然后根據(jù)不同的優(yōu)先級確定數(shù)據(jù)轉發(fā)的順序等,實現(xiàn)差分QoS調度。

圖3中計算機F裝有雙網卡,配置為路由器,同時運行差分QoS調度算法,是測試平臺的核心部件。無線局域網由AP來組成,有兩個無線終端A和B。有線局域網中有兩臺計算機C和D。在A和C之間建立VoIP傳輸會話( Session) 1, 被賦予高優(yōu)先級。在B和D之間建立數(shù)據(jù)傳輸會話2,被賦予低優(yōu)先級。計算機E為SIP服務器,用于在兩個計算機終端上創(chuàng)建視頻會話。
測試平臺網絡配置
所有實現(xiàn)都在IPv6 下進行,路由器和SIP服務器運行Red Hat L inux 9操作系統(tǒng),其他計算機終端運行Windows XP操作系統(tǒng)。無線局域網網絡前綴為3ffe: 327d: 8: 810: : /64,有線局域網網絡前綴為3ffe: 327d: 8: 811: : /64。
計算機F為路由器,無線和有線網絡中IPv6地址分別為3ffe: 327d: 8: 810: : 1 /64和3ffe: 327d: 8: 811: : 1 /64,并且開啟路由功能,實現(xiàn)無線網絡和有線網絡的連接。網絡配置方法為:
ifconfig eth0 add 3ffe: 327d: 8: 810: : 1 /64
#添加IPv6地址
ifconfig eth1 add 3ffe: 327d: 8: 811: : 1 /64
echo 1 》 /p roc / sys/ net/ ipv6 / conf / all/ forwarding
#開啟IPv6路由功能
計算機E作為SIP服務器,除設定IPv6地址之外,還需要為其配置默認路由,以便不僅可以為本子網內的主機提供服務,而且可以為其他子網的主機提供服務。SIP服務器的IPv6地址為3ffe: 327d: 8: 811: : 111 /64, 默認路由為3ffe:
327d: 8: 811: : 1 /64。設置方法如下:
ifconfig eth0 add 3ffe: 327d: 8: 811: : 1 /64
#添加IPv6地址
route - A inet6 add : : /0 gw 3ffe: 327d: 8: 811: : 1 /64
#添加默認路由
計算機A和C的IP地址分別為3ffe: 327d: 8: 810: : 5 /64和3ffe: 327d: 8: 810: : 7 /64,默認路由為3ffe: 327d: 8: 810: : 1 /64。計算機B和D的IP地址分別為3ffe: 327d: 8: 811: : 4 /64和3ffe: 327d: 8: 811: : 8 /64,默認路由為3ffe: 327d: 8: 811: : 1 /64。計算機A~D運行Windows XP操作系統(tǒng), IPv6配置方法與在Linux下有所不同。計算機A的配置方法為在命令行下使用命令:
ipv6 adu 4 /3ffe: 327d: 8: 810: : 5
#設定IPv6地址
ipv6 rtu 3ffe: 327d: 8: 810: : /64
#指定網絡前綴
ipv6 rtu : : /0 4 /3ffe: 327d: 8: 810: : 1
#設置默認路由
計算機B~D配置方法同上,只是將相應的IPv6地址和默認路由作些改動即可。
Linux可加載內核模塊編程
測試平臺使用Linux可加載內核模塊(Loadable KernelModule, LKM)來實現(xiàn)差分QoS調度。模塊(Module)是內核空間運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是其代碼可以在運行時鏈接到系統(tǒng)中作為內核的一部分運行或從內核取下,動態(tài)擴展內核的功能。動態(tài)可加載內核模塊的目標代碼一旦鏈接到內核,作用和靜態(tài)鏈接的內核目標代碼完全等價。
每個LKM至少由兩個基本的函數(shù)組成,一個是用于初始化所有的數(shù)據(jù)的函數(shù)init_module ( ) ,一個是用于清除數(shù)據(jù)從而能安全地退出的函數(shù)cleanup_module ( ) 。為了在模塊中使用Netfitler的鉤子函數(shù),需要在初始化函數(shù)中調用nf_register_hook ( ) 函數(shù)注冊Netfiter Hook, 在清除函數(shù)中調用nf _unregister_hook ( )函數(shù)注銷Netfiter Hook。具體過程如下:
/ /定義并填充用于注冊函數(shù)的數(shù)據(jù)結構
static struct nf_hook_op s post_route = {
{NULL, NULL},
DiffSev_post_route, / /處理函數(shù)
PF_ INET6, / /使用IPv6協(xié)議NF_ IP6_POST_ROUTING,
/ /使用IPv6的第一個Hook
NF_ IP6_PR I_F IRST,
/ /讓自己的函數(shù)首先執(zhí)行
};
/ /初始化程序
int init_module ()
{**
nf_register_hook (&post_route) ;
/ /注冊Netfiter Hook
return 0;
}
/ /清除程序
void cleanup_module ()
{
**
nf_unregister_hook (&post_route) ;
/ /注銷Netfiter Hook
return;
}
注冊鉤子函數(shù)后,需要編寫處理函數(shù),對截獲的數(shù)據(jù)包進行處理。模塊獲取數(shù)據(jù)包后,判斷其優(yōu)先級,然后根據(jù)放入不同的隊列,進行業(yè)務差分的調度,保證實時業(yè)務的服務質量。模塊在完成對數(shù)據(jù)包的操作之后,可以返回下列預定義的Netfiter返回之中的一個。
其中,最為常用的為前三個返回值。NF_DROP的含義是該數(shù)據(jù)包將被完全丟棄,所有為它分配的資源都應當被釋放。NF_ACCEP返回值告訴Netfilter到目前為止,該數(shù)據(jù)包還是被接受的并且該數(shù)據(jù)包應當被遞交到網絡堆棧的下一個階段。NF_STOLEN告訴Netfilter“忘掉”這個數(shù)據(jù)包。這里告訴Netfilter的是:該hook函數(shù)將從此開始對數(shù)據(jù)包的處理,并且Netfilter應當放棄對該數(shù)據(jù)包做任何的處理。但是,這并不意味著該數(shù)據(jù)包的資源已經被釋放。這個數(shù)據(jù)包以及它獨自的sk_buff數(shù)據(jù)結構仍然有效,只是hook函數(shù)從Netfilter獲取了該數(shù)據(jù)包的所有權。

程序中對數(shù)據(jù)判斷時,首先有一個對SIP服務器數(shù)據(jù)的處理,模塊對截獲數(shù)據(jù)包的源地址和目的地址進行檢查,只要是發(fā)往和來自SIP的數(shù)據(jù)都將被無條件返回,返回值為NF_ACCEPT。這樣用作會話連接建立服務器的數(shù)據(jù)被看作是網絡信令數(shù)據(jù),獲得絕對的高優(yōu)先級,保證了不同主機之間可以隨時建立連接。為了簡化操作,這里我們只比較IPv6地址的最后32位來判斷。以下為數(shù)據(jù)包處理函數(shù)片斷:
unsigned intVowlan_post_route (unsigned int hooknum, struct sk_buff
3 3 skb, const struct net_device 3 in, const struct net_device 3
out, int (3 okfn) ( struct sk_buff 3 ) )
{
struct ipv6hdr 3 ipv6h = (3 skb) - 》 nh. ipv6h;
struct in6_addr saddr = ipv6h - 》 saddr;
struct in6_addr daddr = ipv6h - 》 daddr;
int p rio = addr_belong(daddr) ;
/ /SIP服務器數(shù)據(jù),不進行處理,直接返回,具有絕對高優(yōu)先級
if ( saddr. s6_addr32 [3 ] = = 0x11010000) return NF_ACCEPT;
if (daddr. s6_addr32 [3 ] = = 0x11010000) return NF_ACCEPT;
**/ /區(qū)分QoS, 將數(shù)據(jù)插入不同的隊列
switch (p rio) {
case H IGH_PR IOR ITY: {
sendbuffer_insert(3 skb, H IGH_PR IOR ITY) ;
/ /加入高優(yōu)先級隊列
return NF_STOLEN;
}
case LOW_PR IOR ITY: {
sendbuffer_insert (3 skb, LOW_PR IOR ITY) ;
/ /加入低優(yōu)先級隊列
return NF_STOLEN; }
return NF_ACCEPT;
}
被加入不同優(yōu)先級隊列的數(shù)據(jù)包將被按照上一節(jié)中提到的調度算法被轉發(fā),因為本文旨在介紹開放式的試驗平臺,所以具體調度算法的程序實現(xiàn)不再贅述。
編譯內核模塊,將生成的DiffServ. o作為一個內核模塊插入系統(tǒng),此模塊可以象其他系統(tǒng)模塊一樣進行后臺運行。當內核模塊不再需要時,可以使用命令將其卸載。相應命令分別如下:
insmod DiffServ. o / /加載內核模塊
rmmod DiffServ / /卸載內核模塊
實驗演示結果
延時性能測試
首先讓會話1運行多媒體視頻業(yè)務,賦予高優(yōu)先級;會話2運行FTP數(shù)據(jù)傳輸業(yè)務,賦予低優(yōu)先級。開啟優(yōu)先級調度算法,使用IPv6下的Ping命令測定不同優(yōu)先級業(yè)務的通信延時情況??紤]程序開銷等因素,測得高優(yōu)先級的會話1延時為11ms~230ms,低優(yōu)先級的會話2延時為40ms~359 7ms。很顯然,高優(yōu)先級的多媒體業(yè)務由于被賦予了高的優(yōu)先級而得到了更好的服務質量。
多媒體業(yè)務通信演示
為了便于觀察算法調度效果,兩個會話都用來傳輸視頻業(yè)務,改變優(yōu)先級,觀察效果。先給兩個會話賦予相同的優(yōu)先級。這時兩個會話發(fā)起連接呼叫,由于SIP服務器被賦予了絕對高優(yōu)先級,所以呼叫總能順利完成,兩個會話建立連接。由于程序開銷等因素,建立連接后兩個視頻會話在通信時,都會有一些數(shù)據(jù)丟失引起的不連續(xù)現(xiàn)象。這時,將會話1調整為高優(yōu)先級,會話2調整為低優(yōu)先級,可以看到會話1視頻變得十分流暢,但是會話2的通信效果變得更差。效果如圖4所示,其中a為會話1效果, b為會話2效果,圖中有一只鳥在飛,當鳥飛到白色標桿處時,會話2由于數(shù)據(jù)丟失,左側不遠處還有鳥的影子,而會話1由于優(yōu)先級比較高,所以比較流暢,畫面比較清晰。

調整兩個會話的優(yōu)先級,將會話2調整為高優(yōu)先級,會話1調整為低優(yōu)先級,這時看到會話2視頻變得十分流暢,但是會話1的通信效果變得較差。再切換優(yōu)先級,反復進行實驗,可以得到相同的效果,高優(yōu)先級的業(yè)務可以得到好的服務質量,也就是說,可以通過優(yōu)先級設置來保證實時業(yè)務的傳輸。
結語
為了進行實時多媒體業(yè)務QoS的研究,本文使用Linux操作系統(tǒng)基于IPv6設計并實現(xiàn)了的測試平臺。測試平臺使用NetFilter截獲數(shù)據(jù)包,然后根據(jù)具體算法對網絡數(shù)據(jù)包進行調度,實現(xiàn)QoS改善策略。測試平臺使用Linux的動態(tài)可加載模塊技術,以模塊的形式作為Linux系統(tǒng)的一部分來運行,所以效率較高,維護方便。實驗表明,測試平臺工作穩(wěn)定,可以很好地支持QoS算法的測試,同時,測試平臺有良好的開放性,很容易在其基礎上驗證其他的算法、方案,對于實時多媒體業(yè)務QoS研究測試有十分重要的意義。
責任編輯:gt
-
Linux
+關注
關注
88文章
11822瀏覽量
219602 -
操作系統(tǒng)
+關注
關注
37文章
7443瀏覽量
129644 -
移動通信
+關注
關注
10文章
2750瀏覽量
72170
發(fā)布評論請先 登錄
如何調出 IPv6 地址?
IPv6地址是什么,IPv6的意思
阿里云企業(yè)IPv6部署方案
IPv6如何啟用和測試/驗證功能
基于ARM的嵌入式設備接入IPv6網絡
是否有人通過這些測試并獲得Linux 4.14.98的TAHI IPv6認證?
信息家電遠程控制中IPv4 IPv6兼容的實現(xiàn)方案
基于LINUX系統(tǒng)的IPv6網絡安裝與調試
基于IPV6的嵌入式視頻監(jiān)控系統(tǒng)
IPv6,IPv6的應用,IPv6的原理是什么?
淺談IPV6(介紹IPV6的特點和功能)
IPv6 DNS代理軟件的設計與實現(xiàn)
基于Linux的IPv6復合防火墻的設計
基于Linux操作系統(tǒng)實現(xiàn)IPv6軟件測試平臺的應用方案
評論