- 相關(guān)推薦
基于以太網(wǎng)交換機的Linux協(xié)議棧虛擬化技術(shù)
摘要:網(wǎng)絡(luò )協(xié)議棧虛擬化的目標是在一臺網(wǎng)絡(luò )設備上虛擬出多個(gè)協(xié)議棧以實(shí)現網(wǎng)絡(luò )設備的一虛多功能。由于Linux操作系統的網(wǎng)絡(luò )協(xié)議棧本身是不支持這種網(wǎng)絡(luò )協(xié)議棧虛擬化技術(shù)的,因此本文通過(guò)對Linux操作系統3.11.10版本IPV4網(wǎng)絡(luò )協(xié)議棧進(jìn)行改造以實(shí)現Linux網(wǎng)絡(luò )協(xié)議棧的虛擬化,并在設備平臺上驗證了經(jīng)過(guò)網(wǎng)絡(luò )協(xié)議棧虛擬化改造后的以太網(wǎng)交換機對業(yè)務(wù)流的隔離功能。
關(guān)鍵詞:協(xié)議棧;虛擬化;網(wǎng)絡(luò )設備
1 引言
隨著(zhù)網(wǎng)絡(luò )規模的不斷擴大,業(yè)務(wù)種類(lèi)的不斷豐富,網(wǎng)絡(luò )對業(yè)務(wù)的隔離以及安全性、可靠性等屬性提出了越來(lái)越高的要求[1]。此外,隨著(zhù)硬件能力的迅速提升,多框、集群、分布式路由交換系統的成熟,單臺物理網(wǎng)絡(luò )設備的業(yè)務(wù)處理能力已經(jīng)達到了一個(gè)新的高度[2]。為了將單臺物理設備的強大業(yè)務(wù)處理能力充分利用,彈性的適應當前的業(yè)務(wù)需求和未來(lái)的發(fā)展,網(wǎng)絡(luò )設備的一虛多(即將一臺物理設備虛擬成多個(gè)邏輯設備)成為了網(wǎng)絡(luò )與通信界追求的目標[3]。Linux操作系統因其具有的開(kāi)源、安全和穩定等優(yōu)點(diǎn),受到網(wǎng)絡(luò )設備制造商的青睞,被廣泛應用到網(wǎng)絡(luò )設備的嵌入式開(kāi)發(fā)中。
目前,國內外對Linux操作系統虛擬化的研究都著(zhù)力于操作系統級的全局性資源隔離虛擬化,而缺少對網(wǎng)絡(luò )協(xié)議棧虛擬化的深入研究。對于小規模以太網(wǎng)而言,全局性的資源隔離會(huì )對網(wǎng)絡(luò )設備的進(jìn)程資源造成不必要的浪費,增加了網(wǎng)絡(luò )設備的負荷,影響網(wǎng)絡(luò )數據包處理速率。
因此,本文在以太網(wǎng)交換機設備上研究了Linux嵌入式操作系統中虛擬協(xié)議棧技術(shù),以實(shí)現業(yè)務(wù)流的隔離,提高單個(gè)以太網(wǎng)交換機設備的資源利用率[4]。
2 Linux網(wǎng)絡(luò )協(xié)議棧的層次結構
網(wǎng)絡(luò )協(xié)議棧是指TCP/IP協(xié)議棧,實(shí)現了一個(gè)網(wǎng)絡(luò )中數據傳輸的過(guò)程:包括上層協(xié)議到底層協(xié)議,和由底層協(xié)議到上層協(xié)議。Linux網(wǎng)絡(luò )協(xié)議棧的層次架構模型如圖1所示,最上面一層為用戶(hù)空間中的應用層,中間部分為內核空間中的網(wǎng)絡(luò )協(xié)議棧部分,底層為物理設備[5]。在網(wǎng)絡(luò )協(xié)議棧中用戶(hù)空間和內核空間之間的數據通過(guò)套接字緩存(socket buffer) 來(lái)傳遞,相應的數據結構為sk_buffer。
圖1 Linux網(wǎng)絡(luò )協(xié)議棧層次架構
Linux網(wǎng)絡(luò )協(xié)議棧的最上層是系統調用接口,為用戶(hù)空間中的應用程序提供一種訪(fǎng)問(wèn)內核網(wǎng)絡(luò )協(xié)議棧的接口。通過(guò)網(wǎng)絡(luò )協(xié)議棧進(jìn)行通信都需要對套接字進(jìn)行操作,網(wǎng)絡(luò )協(xié)議棧提供了兩種調用接口給用戶(hù)進(jìn)程。一種是在sys_socketcall中會(huì )根據網(wǎng)絡(luò )系統調用號調用具體的功能,另一種是通過(guò)普通文件操作來(lái)訪(fǎng)問(wèn)網(wǎng)絡(luò )協(xié)議棧,將套接口的輸入、輸出操作當成典型的文件讀寫(xiě)操作來(lái)進(jìn)行。
套接字是一個(gè)與協(xié)議無(wú)關(guān)的接口層,它提供了一組通用接口來(lái)支持各種協(xié)議,它對用戶(hù)層的應用程序屏蔽了與協(xié)議相關(guān)的實(shí)現細節,將應用程序發(fā)送的與協(xié)議無(wú)關(guān)的請求映射到與協(xié)議相關(guān)的實(shí)現。傳輸層負責數據的傳輸和數據的控制,提供端到端數據交換機制,傳輸層協(xié)議包括面向連接的TCP協(xié)議和面向無(wú)連接的UDP協(xié)議。網(wǎng)絡(luò )層負責接收、發(fā)送或轉發(fā)數據包,網(wǎng)絡(luò )層的協(xié)議包括IP協(xié)議、ARP協(xié)議、RARP協(xié)議、ICMP協(xié)議和IGMP協(xié)議等。鄰居子系統為三層協(xié)議地址與二層協(xié)議地址提供了的映射關(guān)系,此外還緩存了二層首部,以加速數據包的發(fā)送。在發(fā)送數據包的時(shí)候,先進(jìn)行路由查找,如果找到對應的路由,再查看鄰居表中是否存在相應的映射關(guān)系,如果不存在則新建對應的鄰居項;然后再判斷鄰居項是否為可用狀態(tài),如果不可用則把數據報存至發(fā)送緩存隊列后發(fā)送請求;在接收到請求應答后,將對應的鄰居項置為可用,并將其緩存隊列中的數據包發(fā)送出去;如果在指定時(shí)間內為收到響應包,則將對應鄰居項置為無(wú)效狀態(tài)。對于以太網(wǎng)交換機而言,鄰居子系統提供了三層IP地址和二層MAC地址的映射,鄰居表就是ARP表。
網(wǎng)絡(luò )協(xié)議棧底部是一個(gè)與硬件無(wú)關(guān)的網(wǎng)絡(luò )設備接口層,它將網(wǎng)絡(luò )層的不同協(xié)議與各種網(wǎng)絡(luò )設備連接在一起。設備無(wú)關(guān)接口層提供了一組通用函數供底層網(wǎng)絡(luò )設備驅動(dòng)程序和上層協(xié)議棧調用。當輸出數據時(shí)協(xié)議棧不必關(guān)心底層的網(wǎng)絡(luò )設備,而當輸入數據時(shí)網(wǎng)絡(luò )設備驅動(dòng)同樣也不必關(guān)心上層的協(xié)議棧。協(xié)議棧向設備發(fā)送數據包時(shí)都需調用dev_queue_xmit函數。該函數對sk_buffer進(jìn)行排隊,最終由底層設備驅動(dòng)程序進(jìn)行傳輸。而接收報文通常是調用netif_rx函數實(shí)現的。當底層設備驅動(dòng)程序收到一個(gè)報文時(shí),就會(huì )通過(guò)調用netif_rx函數將報文的sk_buffer上傳至網(wǎng)絡(luò )層。
以太網(wǎng)交換機設備上網(wǎng)絡(luò )接口卡(NIC)的相關(guān)信息是由net_device結構來(lái)描述的,net_device包括了硬件信息成員變量、接口信息成員變量、設備操作接口變量和一些輔助成員變量。網(wǎng)絡(luò )接口卡的IPv4地址等相關(guān)配置信息存放在in_device結構中,net_device中有一個(gè)指針指向in_device。每個(gè)網(wǎng)絡(luò )接口卡都會(huì )有一個(gè)對應的net_device結構。當設備啟動(dòng)時(shí)調用register_netdevice函數注冊到系統中,注冊過(guò)的網(wǎng)絡(luò )接口卡NIC可通過(guò)unregister_netdevice函數注銷(xiāo)。net_device結構中包含了一個(gè)名為hard_start_xmit的接口,通常在初始化網(wǎng)絡(luò )接口卡時(shí)設置該接口。當協(xié)議棧向網(wǎng)絡(luò )接口卡發(fā)送數據包時(shí),會(huì )通過(guò)設備無(wú)關(guān)接口調用到此接口[6]。
3 Linux協(xié)議棧虛擬化的實(shí)現框架
Linux協(xié)議棧虛擬化技術(shù)是屬于控制平面的虛擬化,Linux協(xié)議棧虛擬化技術(shù)的實(shí)現分為以下四個(gè)部分:路由表的虛擬化、網(wǎng)絡(luò )接口的虛擬化、與上層應用接口的虛擬化、套接字層的虛擬化。路由表的虛擬化通過(guò)對存儲路由表項的數據結構的虛擬化擴展來(lái)實(shí)現,使每一個(gè)虛擬出來(lái)的協(xié)議棧都對應一份獨立的路由轉發(fā)表實(shí)例,虛擬協(xié)議棧的路由轉發(fā)表實(shí)例之間互不干擾[7]。網(wǎng)絡(luò )接口的虛擬化使網(wǎng)絡(luò )接口卡在收發(fā)數據包的時(shí)候,可以區分出這個(gè)數據包是屬于哪個(gè)虛擬協(xié)議棧,也使數據包在協(xié)議棧中傳遞的時(shí)候,可能選擇正確的函數處理接口。以上兩部分都是通過(guò)virtual_id標識來(lái)區分不同的虛擬協(xié)議棧,每個(gè)虛擬協(xié)議棧都自己唯一的virtual_id標識,virtual_id和虛擬協(xié)議棧是一一對應的。
圖2 虛擬化協(xié)議棧架構
3.1 路由表的虛擬化
Linux協(xié)議棧中使用數據結構fib_table來(lái)描述路由表信息,所有的fib_table結構鏈接在全局散列表fib_table_hash中。fib_table_hash存儲在數據結構struct net中的struct netns_ipv4成員中。參數不同的fib_table_hash表示不同類(lèi)型的路由表,例如fib_table_hash[RT_TABLE_LOCAL]表示設備本地地址的路由表。路由表的虛擬化是將指針數據結構struct hlist_head*fib_table_hash重定義為指向指針的數據結構struct hlist_head** fib_table_hash,使用不同virtual_id標識來(lái)區分不同虛擬協(xié)議棧的路由表轉發(fā)實(shí)例,例如本地路由表就重定義為fib_table_hash[RT_TABLE_LOCAL][virtual_id]。
Linux協(xié)議棧中使用數據結構rtable來(lái)描述路由緩存,路由緩存鏈接在散列表rt_hash_bucket中,為了使路由緩存和虛擬路由表項實(shí)例一一對應,散列表rt_hash_bucket需要被重定義為virtual_id 個(gè)不同的散列表,即rt_hash_bucket[virtual_id]。
由于不同虛擬協(xié)議棧中的目的IP地址可以重用,所以相同的IP地址在鄰居子系統的ARP表中對應的目的MAC地址是不同的。而ARP表查找函數的輸入參數為net_device和目的IP地址,因此可以通過(guò)net_device來(lái)區分不同虛擬協(xié)議棧中IP地址對應的MAC地址。
3.2 網(wǎng)絡(luò )接口的虛擬化
協(xié)議棧底層網(wǎng)絡(luò )接口的虛擬化是通過(guò)協(xié)議棧的net_device結構實(shí)現的,需要在net_device數據結構中添加一個(gè)virtual_id標識,net_device數據結構中的virtual_id表示該net_device結構對應的網(wǎng)絡(luò )接口卡屬于該virtual_id對應的虛擬協(xié)議棧。
3.3 與上層應用接口的虛擬化
協(xié)議棧內部不同層次之間接口的虛擬化是通過(guò)在協(xié)議棧內部接口函數中添加參數virtual_id實(shí)現的,virtual_id表示了同一個(gè)接口函數中對不同虛擬協(xié)議棧進(jìn)行操作時(shí),選擇的表項結構是不同的。比如網(wǎng)絡(luò )設備狀態(tài)變化時(shí)或者網(wǎng)絡(luò )設備上IP配置變化時(shí),路由子系統收到通知鏈的通知,需要對路由表和路由緩存進(jìn)行添加、刪除、修改等操作,接口函數中的virtual_id可以選擇對應的路由表項實(shí)例進(jìn)行操作。同樣,OSPF、RIP、ISIS等路由協(xié)議在網(wǎng)絡(luò )路由拓撲變化時(shí),需要對路由表進(jìn)行動(dòng)態(tài)添加、修改、刪除的函數,因此修改路由表的接口函數傳入的參數struct fib_config結構中也需要增加virtual_id標識,用來(lái)標識將要操作的路由表轉發(fā)實(shí)例。
3.4 套接字層的虛擬化
在保證虛擬協(xié)議棧業(yè)務(wù)隔離的前提下,為了兼顧設備內存資源利用率,協(xié)議棧接口允許一定的共享,比如多個(gè)虛擬協(xié)議棧中同種類(lèi)型的業(yè)務(wù)流可以共享同一個(gè)socket接口。應用層的協(xié)議通過(guò)socket發(fā)送數據包的時(shí)候,需要在接收方的網(wǎng)絡(luò )地址結構中添加相應的virtual_id標識,使應用層的報文通過(guò)socket進(jìn)入協(xié)議棧之后可以區分不同的虛擬協(xié)議棧,在進(jìn)行報文轉發(fā)的時(shí)候也可以查找對應虛擬協(xié)議棧的路由表轉發(fā)實(shí)例。應用層的協(xié)議用socket接收數據包的時(shí)候,也可以從接收的地址結構中取出virtual_id標識,區分數據包是由哪個(gè)虛擬協(xié)議棧送上來(lái)的。
4 Linux虛擬協(xié)議棧的關(guān)鍵操作
由于網(wǎng)絡(luò )設備上的每個(gè)虛擬協(xié)議?梢詫O備的多個(gè)虛擬網(wǎng)絡(luò )接口卡NIC,所以可以通過(guò)網(wǎng)管配置命令將多個(gè)虛擬網(wǎng)絡(luò )接口卡的net_device結構用同一個(gè)virtual_id標識,標識為同一個(gè)邏輯組,這個(gè)邏輯組收發(fā)的所有數據包都交給同一個(gè)虛擬協(xié)議棧處理。當網(wǎng)絡(luò )設備的網(wǎng)絡(luò )接口卡NIC收到數據包的時(shí)候,根據網(wǎng)絡(luò )接口卡邏輯組的劃分,在數據包的地址結構中添加上對應的virtual_id標識,如圖3所示將存放其地址信息的sockaddr_in結構強制轉換成sockaddr_in_virtual結構。當數據包在協(xié)議棧上下層之間傳遞的時(shí)候,就根據virtual_id標識查找對應的函數接口和路由表項轉發(fā)實(shí)例[8]。當網(wǎng)絡(luò )設備從出端口發(fā)送數據包的時(shí)候,數據包不再帶有virtual_id標識,virtual_id標識只在設備內部有效,因此設備協(xié)議棧的虛擬化對對整個(gè)網(wǎng)絡(luò )是透明的。
圖3 sockaddr_in_virtual地址信息結構
5 Linux虛擬協(xié)議棧在以太網(wǎng)交換機上的實(shí)現
5.1 測試平臺的搭建
搭建的測試環(huán)境拓撲結構如圖4所示,三層交換機設備為烽火網(wǎng)絡(luò )的S5800系列三層千兆路由交換機。將網(wǎng)絡(luò )協(xié)議棧被改造后的Linux嵌入式操作系統download到三層交換機設備上,該交換機設備與四臺電腦相連,PC1和PC2屬于vlan1,PC3和PC4屬于vlan2,PC1和PC3 的IP 地址相同,PC2和PC4的IP 地址相同。
在網(wǎng)管界面中輸入配置命令行,將與PC1和PC2相連的交換機接口劃分為同一個(gè)邏輯組,它們的net_device數據結構中virtual_id都被賦值為1,與PC3和PC4相連的交換機接口也劃分為同一個(gè)邏輯組,它們的net_device數據結構中virtual_id都被賦值為2。因此, PC1和PC3發(fā)送到交換機的數據包分別被送往不同的虛擬協(xié)議棧,實(shí)現業(yè)務(wù)流的隔離。
圖4 以太網(wǎng)交換機測試拓撲
5.2 測試結果分析
圖5顯示了在電腦PC1上ping PC2的實(shí)驗結果,圖6顯示了在電腦PC3上ping PC4的實(shí)驗結果,雖然PC1和PC2的IP地址相同,但是業(yè)務(wù)流之間互不影響,相互隔離。圖7和圖8顯示了協(xié)議棧經(jīng)過(guò)一虛多虛擬化后每個(gè)虛擬協(xié)議棧都有自己獨立的路由轉發(fā)表。
由上可知,經(jīng)過(guò)網(wǎng)絡(luò )協(xié)議棧虛擬化的虛擬設備可以承載不同的業(yè)務(wù),或者服務(wù)于不同的用戶(hù)群,達到業(yè)務(wù)隔離提升網(wǎng)絡(luò )可靠性和安全性,降低用戶(hù)成本,并可以實(shí)現多用戶(hù)群管理隔離,有效簡(jiǎn)化運維。
圖5 PC1 ping PC2實(shí)驗結果
圖6 PC3 ping PC4實(shí)驗結果
圖7 虛擬協(xié)議棧1的路由表 圖8 虛擬協(xié)議棧2的路由表
6 結論
本文描述了Linux協(xié)議棧虛擬化技術(shù)的實(shí)現框架,并通過(guò)設備驗證了協(xié)議棧虛擬化技術(shù)對業(yè)務(wù)流的隔離。運用Linux協(xié)議棧的虛擬化技術(shù)可以將一臺以太網(wǎng)交換機虛擬成多臺專(zhuān)用的三層交換機,每個(gè)虛擬交換機都有自己獨立的路由表轉發(fā)實(shí)例VRF和相應的接口[9]。虛擬協(xié)議棧的交換機設備可以幫助用戶(hù)快速部署網(wǎng)絡(luò ),實(shí)現業(yè)務(wù)流的隔離,節約網(wǎng)絡(luò )成本,提高網(wǎng)絡(luò )的可拓展性和彈性[10]。
參考文獻
[1] 王佳雋,呂智慧,吳杰,等.云計算技術(shù)發(fā)展分析及其應用探討[J].計算機工程與設計,2010(20):4404-4409.
[2] Smith J.E, Nair Ravi. The Architecture of Virtual Machines[J]. IEEE Computer, 2005 ,38(5)
[3] N.M.M.K.Chowdhury, R.Boutaba, Network virtalization:state of the Art and research challenges[J].IEEE Communication Magazine, 2009,47(7):20-26
[4] 徐立冰.云計算和大數據時(shí)代網(wǎng)絡(luò )技術(shù)揭秘[M].北京:人民郵電出版社,2013:133-154.
[5] 樊東東,莫瀾.Linux內核源碼剖析-TCP/IP實(shí)現[M].北京: 機械工業(yè)出版社, 2010: 11-14.
[6] O’Reilly Media,Inc.深入理解Linux網(wǎng)絡(luò )技術(shù)內幕[M].夏安.閆江毓.黃景昌,譯.北京:中國電力出版社,2009:145-167.
[7] E. Rosen, Y. Rekhter, BGP/MPLS IP Virtual Private Networks[J].RFC4364. February 2006.
[8] 王東洋, 基于虛擬設備的虛擬交換機設計[J]. SOFTWARE , 2012,33(1).
[9] 任德玲.韋衛.基于IPSec的MPLS IP VPN 的設計與實(shí)現[J].計算機應用研究,2006,23(3):116-118.
[10] 李丹,陳貴海,任豐原,等.數據中心網(wǎng)絡(luò )的研究進(jìn)展與趨勢[J].計算機學(xué)報,2014,37(2):267-268.
【基于以太網(wǎng)交換機的Linux協(xié)議棧虛擬化技術(shù)】相關(guān)文章:
基于虛擬現實(shí)技術(shù)的物理實(shí)驗模擬03-07
基于OMAP5912的Linux內核移植技術(shù)03-07
基于Linux的信息發(fā)布終端網(wǎng)絡(luò )通信技術(shù)的研究03-07
光纖環(huán)路工業(yè)以太網(wǎng)交換機的設計03-18
基于 CATIA和 VIRTOOLS技術(shù)的虛擬機艙漫游研究03-02
試論計算機虛擬化技術(shù)及其應用11-30