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