本發明涉及網絡虛擬化環境下的技術,尤其涉及網絡虛擬化環境下的一種報文封裝方法與設備。
背景技術:
隨著虛擬化和云環境的逐步發展,為了控制不同虛擬機和虛擬機之間,以及虛擬機和租戶之間的通信,隧道封裝技術被越來越多地運用,例如VXLAN(Virtual eXtensible Local Area Network,虛擬可擴展局域網)、NVGRE(Network Virtualization using Generic Routing Encapsulation,網絡虛擬化通用路由封裝)。
隧道封裝需要在原始的IP報文前面增加隧道協議報頭,因此將使得所傳輸的報文的長度變長。
在現有技術中,虛擬主機一般會根據自身接口的MTU(Maximum Transmission Unit,最大傳輸單元值),通常是1500字節,來控制所發送的數據報文的大小,但是由于需要采用隧道封裝技術,使得隧道協議封裝后的IP報文的長度增加,從而使得IP報文超出運行虛擬主機的宿主機的MTU,因而宿主機需要將IP報文進行分片,以滿足宿主機MTU,再由宿主機將分片后的IP報文向外傳輸。
由于以上原因,會導致網絡設備之間在傳輸IP報文時產生大量的分片報文,降低了端到端的傳輸性能,同時由于需要宿主機CPU(Central Processing Unit,中央處理器)對IP報文進行分片,因此增加了CPU的消耗。
技術實現要素:
針對以上現有問題,本發明的目的在于在網絡虛擬化的云環境下,提供一種報文封裝方法與設備,能夠有效避免分片報文。
根據本發明的第一個方面,提供一種報文封裝方法,包括步驟:接收虛擬主機發出的第一報文;將第一報文的默認分段值進行調整,以使按調整后的分段值對第一報文進行分段并隧道封裝后大小不超過最大傳輸單元值;按調整后的分段值對第一報文進行分段;將分段后的第一報文進行隧道封裝,以獲得數個第二報文,每個第二報文大小不超過最大傳輸單元值;將數個第二報文向外發送。
優選地,將第一報文的默認分段值進行調整,以使按調整后的分段值對第一報文進行分段并隧道封裝后不超過最大傳輸單元值的步驟包括:判斷按默認分段值對第一報文進行分段并隧道封裝后大小是否超過最大傳輸單元值;當超過時,減小默認分段值至修改分段值,修改分段值滿足修改分段值加上傳輸協議報頭以及隧道封裝報頭后大小不超過最大傳輸單元值;當未超過時,保持默認分段值不變。
優選地,使用通用分段延后處理對第一報文進行分段以及隧道封裝。
優選地,按調整后的分段值對第一報文進行分段的步驟,以及將分段后的第一報文進行隧道封裝,以獲得數個第二報文的步驟由宿主機的物理網卡執行。
優選地,將第一報文的默認分段值進行調整,以使按調整后的分段值對第一報文進行分段并隧道封裝后不超過最大傳輸單元值的步驟由宿主機的虛擬交換機執行。
根據本發明的第二個方面,提供一種報文封裝設備,包括接收單元,接收單元用于接收虛擬主機發出的第一報文;調整單元,調整單元用于調整第一報文的默認分段值,以使按調整后的分段值對第一報文進行分段并隧道封裝后大小不超過最大傳輸單元值;分段單元,分段單元用于按調整后的分段值對第一報文進行分段;封裝單元,封裝單元用于將分段后的第一報文進行隧道封裝,以獲得數個第二報文,每個第二報文不超過最大傳輸單元值;發送單元,發送單元用于將第二報文向外發送。
優選地,調整單元判斷按默認分段值對第一報文進行分段并隧道封裝后大小是否超過最大傳輸單元值;當超過時,調整單元減小默認分段值至修改分段值,修改分段值滿足修改分段值加上傳輸協議報頭以及隧道封裝報頭后大小不超過最大傳輸單元值;當未超過時,調整單元保持默認分段值不變。
優選地,報文封裝設備使用通用分段延后處理對第一報文進行分段以及隧道封裝。
優選地,分段單元以及封裝單元運行于報文封裝設備的物理網卡中。
優選地,調整單元運行于報文封裝設備的中央處理器中。
本發明中通過對第一報文的分段值進行調整,以使得按調整后的分段值對第一報文進行分段并隧道封裝后大小不超過宿主機MTU,從而使得宿主機CPU不需要再對隧道封裝后的報文進行分片,從而減少了網絡設備間的分片報文,提高了傳輸性能,減少了宿主機CPU消耗。
附圖說明
以下結合附圖和具體實施例對本發明的技術方案進行詳細的說明,以使本發明的特性和優點更為明顯。
圖1為現有技術中虛擬網絡環境下報文封裝傳輸數據流向圖;
圖2為本發明的一個實施例的報文封裝傳輸數據流向圖;
圖3為本發明的一個實施例的報文封裝設備的模塊示意圖;
圖4為本發明的一個實施例的報文封裝方法的流程圖;
圖5為圖4中步驟S102的詳細流程圖。
具體實施方式
以下將對本發明的實施例給出詳細的說明。盡管本發明將結合一些具體實施方式進行闡述和說明,但需要注意的是本發明并不僅僅只局限于這些實施方式。相反,對本發明進行的修改或者等同替換,均應涵蓋在本發明的權利要求范圍當中。
一些示例性實施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項操作描述成順序的處理,但是其中的許多操作可以被并行地、并發地或者同時實施。此外,各項操作的順序可以被重新安排。當其操作完成時所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應于方法、函數、規程、子例程、子程序等等。
應當理解的是,雖然在這里可能使用了術語“第一”、“第二”等等來描述各個單元或是數據,但是這些單元或數據不應當受這些術語限制。使用這些術語僅僅是為了將一個數據與另一個數據進行區分。舉例來說,在不背離示例性實施例的范圍的情況下,第一報文可以被稱為第二報文,并且類似地第二報文可以被稱為第一報文。
圖1為現有技術中虛擬網絡環境下報文封裝傳輸數據流向圖。下面通過圖1對現有技術中虛擬網絡環境下報文封裝以及傳輸進行介紹。
如圖1所示,虛擬主機1運行在宿主機2中,虛擬主機1通常由客戶進行管控。宿主機2的硬件通常包括CPU以及物理網卡22,其中CPU運行軟件OVS(Open VSwitch,虛擬交換機)21,通過OVS21以及物理網卡22對宿主機2的報文進行處理。
現有技術中,當虛擬主機1需要向網絡4發送報文時,首先由虛擬主機1發出第一報文31,宿主機2的OVS21接收第一報文31。OVS21根據第一報文31的默認分段值對第一報文31進行分段,從而獲得數個分段后第一報文32。接著OVS21對分段后第一報文32進行隧道封裝,以獲得數個第二報文33。當第二報文33的長度超出宿主機2的MTU時,OVS21會對第二報文33進行分片,即將超出MTU的第二報文33分成數個分片報文34。OVS21將上述的第二報文33以及分片報文34發送給物理網卡22,由物理網卡22發向網絡4。
根據上述描述可看出,由于第二報文33被分為分片報文34,從而使得設備間傳輸的報文的總數量增加。在網絡設備接收時,需要接收所有分片報文34,并對分片報文34進行重組,即將分片報文34重新組成為一個完整報文后再處理,因此使得網絡設備處理能力下降。對于宿主機2而言,由于需要增加分片處理,增加了宿主機2CPU消耗。在一些情況下,更可能由于未進行有效分片而導致物理網卡22發出的報文被網絡設備丟棄。
本發明正是針對以上現有技術中的報文分片問題。
圖2為本發明的一個實施例的報文封裝傳輸數據流向圖。圖3為本發明的一個實施例的報文封裝設備的模塊示意圖。圖4為本發明的一個實施例的報文封裝方法的流程圖。
結合圖2,圖3以及圖4所示,本發明提供的報文封裝設備即宿主機2,包括接收單元51,調整單元52,分段單元53,封裝單元54以及發送單元55。其中,接收單元51用于接收虛擬主機1發出的第一報文31。調整單元52用于調整第一報文31的默認分段值。分段單元53用于將第一報文31進行分段,以獲得數個分段后第一報文32。封裝單元54用于將分段后第一報文32進行隧道封裝,以獲得數個第二報文33。發送單元55用于將第二報文33向網絡4發送。
在本實施例中,接收單元51以及調整單元52被設置在宿主機2的OVS21中,OVS21由宿主機2的CPU運行,也就是說接收單元51以及調整單元52運行于宿主機2的CPU中。分段單元53,封裝單元54以及發送單元55運行于宿主機2的物理網卡22中。
本發明的報文封裝方法包括步驟:
S101:接收虛擬主機1發出的第一報文31。
S102:將第一報文31的默認分段值進行調整。
S103:按調整后的分段值對第一報文31進行分段。
S104:將分段后第一報文32進行隧道封裝,以獲得數個第二報文33。
S105:將數個第二報文33向外發送。
首先如步驟S101,接收單元51接收來自虛擬主機1發出的第一報文31。為了節省虛擬主機1對CPU的消耗,第一報文31可以為超大數據包,即第一報文31的大小超過虛擬主機1以及宿主機2的MTU。
接著如步驟S102,調整單元52對第一報文31的默認分段值進行調整。
具體而言,圖5為圖4中步驟S102的詳細流程圖,首先如步驟S1021,調整單元52判斷按默認分段值對第一報文31進行分段并隧道封裝后大小是否超過宿主機2的MTU。
通常默認分段值為虛擬主機1的MTU減去傳輸協議報頭。
作為可選的一種實施方式,調整單元52可以針對特定的隧道封裝方式設定分段值閾值,當默認分段值超出分段值閾值時,則判定按默認分段值對第一報文31進行分段并隧道封裝后大小超過宿主機2的MTU。
接著調整單元52根據不同判定結果對默認分段值進行調整。如步驟S1022,若判定超過時,調整單元52減小默認分段值至修改分段值。修改分段值滿足修改分段值加上傳輸協議報頭以及隧道封裝報頭后大小不超過宿主機2的MTU。
作為一可選的實施方式,調整單元52針對不同第一報文31計算優選的修改分段值,以使得第一報文31被分段的數量最少。
在本發明中,修改分段值是基于所有傳輸層協議的,并不限于TCP(Transmission Control Protocol,傳輸控制協議)協議,對于基于UDP協議(User Datagram Protocol,用戶數據報協議)的報文同樣適用。
如步驟S1021和S1023,當調整單元52判定按默認分段值對第一報文31進行分段并隧道封裝后大小未超過宿主機2的MTU時,調整單元52保持默認分段值不變。
繼續參考圖2,圖3以及圖4,如步驟S103,分段單元53按調整后的分段值對第一報文31進行分段,以獲得數個分段后第一報文32。
如步驟S104,封裝單元54對分段后第一報文32進行隧道封裝,以獲得數個第二報文33。具體而言,封裝單元54對于分段后第一報文32加上傳輸協議報頭以及隧道封裝報頭。這里的傳輸協議報頭例如可以是IP協議報頭,隧道封裝報頭例如可以是VXLAN報頭。
最后如步驟S105,發送單元55將數個第二報文33向網絡5發送。
通過以上描述可看出,由于對第一報文1的默認分段值進行了調整,因此本發明中的第二報文33不會超過宿主機2的MTU。與現有技術相比,本發明不再需要對第二報文33進行分片,從而避免了設備間傳輸的報文的總數量增加。網絡設備也不再需要對分片報文進行重組,從而提高了網絡設備處理能力。對于宿主機2而言,由于避免了分片處理步驟,減少了宿主機2CPU的消耗。同時,也防止報文被網絡設備丟棄,增加了傳輸可靠性。
在本發明中,接收單元51以及調整單元52運行于宿主機2的CPU中,具體而言,步驟S102將第一報文31的默認分段值進行調整的步驟由宿主機2的OVS21執行。由于對于默認分段值的調整是由OVS21實現的,不需要虛擬主機1做任何變動,對于客戶運營不會產生影響。
在一優選的實施例中,宿主機2使用GSO技術(Generic Segmentation Offload,通用分段延后處理),即宿主機2判斷物理網卡22是否支持分段延后處理,如支持,則宿主機2將第一報文31分段以及隧道封裝的工作延遲到由物理網卡22處理,如不支持,則宿主機2通過OVS21處理第一報文31分段以及隧道封裝。
作為一種可選的實施方式,本實施例中,步驟S103以及步驟S104,即按調整后的分段值對第一報文31進行分段的步驟,以及將分段后第一報文32進行隧道封裝以獲得數個第二報文33的步驟由宿主機2的物理網卡22執行。也就是說,分段單元53,封裝單元54以及發送單元55均運行于宿主機2的物理網卡22中。
通過這樣的設置,使得OVS21不再需要對第一報文31進行分段以及隧道封裝,而只需要對默認分段值進行調整。從而減少了宿主機2CPU的能耗,整體上提高報文處理速度。
由于本發明不需要對第二報文33進行分片,因此不會發生后續步驟再次由物理網卡22轉回CPU執行分片的情況,在保證了報文處理速率的同時,也防止了由于后續OVS未進行有效分片而導致物理網卡22發出的報文被網絡設備丟棄的情況。
在其他實施例中,對于步驟S103以及步驟S104也可以不由物理網卡22執行,而通過OVS21執行。
需要說明的是,本發明是網絡虛擬化環境下的報文封裝的一種應用。在本發明的實現過程中,會涉及到多個軟件功能模塊的應用。如在仔細閱讀申請文件、準確理解本發明的實現原理和發明目的以后,在結合現有公知技術的情況下,本領域技術人員完全可以運用其掌握的軟件編程技能實現本發明。前述報文封裝方法中對報文的具體分段以及隧道封裝的方法,均可參考現有技術中的方法,前述報文封裝設備還包括但不限于存儲單元等,凡本發明申請文件提及的均屬此范疇,申請人不再一一列舉。
以上僅是本發明的具體應用范例,對本發明的保護范圍不構成任何限制。除上述實施例外,本發明還可以有其它實施方式。凡采用等同替換或等效變換形成的技術方案,均落在本發明所要求保護的范圍之內。