1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. 基于以太網交換機的Linux協議棧虛擬化技術

        時間:2024-08-23 14:51:40 計算機應用畢業論文 我要投稿
        • 相關推薦

        基于以太網交換機的Linux協議棧虛擬化技術

          摘要:網絡協議棧虛擬化的目標是在一臺網絡設備上虛擬出多個協議棧以實現網絡設備的一虛多功能。由于Linux操作系統的網絡協議棧本身是不支持這種網絡協議棧虛擬化技術的,因此本文通過對Linux操作系統3.11.10版本IPV4網絡協議棧進行改造以實現Linux網絡協議棧的虛擬化,并在設備平臺上驗證了經過網絡協議棧虛擬化改造后的以太網交換機對業務流的隔離功能。

        基于以太網交換機的Linux協議棧虛擬化技術

          關鍵詞:協議棧;虛擬化;網絡設備

          1 引言

          隨著網絡規模的不斷擴大,業務種類的不斷豐富,網絡對業務的隔離以及安全性、可靠性等屬性提出了越來越高的要求[1]。此外,隨著硬件能力的迅速提升,多框、集群、分布式路由交換系統的成熟,單臺物理網絡設備的業務處理能力已經達到了一個新的高度[2]。為了將單臺物理設備的強大業務處理能力充分利用,彈性的適應當前的業務需求和未來的發展,網絡設備的一虛多(即將一臺物理設備虛擬成多個邏輯設備)成為了網絡與通信界追求的目標[3]。Linux操作系統因其具有的開源、安全和穩定等優點,受到網絡設備制造商的青睞,被廣泛應用到網絡設備的嵌入式開發中。

          目前,國內外對Linux操作系統虛擬化的研究都著力于操作系統級的全局性資源隔離虛擬化,而缺少對網絡協議棧虛擬化的深入研究。對于小規模以太網而言,全局性的資源隔離會對網絡設備的進程資源造成不必要的浪費,增加了網絡設備的負荷,影響網絡數據包處理速率。

          因此,本文在以太網交換機設備上研究了Linux嵌入式操作系統中虛擬協議棧技術,以實現業務流的隔離,提高單個以太網交換機設備的資源利用率[4]。

          2 Linux網絡協議棧的層次結構

          網絡協議棧是指TCP/IP協議棧,實現了一個網絡中數據傳輸的過程:包括上層協議到底層協議,和由底層協議到上層協議。Linux網絡協議棧的層次架構模型如圖1所示,最上面一層為用戶空間中的應用層,中間部分為內核空間中的網絡協議棧部分,底層為物理設備[5]。在網絡協議棧中用戶空間和內核空間之間的數據通過套接字緩存(socket buffer) 來傳遞,相應的數據結構為sk_buffer。

          圖1 Linux網絡協議棧層次架構

          Linux網絡協議棧的最上層是系統調用接口,為用戶空間中的應用程序提供一種訪問內核網絡協議棧的接口。通過網絡協議棧進行通信都需要對套接字進行操作,網絡協議棧提供了兩種調用接口給用戶進程。一種是在sys_socketcall中會根據網絡系統調用號調用具體的功能,另一種是通過普通文件操作來訪問網絡協議棧,將套接口的輸入、輸出操作當成典型的文件讀寫操作來進行。

          套接字是一個與協議無關的接口層,它提供了一組通用接口來支持各種協議,它對用戶層的應用程序屏蔽了與協議相關的實現細節,將應用程序發送的與協議無關的請求映射到與協議相關的實現。傳輸層負責數據的傳輸和數據的控制,提供端到端數據交換機制,傳輸層協議包括面向連接的TCP協議和面向無連接的UDP協議。網絡層負責接收、發送或轉發數據包,網絡層的協議包括IP協議、ARP協議、RARP協議、ICMP協議和IGMP協議等。鄰居子系統為三層協議地址與二層協議地址提供了的映射關系,此外還緩存了二層首部,以加速數據包的發送。在發送數據包的時候,先進行路由查找,如果找到對應的路由,再查看鄰居表中是否存在相應的映射關系,如果不存在則新建對應的鄰居項;然后再判斷鄰居項是否為可用狀態,如果不可用則把數據報存至發送緩存隊列后發送請求;在接收到請求應答后,將對應的鄰居項置為可用,并將其緩存隊列中的數據包發送出去;如果在指定時間內為收到響應包,則將對應鄰居項置為無效狀態。對于以太網交換機而言,鄰居子系統提供了三層IP地址和二層MAC地址的映射,鄰居表就是ARP表。

          網絡協議棧底部是一個與硬件無關的網絡設備接口層,它將網絡層的不同協議與各種網絡設備連接在一起。設備無關接口層提供了一組通用函數供底層網絡設備驅動程序和上層協議棧調用。當輸出數據時協議棧不必關心底層的網絡設備,而當輸入數據時網絡設備驅動同樣也不必關心上層的協議棧。協議棧向設備發送數據包時都需調用dev_queue_xmit函數。該函數對sk_buffer進行排隊,最終由底層設備驅動程序進行傳輸。而接收報文通常是調用netif_rx函數實現的。當底層設備驅動程序收到一個報文時,就會通過調用netif_rx函數將報文的sk_buffer上傳至網絡層。

          以太網交換機設備上網絡接口卡(NIC)的相關信息是由net_device結構來描述的,net_device包括了硬件信息成員變量、接口信息成員變量、設備操作接口變量和一些輔助成員變量。網絡接口卡的IPv4地址等相關配置信息存放在in_device結構中,net_device中有一個指針指向in_device。每個網絡接口卡都會有一個對應的net_device結構。當設備啟動時調用register_netdevice函數注冊到系統中,注冊過的網絡接口卡NIC可通過unregister_netdevice函數注銷。net_device結構中包含了一個名為hard_start_xmit的接口,通常在初始化網絡接口卡時設置該接口。當協議棧向網絡接口卡發送數據包時,會通過設備無關接口調用到此接口[6]。

          3 Linux協議棧虛擬化的實現框架

          Linux協議棧虛擬化技術是屬于控制平面的虛擬化,Linux協議棧虛擬化技術的實現分為以下四個部分:路由表的虛擬化、網絡接口的虛擬化、與上層應用接口的虛擬化、套接字層的虛擬化。路由表的虛擬化通過對存儲路由表項的數據結構的虛擬化擴展來實現,使每一個虛擬出來的協議棧都對應一份獨立的路由轉發表實例,虛擬協議棧的路由轉發表實例之間互不干擾[7]。網絡接口的虛擬化使網絡接口卡在收發數據包的時候,可以區分出這個數據包是屬于哪個虛擬協議棧,也使數據包在協議棧中傳遞的時候,可能選擇正確的函數處理接口。以上兩部分都是通過virtual_id標識來區分不同的虛擬協議棧,每個虛擬協議棧都自己唯一的virtual_id標識,virtual_id和虛擬協議棧是一一對應的。

          圖2 虛擬化協議棧架構

          3.1 路由表的虛擬化

          Linux協議棧中使用數據結構fib_table來描述路由表信息,所有的fib_table結構鏈接在全局散列表fib_table_hash中。fib_table_hash存儲在數據結構struct net中的struct netns_ipv4成員中。參數不同的fib_table_hash表示不同類型的路由表,例如fib_table_hash[RT_TABLE_LOCAL]表示設備本地地址的路由表。路由表的虛擬化是將指針數據結構struct hlist_head*fib_table_hash重定義為指向指針的數據結構struct hlist_head** fib_table_hash,使用不同virtual_id標識來區分不同虛擬協議棧的路由表轉發實例,例如本地路由表就重定義為fib_table_hash[RT_TABLE_LOCAL][virtual_id]。

          Linux協議棧中使用數據結構rtable來描述路由緩存,路由緩存鏈接在散列表rt_hash_bucket中,為了使路由緩存和虛擬路由表項實例一一對應,散列表rt_hash_bucket需要被重定義為virtual_id 個不同的散列表,即rt_hash_bucket[virtual_id]。

          由于不同虛擬協議棧中的目的IP地址可以重用,所以相同的IP地址在鄰居子系統的ARP表中對應的目的MAC地址是不同的。而ARP表查找函數的輸入參數為net_device和目的IP地址,因此可以通過net_device來區分不同虛擬協議棧中IP地址對應的MAC地址。

          3.2 網絡接口的虛擬化

          協議棧底層網絡接口的虛擬化是通過協議棧的net_device結構實現的,需要在net_device數據結構中添加一個virtual_id標識,net_device數據結構中的virtual_id表示該net_device結構對應的網絡接口卡屬于該virtual_id對應的虛擬協議棧。

          3.3 與上層應用接口的虛擬化

          協議棧內部不同層次之間接口的虛擬化是通過在協議棧內部接口函數中添加參數virtual_id實現的,virtual_id表示了同一個接口函數中對不同虛擬協議棧進行操作時,選擇的表項結構是不同的。比如網絡設備狀態變化時或者網絡設備上IP配置變化時,路由子系統收到通知鏈的通知,需要對路由表和路由緩存進行添加、刪除、修改等操作,接口函數中的virtual_id可以選擇對應的路由表項實例進行操作。同樣,OSPF、RIP、ISIS等路由協議在網絡路由拓撲變化時,需要對路由表進行動態添加、修改、刪除的函數,因此修改路由表的接口函數傳入的參數struct fib_config結構中也需要增加virtual_id標識,用來標識將要操作的路由表轉發實例。

          3.4 套接字層的虛擬化

          在保證虛擬協議棧業務隔離的前提下,為了兼顧設備內存資源利用率,協議棧接口允許一定的共享,比如多個虛擬協議棧中同種類型的業務流可以共享同一個socket接口。應用層的協議通過socket發送數據包的時候,需要在接收方的網絡地址結構中添加相應的virtual_id標識,使應用層的報文通過socket進入協議棧之后可以區分不同的虛擬協議棧,在進行報文轉發的時候也可以查找對應虛擬協議棧的路由表轉發實例。應用層的協議用socket接收數據包的時候,也可以從接收的地址結構中取出virtual_id標識,區分數據包是由哪個虛擬協議棧送上來的。

          4 Linux虛擬協議棧的關鍵操作

          由于網絡設備上的每個虛擬協議?梢詫O備的多個虛擬網絡接口卡NIC,所以可以通過網管配置命令將多個虛擬網絡接口卡的net_device結構用同一個virtual_id標識,標識為同一個邏輯組,這個邏輯組收發的所有數據包都交給同一個虛擬協議棧處理。當網絡設備的網絡接口卡NIC收到數據包的時候,根據網絡接口卡邏輯組的劃分,在數據包的地址結構中添加上對應的virtual_id標識,如圖3所示將存放其地址信息的sockaddr_in結構強制轉換成sockaddr_in_virtual結構。當數據包在協議棧上下層之間傳遞的時候,就根據virtual_id標識查找對應的函數接口和路由表項轉發實例[8]。當網絡設備從出端口發送數據包的時候,數據包不再帶有virtual_id標識,virtual_id標識只在設備內部有效,因此設備協議棧的虛擬化對對整個網絡是透明的。

          圖3 sockaddr_in_virtual地址信息結構

          5 Linux虛擬協議棧在以太網交換機上的實現

          5.1 測試平臺的搭建

          搭建的測試環境拓撲結構如圖4所示,三層交換機設備為烽火網絡的S5800系列三層千兆路由交換機。將網絡協議棧被改造后的Linux嵌入式操作系統download到三層交換機設備上,該交換機設備與四臺電腦相連,PC1和PC2屬于vlan1,PC3和PC4屬于vlan2,PC1和PC3 的IP 地址相同,PC2和PC4的IP 地址相同。

          在網管界面中輸入配置命令行,將與PC1和PC2相連的交換機接口劃分為同一個邏輯組,它們的net_device數據結構中virtual_id都被賦值為1,與PC3和PC4相連的交換機接口也劃分為同一個邏輯組,它們的net_device數據結構中virtual_id都被賦值為2。因此, PC1和PC3發送到交換機的數據包分別被送往不同的虛擬協議棧,實現業務流的隔離。

          圖4 以太網交換機測試拓撲

          5.2 測試結果分析

          圖5顯示了在電腦PC1上ping PC2的實驗結果,圖6顯示了在電腦PC3上ping PC4的實驗結果,雖然PC1和PC2的IP地址相同,但是業務流之間互不影響,相互隔離。圖7和圖8顯示了協議棧經過一虛多虛擬化后每個虛擬協議棧都有自己獨立的路由轉發表。

          由上可知,經過網絡協議棧虛擬化的虛擬設備可以承載不同的業務,或者服務于不同的用戶群,達到業務隔離提升網絡可靠性和安全性,降低用戶成本,并可以實現多用戶群管理隔離,有效簡化運維。

          圖5 PC1 ping PC2實驗結果

          圖6 PC3 ping PC4實驗結果

          圖7 虛擬協議棧1的路由表 圖8 虛擬協議棧2的路由表

          6 結論

          本文描述了Linux協議棧虛擬化技術的實現框架,并通過設備驗證了協議棧虛擬化技術對業務流的隔離。運用Linux協議棧的虛擬化技術可以將一臺以太網交換機虛擬成多臺專用的三層交換機,每個虛擬交換機都有自己獨立的路由表轉發實例VRF和相應的接口[9]。虛擬協議棧的交換機設備可以幫助用戶快速部署網絡,實現業務流的隔離,節約網絡成本,提高網絡的可拓展性和彈性[10]。

          參考文獻

          [1] 王佳雋,呂智慧,吳杰,等.云計算技術發展分析及其應用探討[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] 徐立冰.云計算和大數據時代網絡技術揭秘[M].北京:人民郵電出版社,2013:133-154.

          [5] 樊東東,莫瀾.Linux內核源碼剖析-TCP/IP實現[M].北京: 機械工業出版社, 2010: 11-14.

          [6] O’Reilly Media,Inc.深入理解Linux網絡技術內幕[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 的設計與實現[J].計算機應用研究,2006,23(3):116-118.

          [10] 李丹,陳貴海,任豐原,等.數據中心網絡的研究進展與趨勢[J].計算機學報,2014,37(2):267-268.

        【基于以太網交換機的Linux協議棧虛擬化技術】相關文章:

        基于虛擬扇區的Flash存儲管理技術03-18

        基于虛擬現實技術的景物仿真03-08

        基于虛擬現實技術的物理實驗模擬03-07

        關于容器虛擬化技術研究03-02

        基于OMAP5912的Linux內核移植技術03-07

        基于Linux的信息發布終端網絡通信技術的研究03-07

        光纖環路工業以太網交換機的設計03-18

        基于 CATIA和 VIRTOOLS技術的虛擬機艙漫游研究03-02

        試論計算機虛擬化技術及其應用11-30

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>