本發(fā)明屬于數(shù)據(jù)通信領(lǐng)域,尤其涉及到一種數(shù)據(jù)包構(gòu)造系統(tǒng)及其工作方法。
背景技術(shù):
對于網(wǎng)絡(luò)軟硬件產(chǎn)品,在上市發(fā)布前需要大量的真實流量進(jìn)行長期測試,已提早發(fā)現(xiàn)解決性能和功能上的問題。真實的流量特別是較高的(萬兆)往往是不可能直接拿到,出于用戶私密性和權(quán)限的限制。而市面上一些模擬流量的商用的數(shù)據(jù)包生成器,特別昂貴基本是100萬以上的價格,這給中小公司的產(chǎn)品測試帶來了困擾。
技術(shù)實現(xiàn)要素:
為解決上述問題,本發(fā)明提供了一種數(shù)據(jù)包構(gòu)造系統(tǒng),所述系統(tǒng)運行于服務(wù)器上,其包括原始數(shù)據(jù)包庫、數(shù)據(jù)放大模塊、放大倍數(shù)設(shè)置模塊。
所述原始數(shù)據(jù)包庫內(nèi)存儲有若干被預(yù)先分類的原始數(shù)據(jù)包,每個分類下具有一個或者若干個原始數(shù)據(jù)包。
所述數(shù)據(jù)放大模塊用于讀取原始數(shù)據(jù)包庫中選定的原始數(shù)據(jù)包,提取相關(guān)信息,根據(jù)放大倍數(shù)對信息進(jìn)行變化后復(fù)制生成信息不重復(fù)的數(shù)據(jù)包。
所述放大倍數(shù)設(shè)置模塊用于設(shè)置數(shù)據(jù)放大倍數(shù)。
數(shù)據(jù)發(fā)送模塊用于發(fā)送數(shù)據(jù)放大模塊生成的數(shù)據(jù)包。
進(jìn)一步的,所述數(shù)據(jù)放大模塊讀取原始數(shù)據(jù)包中的IP信息和端口號信息。
進(jìn)一步的,所述系統(tǒng)還包括人機(jī)交互界面,所述人機(jī)交互界面與放大倍數(shù)設(shè)置模塊及數(shù)據(jù)發(fā)送模塊連接,用于配置數(shù)據(jù)放大倍數(shù),并發(fā)送復(fù)制后的數(shù)據(jù)。
進(jìn)一步的,所述人機(jī)交互界面還讀取數(shù)據(jù)發(fā)送模塊的相關(guān)參數(shù),以監(jiān)控數(shù)據(jù)包發(fā)送情況。
進(jìn)一步的,所述系統(tǒng)還設(shè)置有數(shù)據(jù)包讀發(fā)調(diào)節(jié)單元,用于加速或者減速數(shù)據(jù)包的讀取和發(fā)送速度,所述人機(jī)交互界面設(shè)置對應(yīng)于數(shù)據(jù)讀發(fā)調(diào)節(jié)單元的、可手動調(diào)節(jié)的功能條,調(diào)節(jié)功能條能控制數(shù)據(jù)包的讀取和發(fā)送速度。
進(jìn)一步的,數(shù)據(jù)包的發(fā)送速度參數(shù)包括每秒發(fā)送數(shù)據(jù)包大小的總數(shù)、每秒發(fā)送數(shù)據(jù)包個數(shù)總數(shù)。
進(jìn)一步的,所述原始數(shù)據(jù)包庫中的數(shù)據(jù)包按照行業(yè)進(jìn)行分類。
上述數(shù)據(jù)包構(gòu)造系統(tǒng)的工作方法包括如下步驟:
步驟一:預(yù)先在原始數(shù)據(jù)包庫存入需要的原始數(shù)據(jù)包。
步驟二:選定需要復(fù)制學(xué)習(xí)的原始數(shù)據(jù)包。
步驟三:執(zhí)行數(shù)據(jù)包讀取線程,順序讀取所選定原始數(shù)據(jù)包中的相關(guān)信息,讀取后將相關(guān)信息按照預(yù)定規(guī)則進(jìn)行修改。
步驟四:執(zhí)行數(shù)據(jù)包發(fā)送線程,發(fā)送修改后形成的數(shù)據(jù)包。
步驟五:重復(fù)執(zhí)行步驟三、四,直到完成預(yù)定的數(shù)據(jù)包發(fā)送任務(wù)。
進(jìn)一步的,步驟三中,步驟三具體為:執(zhí)行數(shù)據(jù)包讀取線程,順序讀取各個原始數(shù)據(jù)包中的IP地址和端口號,讀取后將IP地址的四個字節(jié)循環(huán)進(jìn)行規(guī)律修改,并將端口信息的2個字節(jié)循環(huán)進(jìn)行規(guī)律修改。
進(jìn)一步的,所述方法還包括用戶控制數(shù)據(jù)包讀取和發(fā)送速度的過程,該過程通過在步驟三中執(zhí)行的數(shù)據(jù)包讀取線程和步驟四中執(zhí)行的數(shù)據(jù)包發(fā)送線程中增加sleep(n)函數(shù)來實現(xiàn),其中n表示休眠時間。
本發(fā)明的有益效果為:
本發(fā)明通過植入原始數(shù)據(jù)包,改變原始數(shù)據(jù)包相關(guān)信息的方式復(fù)制產(chǎn)生不重復(fù)的數(shù)據(jù)包,并預(yù)先設(shè)定流量放大倍數(shù)以產(chǎn)生符合要求的流量。另外,本發(fā)明的還可以通過控制BPS(每秒數(shù)據(jù)流量)、PPS(每秒數(shù)據(jù)包個數(shù))進(jìn)行數(shù)據(jù)包讀取及數(shù)據(jù)包發(fā)送的控制,具有極好的操作性。
附圖說明
圖1是本發(fā)明所述方法的時序圖。
具體實施方式
本發(fā)明提供了一種數(shù)據(jù)包構(gòu)造系統(tǒng),所述系統(tǒng)運行于服務(wù)器上,其包括原始數(shù)據(jù)包庫、數(shù)據(jù)放大模塊、放大倍數(shù)設(shè)置模塊。所述服務(wù)器應(yīng)配置足夠大的磁盤空間,原始數(shù)據(jù)包庫位于磁盤空間內(nèi)。
所述原始數(shù)據(jù)包庫內(nèi)存儲有若干被預(yù)先分類的原始數(shù)據(jù)包,每個分類下具有一個或者若干個原始數(shù)據(jù)包。所述原始數(shù)據(jù)包庫中的數(shù)據(jù)包按照行業(yè)進(jìn)行分類,如運營商、金融系統(tǒng)、政府 能源。
所述數(shù)據(jù)放大模塊用于讀取原始數(shù)據(jù)包庫中選定的原始數(shù)據(jù)包,提取相關(guān)信息,根據(jù)放大倍數(shù)對信息進(jìn)行變化后復(fù)制生成信息不重復(fù)的數(shù)據(jù)包。一般而言,數(shù)據(jù)放大模塊會讀取原始數(shù)據(jù)包中的IP信息和端口號信息加以改變。
所述放大倍數(shù)設(shè)置模塊用于設(shè)置數(shù)據(jù)放大倍數(shù)。
通過放大倍數(shù)來指定對每個數(shù)據(jù)包的副本個數(shù),例如原始數(shù)據(jù)包是1.1.1.1:11111 <-> 2.2.2.2:22222(四元組信息)的數(shù)據(jù)包,經(jīng)過2倍放大后,實際發(fā)出的是兩個數(shù)據(jù)包如下:
1.1.1.2:11111 <-> 1.2.2.2:22222
1.1.1.3:11111 <-> 3.2.2.2:22222
這樣可以方便地將實際構(gòu)造的流量模擬發(fā)送到萬兆的水平。數(shù)據(jù)包萬兆發(fā)送技術(shù)可采用Inter公開共享的DPDK技術(shù)。
數(shù)據(jù)發(fā)送模塊用于發(fā)送數(shù)據(jù)放大模塊生成的數(shù)據(jù)包。所述數(shù)據(jù)發(fā)送模塊一般為網(wǎng)卡。
優(yōu)選的,所述系統(tǒng)還包括人機(jī)交互界面,所述人機(jī)交互界面與放大倍數(shù)設(shè)置模塊及數(shù)據(jù)發(fā)送模塊連接,用于配置數(shù)據(jù)放大倍數(shù),并發(fā)送復(fù)制后的數(shù)據(jù)。更優(yōu)選的,進(jìn)一步的,所述人機(jī)交互界面還讀取數(shù)據(jù)發(fā)送模塊的相關(guān)參數(shù),以監(jiān)控數(shù)據(jù)包發(fā)送情況(采用定時器監(jiān)控)。所述數(shù)據(jù)發(fā)送模塊的相關(guān)參數(shù)包括每秒發(fā)送數(shù)據(jù)包大小的總數(shù)(BPS)、每秒發(fā)送數(shù)據(jù)包個數(shù)總數(shù)(PPS)。
優(yōu)選的,所述系統(tǒng)還設(shè)置有數(shù)據(jù)包讀發(fā)調(diào)節(jié)單元,用于加速或者減速數(shù)據(jù)包的讀取和發(fā)送速度,所述人機(jī)交互界面設(shè)置對應(yīng)于數(shù)據(jù)讀發(fā)調(diào)節(jié)單元的、可手動調(diào)節(jié)的功能條,調(diào)節(jié)功能條能控制數(shù)據(jù)包的讀取和發(fā)送速度。具體實現(xiàn)室在數(shù)據(jù)包線程和數(shù)據(jù)包發(fā)送線程中增加sleep(n)函數(shù)來實現(xiàn) ,n為休眠時間,全速時n為0。
上述數(shù)據(jù)包構(gòu)造系統(tǒng)的工作方法包括如下步驟:
步驟一:預(yù)先在原始數(shù)據(jù)包庫存入需要的原始數(shù)據(jù)包。
步驟二:選定需要復(fù)制學(xué)習(xí)的原始數(shù)據(jù)包。
步驟三:執(zhí)行數(shù)據(jù)包讀取線程,順序讀取所選定原始數(shù)據(jù)包中的相關(guān)信息,讀取后將相關(guān)信息按照預(yù)定規(guī)則進(jìn)行修改。
以IP地址信息及端口信息為例,分別為四個字節(jié)和兩個字節(jié),順序讀取各個原始數(shù)據(jù)包中的IP地址和端口號,讀取后將IP地址的四個字節(jié)循環(huán)進(jìn)行規(guī)律修改,并將端口信息的2個字節(jié)循環(huán)進(jìn)行規(guī)律修改。如下代碼所示:
IPConvert(const uint8* in, int count , uint8* out)
{
for(int i = 0 ; i < 4; i++)
{
*out = static_const((*in) * 13 * count);
in++;
out++;
}
}
PortConvert(const uint8* in, int count , uint8* out)
{
for(int i = 0 ; i < 2; i++)
{
*out = static_const((*in) * 13 * count);
in++;
out++;
}
}
步驟四:執(zhí)行數(shù)據(jù)包發(fā)送線程,發(fā)送修改后形成的數(shù)據(jù)包。
步驟五:重復(fù)執(zhí)行步驟三、四,直到完成預(yù)定的數(shù)據(jù)包發(fā)送任務(wù)。