專利名稱:在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法
技術領域:
本發(fā)明涉及計算機網絡環(huán)境仿真技術領域,具體地說是一種在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,它可以應用于計算機網絡和網絡安全領域的底層數據轉發(fā)模擬仿真和網絡環(huán)境模擬仿真。
背景技術:
現有的物理網卡(Network Interface Card,簡稱NIC),也稱網絡適配器,是主機與網絡相互連接的接口。無論是普通主機還是服務器,只要連接到局域網,就需要安裝一塊網卡。如果有必要,一臺設備也可以同時配置多塊網卡。主機或網絡設備之間在進行相互通訊時,在底層是以幀的方式進行傳輸的。網卡的功能主要有兩個一是將主機和網絡設備中的數據封裝為幀,并將數據發(fā)送到網絡上去;二是接收網絡上傳過來的幀,并將幀重新組合成數據,發(fā)送到所在主機和設備中。網卡接收所有在網絡上傳輸的信號,但只接受發(fā)送到該主機設備的幀和廣播幀,將其余的幀丟棄,然后傳送到系統做進一步處理。當主機發(fā)送數據時,網卡等待合適的時間將分組插入到數據流中。接收系統通知主機消息是否完整地到達,如果出現問題,將要求對方重新發(fā)送。每塊網卡都有一個世界唯一的ID號,也叫做MAC(Media Access Control)地址。MAC地址用于在網絡中標識主機的身份,實現網絡中不同主機之間的通信和信息交換。
在很多應用環(huán)境中需要對真實的網卡進行軟件模擬,用軟件的方法實現真實網卡的功能,稱為虛擬網卡技術?,F有的虛擬網卡技術主要有三類網絡仿真軟件中的虛擬網卡、功能軟件虛擬網卡和虛擬網絡裝置中的虛擬網卡。
網絡仿真軟件中的虛擬網卡主要是指網絡仿真工具如OPNET、NS2等此類軟件系統中的網絡底層數據傳輸部分,但這部分不是獨立的虛擬網卡設備,它們是用軟件的方法在已經連接的兩個節(jié)點之間進行仿真數據的傳輸,這些數據傳輸對用戶是透明的,但是用戶可以根據仿真的需要設置數據的相關屬性。
功能軟件虛擬網卡主要是單獨的在某一個主機上運行軟件模塊,例如免費軟件SoftEther(虛擬網卡)。它主要是模擬以太網卡的工作順序,模擬集線器(HUB)功能tunnel特性,實現虛擬專用網(VPN)功能,使得系統把此軟件完全無礙的識別成一塊網卡,這樣通過連接和配置就可以將公網(Internet)內的某些機器連接起來當作內網(LAN)來使用。
虛擬網絡裝置中的虛擬網卡主要是指一些專用通信系統中為了在設備內部傳輸數據的需要而模擬的網卡,這種方法一般是在通信設備的某些模塊中模擬多塊網卡用來提高設備內部和設備之間數據傳輸的速率和數據傳輸的效率等。
網絡仿真軟件中的虛擬網卡技術不足之處在于其虛擬網卡及其數據通信方法對用戶是透明的,依賴特定的環(huán)境,擴展性差。功能軟件虛擬網卡技術的不足之處在于它只能應用在單機中,不能純粹的進行網絡環(huán)境仿真之用。虛擬網絡裝置中的虛擬網卡技術的不足之處在于它依賴硬件設備,開放性差。
發(fā)明內容
本發(fā)明的目的是針對現有技術中存在的不足,提供一種在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,解決網絡環(huán)境仿真中的底層數據傳輸問題,應用在網絡環(huán)境仿真中,不依賴于特定的硬件環(huán)境,擴展性、開放性好。
本發(fā)明的技術方案是在單臺計算機環(huán)境中,首先設計虛擬網卡和虛擬集線器(HUB),虛擬網卡的主要功能是發(fā)送、接收和緩存數據,用虛擬HUB將它們連接,按照數據通信的規(guī)則實現在網絡環(huán)境仿真中的虛擬網卡之間的數據通信,該方法的步驟包括(1)設計虛擬網卡和虛擬HUB(2)進行數據包的封裝;(3)將數據加入到發(fā)送方虛擬網卡發(fā)送數據緩沖區(qū);(4)發(fā)送方虛擬網卡發(fā)送數據包給虛擬HUB;(5)虛擬HUB接收數據包;(6)虛擬HUB發(fā)送數據包給接收方虛擬網卡;(7)接收方虛擬網卡將數據包加入接收數據緩沖區(qū);(8)對接收到的數據包進行拆封,還原以太幀和用戶數據。
上述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,所說的設計的虛擬網卡包含數據記錄和功能調用接口,數據記錄主要記錄虛擬網卡的基本信息,包括虛擬網卡名稱、MAC地址、IP地址、子網掩碼、網關、混雜模式標志、接收數據緩沖區(qū)、發(fā)送數據緩沖區(qū)、接收狀態(tài)標志、發(fā)送狀態(tài)標志。功能調用接口提供給外界,負責對虛擬網卡的基本數據記錄進行操作和修改。功能調用接口有獲取網卡名字、獲取和設置MAC地址、獲取和設置IP地址、獲取和設置網關、獲取和設置網卡混雜模式、獲取和設置子網掩碼。所說的設計的虛擬HUB是虛擬網卡之間通信的橋梁,在進行數據通信時,虛擬網卡之間要通過虛擬HUB連接在一起。虛擬HUB也包含數據記錄和功能調用接口兩個部分。其中數據記錄有HUB的名稱、端口數目、數據緩沖區(qū)、互斥鎖、網卡記錄列表、已連接網卡數目、發(fā)送數據包網卡標志。功能調用接口有獲取HUB名稱、獲取端口數目、獲取已連接網卡數目、添加和刪除注冊網卡。
上述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,所說的進行數據包的封裝,將用戶數據或者應用數據封裝為以太幀,再將以太幀封裝為虛擬網卡和虛擬HUB處理的數據包的過程為用戶數據封裝為以太幀遵循以太網上TCP/IP協議的標準,將用戶數據按照TCP/IP協議族的有關協議數據進行封裝,這些主要的協議類型有IP、TCP、UDP、ICMP、IGMP、ARP和RARP協議數據包。應用數據被封裝為各協議層次的數據,以及最終封裝為以太幀,其封裝順序為以太幀封裝IP數據或者ICMP數據或者IGMP數據;IP數據封裝TCP數據或者UDP數據;TCP數據和UDP數據封裝用戶數據。
上述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,所說的將數據加入到發(fā)送方虛擬網卡發(fā)送數據緩沖區(qū),其過程為當數據包準備好以后交給發(fā)送方虛擬網卡進行發(fā)送,首先檢查虛擬網卡的數據發(fā)送緩沖區(qū)的狀態(tài),如果發(fā)送緩沖區(qū)有存儲空間并且其狀態(tài)為空閑,則將準備好的數據加入發(fā)送緩沖區(qū)。如果虛擬網卡的發(fā)送緩沖區(qū)已滿或者其狀態(tài)為繁忙,則等待直到發(fā)送緩沖區(qū)有空間且其狀態(tài)空閑為止。
上述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,所說的發(fā)送方虛擬網卡發(fā)送數據包給虛擬HUB的過程為虛擬網卡向虛擬HUB發(fā)送數據采取主動發(fā)送的形式,即虛擬網卡內的守護線程不斷的檢測發(fā)送緩沖區(qū),一旦發(fā)現有數據就立即讀取該數據并嘗試著發(fā)送給虛擬HUB。另外,虛擬網卡仍采用回環(huán)形式,如果所發(fā)送的數據包的目的地址是自身的IP地址,則直接送入發(fā)送方網卡接收緩沖區(qū),不向外部發(fā)送。首先,虛擬網卡從數據發(fā)送緩沖區(qū)中讀取數據,準備發(fā)送給與之相連的虛擬HUB。接著,檢查數據包的目的地址是否是自身發(fā)送的網卡,如果數據包的目的地址是自身,則將數據包直接發(fā)送到發(fā)送方網卡自身的接收數據緩沖區(qū);否則,需要發(fā)送給虛擬HUB。然后,探測虛擬HUB的狀態(tài),如果虛擬HUB空閑,則直接發(fā)送;否則延遲設計的1、2、3、4…時間單位(時間單位可以根據需要設定,如秒、毫秒等)后再探測,一旦虛擬HUB空閑,則直接發(fā)送;否則繼續(xù)延遲,直到虛擬HUB空閑。
上述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,所說的虛擬HUB接收數據包的過程為虛擬HUB接收來自虛擬網卡的數據采取被動的形式,即等到虛擬網卡發(fā)送的數據到來時,它才接收并存入數據緩沖區(qū)。虛擬HUB首先對數據緩沖區(qū)加鎖,表明此時進行的是當前網卡送來的數據的緩沖區(qū)寫入操作,使數據緩沖區(qū)形成互斥狀態(tài)。由于虛擬HUB同時和多個虛擬網卡相連,并且其數據緩沖區(qū)為這幾個虛擬網卡共用,所以需要在對數據緩沖區(qū)進行操作時加鎖,避免多個網卡同時操作使數據緩沖區(qū)發(fā)生混亂。在數據緩沖區(qū)正確的寫入數據包后,對數據緩沖區(qū)解鎖。
上述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,所說的虛擬HUB發(fā)送數據包給接收方虛擬網卡的過程為虛擬HUB發(fā)送數據包時,首先檢測接收端虛擬網卡的數據緩沖區(qū)是否空閑,如果忙,則等待;如果接收端數據緩沖區(qū)空閑則讀取數據包準備發(fā)送。讀取數據包時,首先對數據緩沖區(qū)進行加鎖,然后再進行讀取操作,讀取到數據包后對數據緩沖區(qū)解鎖。接著遍歷在虛擬HUB里注冊的所有虛擬網卡,源數據包網卡除外,依次向這些網卡發(fā)送數據,這是一個廣播的過程。
上述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,所說的接收方虛擬網卡將數據包加入接收數據緩沖區(qū)的過程為虛擬網卡從虛擬HUB接收數據包時首先檢查自身的混雜模式標志,如果虛擬網卡已設置為混雜模式,則無條件接收該數據包;如果虛擬網卡沒有設置混雜模式則要對數據包的目的地址做出判斷,如果該數據包的目的地址是接收端網卡的地址則接收數據包,否則將數據包丟棄。接著,檢測接收數據緩沖區(qū)是否有空間,如果尚有空間則將數據直接寫入;如果接收數據緩沖區(qū)已滿則等待設計的單位時間后再進行檢測,但是檢測的次數不能超過三次,如果三次以內接收數據緩沖區(qū)已有足夠的空間則接收該數據包并將其寫入數據緩沖區(qū),如果滿三次還是沒有足夠的空間則丟棄該數據包。
上述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,所說的對接收到的數據包進行拆封,還原以太幀和用戶數據的過程為應用程序從虛擬網卡接收緩沖區(qū)讀取數據并進行拆封,拆封的處理過程正好與數據包的封裝過程相反,其過程是利用接收到的數據包的偏移量獲取到原始的以太數據幀,從標準的以太幀里可以解析出IP數據報或者同層次類型的數據,有了IP數據報就可以很容易得到TCP報文和UDP報文,從而除去TCP報文頭或者UDP報文頭而得到最終的用戶數據。
本發(fā)明與現有技術相比的有益效果本發(fā)明是對物理網卡的數據轉發(fā)等基本功能和主要功能進行模擬,并形成網絡環(huán)境仿真中的數據通信過程,它主要具有以下優(yōu)點擴展性好在本發(fā)明的基礎上可以很方便的擴展為虛擬網絡設備,基本的擴展思想是虛擬網絡設備包含一塊或者數塊虛擬網卡,把虛擬網卡作為核心的底層數據通信模塊,虛擬網絡設備的其它功能由用戶自己設定;通過虛擬網絡設備的互聯可以很方便的形成虛擬網絡環(huán)境,從而對網絡進行模擬仿真。
開放性好本發(fā)明充分考慮到用戶使用時進一步開發(fā)的需要,虛擬網卡和虛擬HUB的設計模塊化,數據通信的過程和方法簡單合理,可以為用戶提供眾多的功能調用接口,在此基礎上可以進行開放性的開發(fā)。
通用性強,本發(fā)明充分考慮到網絡底層數據傳輸的特性,使得以太幀和TCP/IP協議族的大部分協議數據包都能通過虛擬網卡系統進行傳輸,具有很強的通用性。
本發(fā)明可以應用在許多方面,例如計算機及網絡的研究、計算機網絡的仿真、特定網絡環(huán)境的模擬、網絡安全研究領域等。因此,本發(fā)明具有很好的社會效益和應用前景。
圖1是本發(fā)明虛擬網卡的邏輯結構示意2是本發(fā)明虛擬HUB的邏輯結構示意3是本發(fā)明虛擬網卡之間通過虛擬HUB連接進行數據通信的過程方框4是本發(fā)明以TCP協議為例的數據包封裝的過程示意5是本發(fā)明虛擬網卡發(fā)送數據給虛擬HUB的流程6是本發(fā)明虛擬網卡接收數據包流程圖具體實施方式
參照圖1,它是本發(fā)明虛擬網卡的邏輯結構示意圖,虛擬網卡包含數據記錄和功能調用接口。數據記錄主要記錄虛擬網卡的基本信息,包括虛擬網卡名稱、MAC地址、IP地址、子網掩碼、網關、混雜模式標志、接收數據緩沖區(qū)、發(fā)送數據緩沖區(qū)、接收狀態(tài)標志、發(fā)送狀態(tài)標志。功能調用接口提供給外界,負責對虛擬網卡的基本數據記錄進行操作和修改。功能調用接口有獲取網卡名字、獲取和設置MAC地址、獲取和設置IP地址、獲取和設置網關、獲取和設置網卡混雜模式、獲取和設置子網掩碼。接收數據緩沖區(qū)存儲虛擬網卡從虛擬HUB接收來的數據。發(fā)送數據緩沖區(qū)存儲準備發(fā)送給虛擬HUB的數據。虛擬網卡初始化時首先設置基本數據記錄,如網卡名稱、MAC地址、混雜模式標志等,接著向相連接的虛擬HUB進行連接登記。圖中守護線程的設計是很必要的,它要實時的監(jiān)測發(fā)送數據緩沖區(qū),當虛擬網卡發(fā)送數據的條件和虛擬HUB接收數據的條件滿足時,就從發(fā)送緩沖區(qū)讀取數據然后把數據發(fā)送給虛擬HUB。
參照圖2,它是本發(fā)明虛擬HUB的邏輯結構示意圖,虛擬HUB包括數據記錄和功能調用接口兩部分。數據記錄主要記錄虛擬HUB的基本信息,其中數據記錄有HUB的名稱、端口數目、數據緩沖區(qū)、互斥鎖、網卡記錄列表、已連接網卡數目、發(fā)送數據包網卡標志。功能調用接口提供給外界,負責對虛擬網卡的基本數據記錄進行操作和修改。功能調用接口有獲取HUB名稱、獲取端口數目、獲取已連接網卡數目、添加和刪除注冊網卡。虛擬HUB初始化時首先設置數據記錄,其次對向其請求連接登記的虛擬網卡進行注冊,將有關信息加入網卡記錄列表,并更新網卡連接數目。虛擬HUB里設置一個數據緩沖區(qū),而這一數據緩沖區(qū)面向已注冊的多個網卡,因此可能同時有多個數據操作請求發(fā)生,所以對于此數據緩沖區(qū)要添加軟件互斥鎖,使得多個數據操作請求之間互斥。守護線程實時的監(jiān)測數據緩沖區(qū),當虛擬HUB發(fā)送數據的條件和虛擬網卡接收數據的條件同時滿足時,就從數據緩沖區(qū)讀取數據,然后把數據發(fā)送給與之相連的虛擬網卡。
參照圖3,它是本發(fā)明虛擬網卡之間通過虛擬HUB連接進行數據通信的過程方框圖,從圖中可以看出,它是利用上述已設計的虛擬網卡和虛擬HUB連接起來組成的網絡環(huán)境中實現數據通信的,其過程為(1)數據包的封裝,將用戶數據或者應用數據封裝為以太幀,再將以太幀封裝為虛擬網卡和虛擬HUB處理的數據包。用戶數據封裝為以太幀要遵循以太網上TCP/IP協議的標準,將用戶數據按照TCP/IP協議族的有關協議數據進行封裝,這些主要的協議類型有IP、TCP、UDP、ICMP、IGMP、ARP和RARP協議數據包。應用數據被封裝為各協議層次的數據,以及最終封裝為以太幀,其封裝順序為以太幀封裝IP數據或者ICMP數據或者IGMP數據;IP數據封裝TCP數據或者UDP數據;TCP數據和UDP數據封裝用戶數據。
參照圖4,它是本發(fā)明以TCP協議為例的數據包封裝的過程示意圖,圖的最上層是需要傳輸的用戶數據,首先給用戶數據添加用戶數據Appl首部,添加了用戶數據頭的用戶數據稱為應用數據,應用數據再添加一個TCP首部就被封裝為TCP數據包,TCP數據包添加一個IP首部就被封裝為IP數據包,IP數據包分別添加以太網首部和以太網尾部就被封裝為以太網幀,以太網幀是直接通過以太網卡在以太網中傳輸的數據形式。這里只描述了TCP數據的封裝過程,UDP數據與TCP數據基本一致,唯一不同的是UDP傳給IP的信息單元稱作UDP數據報,而且UDP的首部長度為8字節(jié)。其它協議數據包封裝也有類似的過程。然后是將以太幀再做進一步的封裝,封裝的方法是首先定義新的數據包,新的數據包分為包頭部分和數據部分,將以太數據幀作為新的數據包的數據部分,新的數據包的包頭部分記錄以太數據幀在新的數據包中的偏移量等信息。利用偏移量可以準確地獲得數據包里的以太幀,從以太幀能夠很方便的獲得各個協議層次的數據,這也為將來對數據進行拆封提供了便利。
新的數據包的構造有三種途徑
1)從空數據包構造首先構造一個空的數據包,然后分別設置填充各個協議的協議頭字段和數據部分。
2)從已有的以太幀數據構造已經有一個以太層次的數據包,這時將此以太數據包暫存到數據緩沖區(qū)里,隨后讀取該以太數據包中所需要的數據成分構造新的數據包。
3)數據包拷貝已有同類型協議的數據包,要構造一個新的數據包并具有相同的內容,只需將原數據拷貝到新的數據包。
(2)將數據包加入到發(fā)送端的虛擬網卡發(fā)送緩沖區(qū),數據包準備好以后交給虛擬網卡來發(fā)送。首先檢查虛擬網卡的數據發(fā)送緩沖區(qū)的狀態(tài),如果發(fā)送緩沖區(qū)有存儲空間并且其狀態(tài)為空閑,則將準備好的數據加入發(fā)送緩沖區(qū)。如果虛擬網卡的發(fā)送緩沖區(qū)已滿或者其狀態(tài)為繁忙,則等待直到發(fā)送緩沖區(qū)有空間且其狀態(tài)空閑為止。
(3)發(fā)送方虛擬網卡將數據包發(fā)送給與之相連的虛擬HUB。
參照圖5,它是本發(fā)明虛擬網卡發(fā)送數據給虛擬HUB的流程圖,虛擬網卡向虛擬HUB發(fā)送數據采取主動發(fā)送的形式,即虛擬網卡內的守護線程不斷的檢測發(fā)送緩沖區(qū),一旦發(fā)現有數據就立即讀取該數據并嘗試著發(fā)送給虛擬HUB。另外,虛擬網卡(同實際的網卡一樣)仍采用回環(huán)形式,如果所發(fā)送的數據包的目的地址是自身的IP地址,則直接送入發(fā)送方網卡接收緩沖區(qū),不向外部發(fā)送。首先,虛擬網卡從數據發(fā)送緩沖區(qū)中讀取數據,準備發(fā)送給與之相連的虛擬HUB。接著,檢查數據包的目的地址是否是自身發(fā)送的網卡,如果數據包的目的地址是自身,則將數據包直接發(fā)送到發(fā)送方網卡自身的接收數據緩沖區(qū);否則,需要發(fā)送給虛擬HUB。然后,探測虛擬HUB的狀態(tài),如果虛擬HUB空閑,則直接發(fā)送;否則延遲設計的1、2、3、4…時間單位后再探測(時間單位可以根據需要設定,如秒、毫秒等),一旦虛擬HUB空閑,則直接發(fā)送;否則繼續(xù)延遲,直到虛擬HUB空閑。
(4)虛擬HUB接收來自虛擬網卡的數據包,虛擬HUB接收來自虛擬網卡的數據采取被動的形式,即等到虛擬網卡發(fā)送的數據到來時,它才接收并存入數據緩沖區(qū)。虛擬HUB首先對數據緩沖區(qū)加鎖,表明此時進行的是當前網卡送來的數據的緩沖區(qū)寫入操作,使數據緩沖區(qū)形成互斥狀態(tài)。因為虛擬HUB同時和多個虛擬網卡相連,并且其數據緩沖區(qū)為這幾個虛擬網卡共用,所以需要在對數據緩沖區(qū)進行操作時進行加鎖,避免多個網卡同時操作,使數據緩沖區(qū)發(fā)生混亂。在數據緩沖區(qū)正確的寫入數據包后,對數據緩沖區(qū)解鎖。
(5)虛擬HUB發(fā)送數據包給接收端虛擬網卡的接收緩沖區(qū),虛擬HUB發(fā)送數據包時,首先檢測接收端數據緩沖區(qū)是否空閑,如果忙,則等待;如果接收端數據緩沖區(qū)空閑則讀取數據包準備發(fā)送。讀取數據包時,首先對數據緩沖區(qū)加鎖,然后再進行讀取操作,讀取到數據包后對數據緩沖區(qū)解鎖。接著遍歷在虛擬HUB里注冊的所有虛擬網卡(源數據包網卡除外),依次向這些網卡發(fā)送數據,這是一個廣播的過程。
(6)虛擬網卡接收來自虛擬HUB的數據包。
參照圖6,它是本發(fā)明虛擬網卡接收數據包流程圖,虛擬網卡從虛擬HUB接收數據包時首先檢查自身的混雜模式標志,如果虛擬網卡已設置為混雜模式,則無條件接收該數據包;如果虛擬網卡沒有設置混雜模式則要對數據包的目的地址做出判斷,如果該數據包的目的地址是接收端網卡的地址則接收數據包,否則將數據包丟棄。接著,檢測接收數據緩沖區(qū)是否有空間,如果尚有空間則將數據直接寫入;如果接收數據緩沖區(qū)已滿則等待單位時間后再進行檢測,但是檢測的次數不能超過三次,如果三次以內接收數據緩沖區(qū)已有足夠的空間則接收該數據包并將其寫入數據緩沖區(qū),如果滿三次還是沒有足夠的空間則丟棄該數據包。
(7)對接收到的數據包進行拆封處理。
應用程序從虛擬網卡接收緩沖區(qū)讀取數據并進行拆封,拆封的處理過程正好與上述圖4所描述的數據包的封裝處理過程相反,其過程是利用接收到的數據包的偏移量獲取到原始的以太數據幀,從標準的以太幀里可以解析出IP數據報或者同層次類型的數據,有了IP數據報就可以很容易得到TCP報文和UDP報文,從而除去TCP報文頭或者UDP報文頭而得到最終的用戶數據。
權利要求
1.在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,其步驟如下(1)設計虛擬網卡和虛擬集線器HUB;(2)進行數據包的封裝;(3)將數據加入到發(fā)送方虛擬網卡發(fā)送數據緩沖區(qū);(4)發(fā)送方虛擬網卡發(fā)送數據包給虛擬HUB;(5)虛擬HUB接收數據包;(6)虛擬HUB發(fā)送數據包給接收方虛擬網卡;(7)接收方虛擬網卡將數據包加入接收數據緩沖區(qū);(8)對接收到的數據包進行拆封,還原以太幀和用戶數據。
2.根據權利要求1所述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,其特征在于設計的虛擬網卡包含數據記錄和功能調用接口,數據記錄主要記錄虛擬網卡的基本信息,包括虛擬網卡名稱、MAC地址、IP地址、子網掩碼、網關、混雜模式標志、接收數據緩沖區(qū)、發(fā)送數據緩沖區(qū)、接收狀態(tài)標志、發(fā)送狀態(tài)標志;功能調用接口提供給外界,負責對虛擬網卡的基本數據記錄進行操作和修改;功能調用接口有獲取網卡名字、獲取和設置MAC地址、獲取和設置IP地址、獲取和設置網關、獲取和設置網卡混雜模式、獲取和設置子網掩碼;設計的虛擬HUB是虛擬網卡之間通信的橋梁,在進行數據通信時,虛擬網卡之間要通過虛擬HUB連接在一起;虛擬HUB也包含數據記錄和功能調用接口兩個部分;其中數據記錄有HUB的名稱、端口數目、數據緩沖區(qū)、互斥鎖、網卡記錄列表、已連接網卡數目、發(fā)送數據包網卡標志;功能調用接口有獲取HUB名稱、獲取端口數目、獲取已連接網卡數目、添加和刪除注冊網卡。
3.根據權利要求1所述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,其特征在于所說的進行數據包的封裝,是將用戶數據或者應用數據封裝為以太幀,再將以太幀封裝為虛擬網卡和虛擬HUB處理的數據包,其過程為用戶數據封裝為以太幀遵循以太網上TCP/IP協議的標準,將用戶數據按照TCP/IP協議族的有關協議數據進行封裝,這些主要的協議類型有IP、TCP、UDP、ICMP、IGMP、ARP和RARP協議數據包,應用數據被封裝為各協議層次的數據,以及最終封裝為以太幀,其封裝順序為以太幀封裝IP數據或者ICMP數據或者IGMP數據;IP數據封裝TCP數據或者UDP數據;TCP數據和UDP數據封裝用戶數據。
4.根據權利要求1所述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,其特征在于所說的將數據加入到發(fā)送方虛擬網卡發(fā)送數據緩沖區(qū),其過程為當數據包準備好以后交給發(fā)送方虛擬網卡進行發(fā)送,首先檢查虛擬網卡的數據發(fā)送緩沖區(qū)的狀態(tài),如果發(fā)送緩沖區(qū)有存儲空間并且其狀態(tài)為空閑,則將準備好的數據加入發(fā)送緩沖區(qū),如果虛擬網卡的發(fā)送緩沖區(qū)已滿或者其狀態(tài)為繁忙,則等待,直到發(fā)送緩沖區(qū)有空間且其狀態(tài)空閑為止。
5.根據權利要求1所述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,其特征在于所說的發(fā)送方虛擬網卡發(fā)送數據包給虛擬HUB的過程為虛擬網卡向虛擬HUB發(fā)送數據采取主動發(fā)送的形式,即虛擬網卡內的守護線程不斷的檢測發(fā)送緩沖區(qū),一旦發(fā)現有數據就立即讀取該數據并嘗試著發(fā)送給虛擬HUB,另外,虛擬網卡采用回環(huán)形式,如果所發(fā)送的數據包的目的地址是自身的IP地址,則直接送入發(fā)送方網卡接收緩沖區(qū),不向外部發(fā)送,否則,需要發(fā)送給虛擬HUB,此時要探測虛擬HUB的狀態(tài),如果虛擬HUB空閑,則直接發(fā)送,否則延遲設計的時間單位后再探測,一旦虛擬HUB空閑,則直接發(fā)送;否則繼續(xù)延遲,直到虛擬HUB空閑。
6.根據權利要求1所述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,其特征在于所說的虛擬HUB接收數據包的過程為虛擬HUB接收來自虛擬網卡的數據采取被動的形式,即等到虛擬網卡發(fā)送的數據到來時,它才接收并存入數據緩沖區(qū),虛擬HUB首先對數據緩沖區(qū)加鎖,表明此時進行的是當前網卡送來的數據的緩沖區(qū)寫入操作,使數據緩沖區(qū)形成互斥狀態(tài),由于虛擬HUB同時和多個虛擬網卡相連,并且其數據緩沖區(qū)為這幾個虛擬網卡共用,所以需要在對數據緩沖區(qū)進行操作時加鎖,避免多個網卡同時操作使數據緩沖區(qū)發(fā)生混亂,在數據緩沖區(qū)正確的寫入數據包后,對數據緩沖區(qū)解鎖。
7.根據權利要求1所述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,其特征在于所說的虛擬HUB發(fā)送數據包給接收方虛擬網卡的過程為虛擬HUB發(fā)送數據包時,首先檢測接收端虛擬網卡的數據緩沖區(qū)是否空閑,如果忙,則等待;如果接收端數據緩沖區(qū)空閑則讀取數據包準備發(fā)送;讀取數據包時,首先對數據緩沖區(qū)進行加鎖,然后再進行讀取操作,讀取到數據包后對數據緩沖區(qū)解鎖;接著遍歷在虛擬HUB里注冊的所有虛擬網卡,源數據包網卡除外,依次向這些網卡發(fā)送數據,這是一個廣播的過程。
8.根據權利要求1所述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,其特征在于所說的接收方虛擬網卡將數據包加入接收數據緩沖區(qū)的過程為虛擬網卡從虛擬HUB接收數據包時首先檢查自身的混雜模式標志,如果虛擬網卡已設置為混雜模式,則無條件接收該數據包;如果虛擬網卡沒有設置混雜模式則要對數據包的目的地址做出判斷,如果該數據包的目的地址是接收端網卡的地址則接收數據包,否則將數據包丟棄;接著,檢測接收數據緩沖區(qū)是否有空間,如果尚有空間則將數據直接寫入;如果接收數據緩沖區(qū)已滿則等待設計的單位時間后再進行檢測,但是檢測的次數不能超過三次,如果三次以內接收數據緩沖區(qū)已有足夠的空間則接收該數據包并將其寫入數據緩沖區(qū),如果滿三次還是沒有足夠的空間則丟棄該數據包。
9.根據權利要求1所述的在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,其特征在于所說的對接收到的數據包進行拆封,還原以太幀和用戶數據的過程為應用程序從虛擬網卡接收緩沖區(qū)讀取數據并進行拆封,拆封的處理過程正好與數據包的封裝過程相反,其過程是利用接收到的數據包的偏移量獲取到原始的以太數據幀,從標準的以太幀里可以解析出IP數據報或者同層次類型的數據,有了IP數據報就可以很容易得到TCP報文和UDP報文,從而除去TCP報文頭或者UDP報文頭而得到最終的用戶數據。
全文摘要
本發(fā)明公開了一種在網絡環(huán)境仿真中采用虛擬網卡實現數據通信的方法,它涉及計算機網絡環(huán)境仿真技術領域,目的是針對現有技術中的問題,用本發(fā)明解決網絡環(huán)境仿真中的底層數據傳輸問題。首先設計虛擬網卡和虛擬HUB(集線器),用虛擬HUB連接虛擬網卡,按照數據通信規(guī)則進行虛擬網卡之間的數據通信,其過程為封裝數據包;將數據加入發(fā)送方虛擬網卡發(fā)送數據緩沖區(qū);發(fā)送方虛擬網卡發(fā)送數據包給虛擬HUB;虛擬HUB接收數據包;虛擬HUB發(fā)送數據包給接收方虛擬網卡;接收方虛擬網卡將數據包加入接收數據緩沖區(qū);對接收到的數據包進行拆封,還原以太幀和用戶數據。本發(fā)明可用于計算機網絡及網絡安全領域的底層數據轉發(fā)模擬仿真和網絡環(huán)境模擬仿真。
文檔編號H04L29/06GK1777142SQ20051009638
公開日2006年5月24日 申請日期2005年11月21日 優(yōu)先權日2005年11月21日
發(fā)明者馬建峰, 楊力, 楊延慶 申請人:西安電子科技大學