付韜 孫宏
【摘要】 ? ?網絡性能測試中需要構造多種數(shù)據發(fā)向被測設備,目前已有的測試方法大多使用固定的流量模型和固定變化模式,無法真實反映網絡負載的特征。本文提出一種結合Sketch計數(shù)和數(shù)據流元數(shù)據壓縮復原的網絡測試數(shù)據生成方法,其中Sketch用來學習網絡中真實的數(shù)據流分布情況,元數(shù)據則采用壓縮的方式保存負載特征,在測試時將被壓縮的元數(shù)據恢復成測試數(shù)據并按Sketch統(tǒng)計值發(fā)送,從而以更加真實的仿真數(shù)據流完成性能測試。
【關鍵字】 ? ?重放測試 ? ?Sketch ? ?正則表達式
一、背景介紹
網絡性能測試是通過測試軟件或硬件產生超越被測設備性能極限的網絡測試數(shù)據,經過被測網絡或設備處理后得到可觀測的測試結果。目前最精準的網絡性能測試方法是采用網絡測試儀硬件平臺搭配專用軟件,具有端口密度大、時間戳精確、測試結果誤差小的優(yōu)點,典型的測試儀廠商如思博倫、是德、福祿克、信雅納、信而泰等均設計端口封裝涵蓋所有主流網絡接口、模塊可替換、協(xié)議種類豐富的系列化測試儀。網絡性能測試的核心基本功能是構建測試數(shù)據流、全線速捕獲、數(shù)據流統(tǒng)計分析,在此通過支持標準的RFC系列測試和字段變化規(guī)則可以完成網絡設備如路由器、交換機等的性能測試。
在目前工業(yè)界網絡性能測試中,常見的測試數(shù)據主要依據三種方式產生,一是依據特定標準規(guī)范的流量模型,二是依據真實捕獲的網絡通信數(shù)據,三是用戶輸入特定的數(shù)據內容。在理論領域,文獻[1]提出使用正則表達式來構造測試數(shù)據,但該方法沒有對各數(shù)據流占帶寬的比例進行控制,在流量分布方面無法按照用戶設置或真實網絡通信分布進行測試。
1.標準規(guī)范的流量模型:規(guī)定測試儀和被測設備的連接結構,定義多個數(shù)據流結構及字段內容變化模式,一般支持遞增、遞減、隨機等測試數(shù)據,但存在著較強的規(guī)律。
2.真實網絡通信數(shù)據:直接保存從網絡中捕獲的真實數(shù)據,但占用大量存儲空間。
3.用戶輸入特定的數(shù)據內容:用戶配置基本的URL或載荷數(shù)據,但靈活性較差。
測試數(shù)據構造方法需要滿足真實性、存儲空間、流量分布情況三方面的要求,真實性是指測試數(shù)據包的內容是否滿足被測網絡的要求,如果采用存在固定規(guī)律的假數(shù)據,測試結果與真實網絡中的實際性能會存在較大誤差。存儲空間則代表測試儀用于存儲測試數(shù)據的總容量。流量分布情況則代表發(fā)送數(shù)據流時是否反映真實網絡中的分布情況。
從這三個角度分析,上述四種方法無法同時兼顧仿真的測試數(shù)據的真實性、存儲空間、流量分布情況。標準規(guī)范的流量模型真實性較差,僅占用測試配置文件的存儲空間,支持規(guī)律性的流量模型。重放網絡通信數(shù)據具有無損的真實性,但全部數(shù)據占用大量存儲空間,流量模型也與錄制的真實情況一致。用戶輸入特定的數(shù)據內容真實性介于前兩種方案之間,占用的存儲空間也較少,沒有流量模型的配置。正則表達式的方法具有一定的真實性,存儲空間僅需要用于保存有限條表達式,但不具備流量分布信息,最終無法復現(xiàn)特定的場景。
因此需要使用一種新的方法記錄真實網絡中的通信,在保留網絡通信核心特征的背景下將其抽象為存儲空間小、分布情況準確的網絡性能測試數(shù)據流量模型。本文將網絡性能測試過程中產生測試流的特征分為兩部分:一部分是數(shù)據流的分布特征,該部分采用Sketch進行記錄,在重放時根據相關統(tǒng)計值恢復成測試包序列;另一部分是數(shù)據流的元數(shù)據,該部分針對非關鍵字進行正則表達式化替代,當重放時根據正則表達式的特征進行多種適配數(shù)據的填充和發(fā)送,從而兼顧真實性、存儲空間和流量分布的要求,優(yōu)于現(xiàn)有測試數(shù)據流構造方法。
二、Sketch計數(shù)基本原理
一個簡單的Sketch由一組哈希函數(shù)和計數(shù)器矩陣構成,如圖1所示,如果哈希函數(shù)的數(shù)量為n,那么計數(shù)器矩陣的行數(shù)也為n,每一行計數(shù)器的數(shù)量m則由計數(shù)方案的精度需求決定。當一個數(shù)據包Pkt的流標簽L進入Sketch后,如果第i個哈希函數(shù)計算該標簽并獲得一個哈希值j,則將該數(shù)據流標簽對應的統(tǒng)計值更新到第Ci,j單元上。Sketch采用n個哈希值對n行進行更新,通過多個統(tǒng)計副本降低碰撞概率,查詢時一般采用最低值、平均值等獲得精度較低的結果,其中應用比較廣泛的是采用最低值代表技術結果的CountMin Sketch [2]。
Sketch的特征在于只要n個副本不全都出現(xiàn)碰撞,就能得到準確的統(tǒng)計結果,統(tǒng)計精度可控。同時不針對每一個流建立獨立的統(tǒng)計條目,整個統(tǒng)計結構的存儲空間不會隨者目標被統(tǒng)計數(shù)據流數(shù)量的增加出現(xiàn)指數(shù)級增長。
三、基于Sketch和數(shù)據流元數(shù)據的重放框架
本文設計的重放測試框架由Sketch結構組、元數(shù)據存儲、測試數(shù)據復原模塊、發(fā)包控制模塊、發(fā)包隊列構成。其中,每一個Sketch結構存儲各個數(shù)據流的統(tǒng)計信息,反映某一個端口上檢測到的數(shù)據流標簽和每個標簽的數(shù)據量,在有線網絡中標簽由2層地址、3層地址、端口號、協(xié)議類型構成,在移動邊緣計算網絡中標簽則由手機號、賬號、網絡地址構成,該部分內容在測試開始之前已經存在于測試儀存儲中。元數(shù)據存儲中包含測試儀所需的預定義的測試數(shù)據模板,在選擇網絡重放配置后,測試數(shù)據復原模塊通過對數(shù)據流元數(shù)據中的正則表達式進行變換,得到豐富的仿真測試數(shù)據。發(fā)包隊列則以復原模塊輸出的數(shù)據作為輸入,發(fā)包控制模塊根據Sketch結構組的流量約束條件調節(jié)發(fā)包隊列的速度,將周期內的測試數(shù)據發(fā)送至被測設備。
1. Sketch結構組:由多個Sketch構成,每個Sketch存儲著一個端口采集到的真實數(shù)據流分布統(tǒng)計結果,具體包括數(shù)據流標識列表和Sketch計數(shù)器。表示列表除記錄所有標識之外,還要記錄該數(shù)據流的數(shù)據類型,以便根據相應的數(shù)據流元數(shù)據生成測試數(shù)據。
2.元數(shù)據存儲:元數(shù)據使用XML保存由數(shù)據流類型和正則表達式構成的混合字符串,其中正則表達式可以給出數(shù)據的變化規(guī)則,例如特定的字符類型組合、特定的關鍵字組合等等。在遇到任意字符串如*、[A-Za-z]時采用配置選擇的字符串集合填充。
3.測試數(shù)據復原模塊:根據Sketch結構組和數(shù)據流元數(shù)據得到測試數(shù)據,這里首先讀取Sketch中的某一個數(shù)據流的頻次n和類型,根據類型得到XML流模板,實現(xiàn)n次數(shù)據包構造,每次讀取XML流模板并逐個處理XML標簽,當XML標簽為關鍵字時,直接填充至數(shù)據包,而XML標簽為正則表達式時,逆向構造符合正則表達式的字符串,該方法目前已有多種嘗試,這里我們根據用戶輸入的網絡重放測試配置進行隨機構造。
4.發(fā)包隊列:測試數(shù)據復原模塊產生的大量數(shù)據包會添加進入發(fā)包隊列。
5.發(fā)包控制模塊:會根據測試儀指定的發(fā)包速率定期發(fā)出發(fā)包控制指令,調整發(fā)包隊列和收發(fā)端口的發(fā)送速度。
Sketch存儲的數(shù)據流統(tǒng)計值對存儲的占用很低,使用正則表達式構成的數(shù)據流元數(shù)據也不需要完整保存網絡信息數(shù)據,因此能夠在測試以上以較低的存儲空間定義大量測試流量模型。
四、數(shù)據流元數(shù)據設計
傳統(tǒng)網絡性能測試儀器采用數(shù)據流模板(即一種固定的協(xié)議棧及其字段結構)為基礎,在字段內容上進行隨機、遞增、遞減、指定數(shù)據等方法構造測試數(shù)據,最后補充時間戳和校驗和。
雖然能夠驗證被測網絡或設備的性能,但簡易的數(shù)據內容已被應用檢測為錯誤數(shù)據并丟棄。如果完整保存真實網絡數(shù)據,則需要保存性能測試過程中以Tb為單位的大量數(shù)據,對測試儀的存儲空間造成極大浪費,也減少可保存的流量模型數(shù)量。
元數(shù)據是用于描述數(shù)據的數(shù)據,包含對目標數(shù)據及信息資源的描述信息[3]。性能測試中的數(shù)據流元數(shù)據描述測試流模型的特征,由描述元數(shù)據部分、結構元數(shù)據部分和管理元數(shù)據部分構成。已經保存在測試儀的數(shù)據流元數(shù)據將真實網絡流量特征進行抽象,在保留原有網絡通信特征的基礎上將數(shù)據壓縮為更加精簡的描述,從而節(jié)省網絡測試儀的存儲空間。
本文設計的數(shù)據流元數(shù)據由類型、XML流模板和填充數(shù)據UUID構成。其中,類型是描述元數(shù)據,用于識別某一類構造的測試數(shù)據類別。XML流模板是結構元數(shù)據,保存相應類別測試流的通用結構,填充數(shù)據UUID則在必要時給出需要額外引用的數(shù)據內容。管理元數(shù)據是保存的測試配置文件,給出該數(shù)據流元數(shù)據構造測試數(shù)據時應遵守的約束條件。XML流模板結構的簡單案例如下:
<?xml version=”1.0” encoding=”utf-8”?>
example string
......
331b6525-6199-40ef-bdba-dd5f00384f42
......
[0-9]+(\.[0-9]{2})[A-Za-z]@\w+([-.]\w+)*\.\w+([-.]\w+)* //電子郵箱的表達式格式
......
該案例中strKey標簽是關鍵字數(shù)據,其中fixed類型直接填充example string,fillData類型則通過uuid去文件中尋找相應數(shù)據填充。RegExp標簽是正則表達式字符串,用于測試數(shù)據構造的正則表達式僅保留對數(shù)字、字母、符號以及通配符等常用的表達式,不執(zhí)行環(huán)視和修飾符功能。本方法中涉及到的數(shù)據流元數(shù)據標簽如表1所示,未來可以根據測試需要擴展標簽種類。
五、重放數(shù)據復原方法
當對某個端口的數(shù)據流進行完整重放時,會查找對應Sketch中的關鍵字列表,假如處理到關鍵字為Keyi的數(shù)據流,則根據該標識哈希到計數(shù)矩陣中,如采用CountMin Sketch就取所有哈希函數(shù)結果中的最小值作為實際計數(shù)值NQ,總共需要針對Keyi數(shù)據流構造NQ個測試包。通過Keyi在標識列表中對應的載荷類型Tpi識別載荷的構造模式,在數(shù)據流元數(shù)據中查找具體的XML模板,正則表達式的填充數(shù)據則從本地文件讀取,具體過程如圖2所示。
在獲取相關信息后,Ns代表當前已經構造的數(shù)據包數(shù)量,在構造一個具體的測試包時,測試數(shù)據復原模塊將讀取解析XML流模板。測試數(shù)據復原模塊遍歷標簽時首先進行關鍵字識別,這里的關鍵字是指網絡協(xié)議相關的特定字符串,如http、https等,這些字符串并不會進行替換。隨后找出標記為正則表達式標簽的內容,此時根據正則表達式的規(guī)則逆向生成測試載荷,具體可以使用文獻[4]中的方法,任意字符串的部分使用本地填充數(shù)據替換。
最后,為保證測試包能夠順利通過網絡發(fā)送至接收端,對長度字段和校驗等有嚴格約束條件的字段進行重新計算,將封裝完畢的測試數(shù)據包加入發(fā)包隊列。
六、結束語
本文提出一種應網絡性能測試的數(shù)據流仿真方法,充分利用Sketch和數(shù)據流元數(shù)據存儲空間較少的優(yōu)點,利用Sketch和正則表達式逆向產生具有明確流量分布特征和數(shù)據特征的測試數(shù)據,實現(xiàn)一種高效的性能測試流量構造方法,可廣泛應用于網絡性能測試軟件和網絡測試儀的設計和研制。
參 ?考 ?文 ?獻
[1]基于正則表達式的測試數(shù)據自動生成技術[J]. 董敏,畢盛,齊德昱. 計算機工程. 2009(16).
[2]Cormode, G, Muthukrishnan, et al. An improved data stream summary: the count-min sketch and its applications[J]. Journal of Algorithms, 2005.
[3] Merriam-Webster.元數(shù)據字典網站[EB/OL].(2020-01-01)[2020-09-12]. http://www.merriam-webster.com/dictionary/metadata.
[4]郝忠虎.基于正則表達式擴展的Web服務測試用例自動生成方法研究[D].華南理工大學,2012.