本發(fā)明大致涉及數(shù)據(jù)通信,更具體的,涉及服務(wù)網(wǎng)關(guān)。
背景技術(shù):如防火墻、服務(wù)加載均衡器之類的服務(wù)網(wǎng)關(guān)已由服務(wù)提供商和企業(yè)配置。在過去,服務(wù)網(wǎng)關(guān)用于安全之類的特殊目的。但是,現(xiàn)在服務(wù)網(wǎng)關(guān)應(yīng)用被擴(kuò)展。許多服務(wù)提供商配置服務(wù)網(wǎng)關(guān)以完成多種服務(wù)網(wǎng)關(guān)應(yīng)用,從而檢查和分析在主機(jī)設(shè)備和服務(wù)器計算機(jī)之間的通信會話的數(shù)據(jù)包。許多網(wǎng)關(guān)應(yīng)用修改包來幫助對數(shù)據(jù)包和通信會話的分析。包修改是計算加強(qiáng)且存儲接入加強(qiáng)的任務(wù)。修改任務(wù)通常由服務(wù)網(wǎng)關(guān)的處理器模塊完成。通常,處理器或者處理器模塊分析數(shù)據(jù)包,確定必要的修改數(shù)據(jù)塊,產(chǎn)生包存儲緩沖區(qū),從數(shù)據(jù)包復(fù)制一些數(shù)據(jù)到數(shù)據(jù)包存儲緩沖區(qū)中并復(fù)制所述修改數(shù)據(jù)塊到包存儲緩沖區(qū)中。當(dāng)數(shù)據(jù)復(fù)制完成時,處理器已經(jīng)從原始的數(shù)據(jù)包產(chǎn)生了新的數(shù)據(jù)包。然后服務(wù)網(wǎng)關(guān)將產(chǎn)生的數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)上。數(shù)據(jù)包修改處理對處理器模塊來說代價很高,其消耗CPU周期和存儲接入帶寬。如果數(shù)據(jù)包修改處理可以由服務(wù)網(wǎng)關(guān)的基于硬件的高執(zhí)行模塊卸載和處理,則處理器模塊可以分配其資源來處理附加的數(shù)據(jù)包或者附加的通信會話。因此,需要引入基于硬件的高執(zhí)行包編輯模塊來處理數(shù)據(jù)包修改。
技術(shù)實現(xiàn)要素:根據(jù)本發(fā)明的一個實施例,一種由基于硬件的包編輯器修改數(shù)據(jù)包的方法包括:(a)由包編輯器接收包編輯腳本,所述腳本包括一個或多個指示應(yīng)用于數(shù)據(jù)包和包括用于修改包的數(shù)據(jù)的數(shù)據(jù)塊的修改的腳本入口;(b)對于包編輯腳本中每一個給定的腳本入口,包編輯器將處于在該給定腳本入口中識別的位置且為在該給定腳本入口中識別的大小的數(shù)據(jù)塊中的數(shù)據(jù)復(fù)制到包緩沖區(qū)中;以及(c)包編輯器用包緩沖區(qū)中的數(shù)據(jù)生成修改數(shù)據(jù)包。在本發(fā)明的一方面,復(fù)制(b)包括:(b1)檢索所述包編輯腳本的給定腳本入口;(b2)確定該給定腳本入口是否是用于修改數(shù)據(jù)包的第一腳本入口;(b3)響應(yīng)于確定所述給定腳本入口是用于修改數(shù)據(jù)包的第一腳本入口,保留用于修改數(shù)據(jù)包的包緩沖區(qū);(b4)將處于在給定的編輯腳本中識別的塊位置并具有在給定的編輯腳本中識別的塊長度的數(shù)據(jù)塊中的數(shù)據(jù)復(fù)制到數(shù)據(jù)緩沖區(qū)中;(b5)確定該給定腳本入口是否是用于修改數(shù)據(jù)包的最后一個腳本入口;(b6)響應(yīng)于確定所述給定腳本入口不是用于修改數(shù)據(jù)包的最后一個腳本入口,為包編輯腳本的下一個給定腳本入口執(zhí)行所述復(fù)制(b4)和確定(b5)。在本發(fā)明的一方面,所述確定(b2)包括:(b2i)確定給定腳本入口中的包開始(SOP)指示符是否指示所述給定腳本入口是用于修改數(shù)據(jù)包的第一腳本入口。在本發(fā)明的一方面,所述確定(b5)包括:(b5i)確定給定腳本入口中的包結(jié)束(EOP)指示符是否指示所述給定腳本入口是用于修改數(shù)據(jù)包的最后一個腳本入口。在本發(fā)明的一方面,所述保留(b3)和復(fù)制(b4)包括:(b3i)在包緩沖區(qū)開始的地方設(shè)置包緩沖區(qū)標(biāo)記;(b4i)將處于在給定編輯腳本中識別的塊位置且具有在給定編輯腳本中識別的塊長度的數(shù)據(jù)塊中的數(shù)據(jù)的副本添加到包緩沖區(qū)標(biāo)記處的包緩沖區(qū);以及(b4ii)用在給定編輯腳本中識別的塊長度修改包緩沖區(qū)標(biāo)記。在本發(fā)明的一方面,所述生成(c)包括:(c1)響應(yīng)于確定所述給定腳本入口是用于修改數(shù)據(jù)包的最后一個腳本入口,用包緩沖區(qū)中的數(shù)據(jù)生成修改的數(shù)據(jù)包。在本發(fā)明的一方面,所述生成(c)進(jìn)一步包括:(c2)確定給定的腳本入口是否是包編輯腳本中的最后一個腳本入口;以及(c3)響應(yīng)于確定所述給定腳本入口不是包編輯腳本中的最后一個腳本入口,為包編輯腳本中的下一個給定腳本入口重復(fù)所述檢索(b1)、所述確定(b2)、所述保留(b3)、所述復(fù)制(b4)、所述確定(b5)、所述執(zhí)行(b6)以及所述生成(c1)。在本發(fā)明的一方面,所述確定(c2)包括:(c2i)確定給定腳本入口中的表結(jié)束(EOP)指示符是否指示所述給定腳本入口是包編輯腳本中的最后一個腳本入口。根據(jù)本發(fā)明的另一個實施例,一種由包含處理器的服務(wù)網(wǎng)關(guān)對數(shù)據(jù)包進(jìn)行處理的方法,包括:由處理器接收將從主機(jī)向服務(wù)器發(fā)送或者將從服務(wù)器向主機(jī)發(fā)送的數(shù)據(jù)包;由處理器確定數(shù)據(jù)包在發(fā)送給服務(wù)器或主機(jī)之前需要修改;由處理器生成包編輯腳本,所述腳本包括一個或多個指示應(yīng)用于數(shù)據(jù)包和包括用于修改包的數(shù)據(jù)的數(shù)據(jù)塊的修改的腳本入口,其中所述生成包括:對于確定包括在修改包中的數(shù)據(jù)包的每個和任意給定部分,生成用于識別在數(shù)據(jù)塊中對應(yīng)于確定包括的給定部分的第一位置和第一長度的第一腳本入口;對于確定要從數(shù)據(jù)包移除的數(shù)據(jù)包的每個和任意給定部分,省略對應(yīng)于確定要移除的給定部分的腳本入口的生成;以及對于確定要加入到修改包中的每個和任意新數(shù)據(jù),生成將包括在包編輯腳本的數(shù)據(jù)塊中的新數(shù)據(jù)并生成識別數(shù)據(jù)塊中對應(yīng)于新數(shù)據(jù)的第二位置和第二長度的第二腳本入口;以及由處理器發(fā)送包編輯腳本到基于硬件的包編輯器,其中包編輯器根據(jù)在包編輯腳本中的腳本入口生成修改的包。對應(yīng)于上述概述方法的系統(tǒng)和計算機(jī)程序產(chǎn)品也在此被描述和要求保護(hù)。附圖說明圖1示出根據(jù)本發(fā)明的使用具有基于硬件的包編輯器的服務(wù)網(wǎng)關(guān)的通信會話處理方法的實施例。圖2示出根據(jù)本發(fā)明的包處理流程的實施例。圖3示出了根據(jù)本發(fā)明的包編輯腳本的實施例。圖4和4a示出根據(jù)本發(fā)明的包編輯處理流程的實施例。圖5示出根據(jù)本發(fā)明實施例的移除HTTP報頭屬性的示例。圖6示出根據(jù)本發(fā)明實施例的插入HTTP報頭和包分裂成兩個包的示例。圖7示出根據(jù)本發(fā)明的服務(wù)網(wǎng)關(guān)應(yīng)用的附加實施例。具體實施方式以下描述的呈現(xiàn)使得本領(lǐng)域技術(shù)人員可以制造和使用本發(fā)明,并且以下描述被提供在專利申請和其要求的內(nèi)容中。對實施例的多種修改對于本領(lǐng)域技術(shù)人員是容易顯而易見的,并且在此處的一般原理可以被應(yīng)用于其他實施例。因此,本發(fā)明并不旨在被限制于所示的實施例,而是根據(jù)與在此描述的原理和特征一致的最寬的范圍。本發(fā)明可以采用整個為硬件的實施例的形式、整個為軟件的實施例或者既包括硬件元件又包括軟件元件的實施例。在較佳實施例中,本發(fā)明由軟件實現(xiàn),所述軟件包括但不限于固件、常駐軟件、微代碼等。進(jìn)一步的,本發(fā)明可以采用計算機(jī)程序產(chǎn)品,該計算機(jī)程序產(chǎn)品可從提供計算機(jī)或任何指令執(zhí)行系統(tǒng)使用或與其連接的程序碼的計算機(jī)可用或計算機(jī)可讀介質(zhì)獲得。為了該說明目的,計算機(jī)可用或計算機(jī)可讀介質(zhì)可以是任何可包含、存儲、通信、傳播或傳輸指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與其連接的eh程序的裝置。介質(zhì)可以是電、磁、光、電磁、紅外、或半導(dǎo)體系統(tǒng)(或裝置或設(shè)備)或傳播介質(zhì)。計算機(jī)可讀介質(zhì)的示例包括半導(dǎo)體或固態(tài)存儲器、磁帶、可移動計算機(jī)磁盤、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、硬磁盤和光盤?,F(xiàn)今光盤的示例包括高密度磁盤-只讀存儲器(CD-ROM)、高密度磁盤-讀/寫(CD-R/W)和DVD。適用于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個處理器,所述處理器直接或通過系統(tǒng)總線間接耦合到存儲元件。存儲元件可以包括在程序代碼的實際執(zhí)行過程中使用的本地存儲器、大容量存儲裝置以及為了減少在執(zhí)行過程中必須從大容量存儲裝置中檢索代碼的次數(shù)而為至少一些程序代碼提供臨時存儲的高速緩沖存儲器。輸入/輸出或者I/O設(shè)備(包括但不限于鍵盤、顯示器、點設(shè)備等)可以直接或者通過插入的I/O控制器耦合到系統(tǒng)。網(wǎng)絡(luò)適配器也可以耦合到系統(tǒng),使得數(shù)據(jù)處理系統(tǒng)變?yōu)橥ㄟ^插入的私人網(wǎng)絡(luò)或公共網(wǎng)絡(luò)耦合到其他數(shù)據(jù)處理系統(tǒng)或者遠(yuǎn)程的打印機(jī)或存儲設(shè)備。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡只是當(dāng)前可用的網(wǎng)絡(luò)適配器的一少部分類型。附圖中的流程圖和框圖示出根據(jù)本發(fā)明多個實施例的系統(tǒng)、方法和計算機(jī)程序產(chǎn)品可以實現(xiàn)的結(jié)構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個塊可代表模塊、段或者代碼的部分,所述代碼包括一個或多個可執(zhí)行的指令,用于實現(xiàn)指定的本地功能。還應(yīng)該注意到,在一些可替換的執(zhí)行實例中,塊中注釋的功能可以不以附圖中注釋的順序發(fā)生。舉例來說,根據(jù)包含的功能,所示出的接連的兩個塊事實上可以基本上同時執(zhí)行,或者塊有時可以倒過來的順序執(zhí)行。還應(yīng)該注意到,框圖和/或流程圖展示中的每個塊,以及框圖和/或流程圖展示中的塊的組合可以由執(zhí)行指定功能或動作的基于硬件的特殊用途的系統(tǒng),或者由特殊用途的硬件和計算機(jī)指令的組合來實現(xiàn)。此處使用的術(shù)語只是出于描述特定實施例的目的,其并不旨在限制本發(fā)明。如此處所使用的,單數(shù)形式“一”和“所述”旨在同樣包括復(fù)數(shù)形式,除非內(nèi)容明確指出。應(yīng)該進(jìn)一步理解的是,當(dāng)在本說明書中使用時,術(shù)語“包括”和/或“包含”,規(guī)定了固有特征、整數(shù)、步驟、操作、元件和/或成分的存在,但并不排除一個或多個其他特征、整數(shù)、步驟、操作、元件、成分和/或其群組的存在或添加。在圖1所示的實施例中,服務(wù)網(wǎng)關(guān)300處理在主機(jī)100和服務(wù)器200之間的通信會話400。會話400在數(shù)據(jù)網(wǎng)絡(luò)150上傳送。在一個實施例中,數(shù)據(jù)網(wǎng)絡(luò)150包括互聯(lián)網(wǎng)協(xié)議(IP)網(wǎng)絡(luò)、聯(lián)合數(shù)據(jù)網(wǎng)、地域聯(lián)合數(shù)據(jù)網(wǎng)、互聯(lián)網(wǎng)服務(wù)提供商網(wǎng)絡(luò)、住宅數(shù)據(jù)網(wǎng)絡(luò)、如以太網(wǎng)之類的有線網(wǎng)、如WiFi網(wǎng)絡(luò)之類的無線網(wǎng)、藍(lán)牙網(wǎng)絡(luò)、或者蜂窩式網(wǎng)絡(luò)。在一個實施例中,數(shù)據(jù)網(wǎng)絡(luò)150位于數(shù)據(jù)中心,或者連接到網(wǎng)絡(luò)或應(yīng)用網(wǎng)絡(luò)云。主機(jī)100是具有網(wǎng)絡(luò)接入能力的計算設(shè)備。在一個實施例中,主機(jī)100是工作站、臺式個人計算機(jī)或者膝上型個人計算機(jī)、個人數(shù)據(jù)助手(PDA)、寫字板PC、智能手機(jī)、或者蜂窩式手機(jī)、機(jī)頂盒、互聯(lián)網(wǎng)媒體閱讀器、互聯(lián)網(wǎng)媒體播放器、智能傳感器、智能醫(yī)療設(shè)備、網(wǎng)頂盒、網(wǎng)絡(luò)電視機(jī)、網(wǎng)絡(luò)DVR、網(wǎng)絡(luò)藍(lán)光播放器、媒體中心、或者網(wǎng)絡(luò)連接的設(shè)備。服務(wù)器200是典型地與處理器和存儲計算機(jī)可讀程序代碼的計算機(jī)可讀介質(zhì)耦合的計算設(shè)備。具有處理器和計算機(jī)可讀程序代碼的服務(wù)器200實現(xiàn)萬維網(wǎng)服務(wù)器、文件服務(wù)器、視頻服務(wù)器、數(shù)據(jù)庫服務(wù)器、應(yīng)用服務(wù)器、語音系統(tǒng)、會議服務(wù)器、媒體網(wǎng)關(guān)、媒體中心、應(yīng)用服務(wù)器或使用通信會話400向主機(jī)100提供網(wǎng)絡(luò)服務(wù)或應(yīng)用服務(wù)的網(wǎng)絡(luò)服務(wù)器的功能。服務(wù)網(wǎng)關(guān)300操作性地耦合到處理器模塊310、包編輯器350、網(wǎng)絡(luò)接口模塊330、以及計算機(jī)可讀介質(zhì)340。計算機(jī)可讀介質(zhì)340存儲計算機(jī)可讀程序化碼,該程序代碼當(dāng)由處理器模塊310執(zhí)行時,實現(xiàn)如本文描述的本發(fā)明的多個實施例。在一些實施例中,服務(wù)網(wǎng)關(guān)300實現(xiàn)為服務(wù)器加載均衡器、應(yīng)用傳輸控制器、服務(wù)傳輸平臺、通信量管理器、安全網(wǎng)關(guān)、防火墻系統(tǒng)中的部件、虛擬私人網(wǎng)絡(luò)(VPN)的部件、視頻服務(wù)器的加載均衡器、將加載分配給一個或多個服務(wù)器的網(wǎng)關(guān)、處理HTTP服務(wù)會話300的HTTP層的萬維網(wǎng)或HTTP服務(wù)器、或者執(zhí)行網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)的網(wǎng)關(guān)。處理器模塊330典型地包括一個或多個通用處理器或者微處理器。在一個實施例中,處理器模塊330包括多核微處理器。在一個實施例中,處理器模塊330包括存儲變量的存儲器單元,所述變量在計算機(jī)可讀模塊340中存儲的計算機(jī)可讀程序代碼的執(zhí)行過程中使用。網(wǎng)絡(luò)接口模塊330連接到數(shù)據(jù)網(wǎng)絡(luò)150。網(wǎng)絡(luò)接口模塊330從主機(jī)100和服務(wù)器200接收通信會話400的數(shù)據(jù)包,并且向主機(jī)100和服務(wù)器200發(fā)送通信會話400的數(shù)據(jù)包。包編輯器350是基于硬件的包處理加速模塊,典型地包括處理數(shù)據(jù)包的高執(zhí)行能力。在一個實施例中,包編輯器350包括現(xiàn)場可編程門陣列(FPGA)模塊、專用集成電路(ASIC)模塊、數(shù)字信號處理器(DSP)、或者能夠執(zhí)行包編輯器350的高速處理需求的電路。在一個實施例中,主機(jī)100向服務(wù)器200發(fā)送通信會話400的數(shù)據(jù)包403。服務(wù)網(wǎng)關(guān)300通過網(wǎng)絡(luò)模塊330接收數(shù)據(jù)包403。處理器模塊310根據(jù)計算機(jī)可讀介質(zhì)340上存儲的計算機(jī)可讀程序代碼處理數(shù)據(jù)包403。處理器模塊310確定數(shù)據(jù)包403要由包編輯器350修改。包編輯器350接收數(shù)據(jù)包403并且生成數(shù)據(jù)包408。網(wǎng)絡(luò)模塊330向服務(wù)器200發(fā)送數(shù)據(jù)包408。在一個實施例中,服務(wù)器200向主機(jī)100發(fā)送通信會話400的數(shù)據(jù)包418。服務(wù)網(wǎng)關(guān)300通過網(wǎng)絡(luò)模塊330接收數(shù)據(jù)包418。處理器模塊310根據(jù)計算機(jī)可讀介質(zhì)340上存儲的計算機(jī)可讀程序代碼處理數(shù)據(jù)包418。處理器模塊310確定數(shù)據(jù)包418要由包編輯器350修改。包編輯器350接收數(shù)據(jù)包418并且生成數(shù)據(jù)包413。網(wǎng)絡(luò)模塊330向服務(wù)器200發(fā)送數(shù)據(jù)包408。在一個實施例中,數(shù)據(jù)包403是超文本傳輸協(xié)議(HTTP)包,并且包編輯器350移除數(shù)據(jù)包403的HTTP報頭的一部分來生成數(shù)據(jù)包408。在一個實施例中,418是HTTP包,而包編輯器350向數(shù)據(jù)包418插入HTTP報頭,從而生成數(shù)據(jù)包413。在一個實施例中,數(shù)據(jù)包403是一個包括IP報頭的IP包,而包編輯器350向數(shù)據(jù)包403插入第二IP報頭,從而生成IP隧道數(shù)據(jù)包413。在一個實施例中,包編輯器350在發(fā)送數(shù)據(jù)包413和第二數(shù)據(jù)包到服務(wù)器200之前,執(zhí)行IP分裂以生成數(shù)據(jù)包413和第二數(shù)據(jù)包(未示出)。在一個實施例中,數(shù)據(jù)包418是IP隧道包,而包編輯器350從數(shù)據(jù)包418移除IP報頭,從而生成數(shù)據(jù)包413。在一個實施例中,包編輯器350通過復(fù)制一個或多個數(shù)據(jù)包403的數(shù)據(jù)塊到數(shù)據(jù)包408上、通過來自處理器模塊310的指令復(fù)制附加數(shù)據(jù)塊到數(shù)據(jù)包408上、使用數(shù)據(jù)包403的一個或多個部分計算校驗和并將校驗和放置到數(shù)據(jù)包408上,來處理數(shù)據(jù)包403,以生成數(shù)據(jù)包408。上述對數(shù)據(jù)包408的數(shù)據(jù)包修改可應(yīng)用在很多服務(wù)網(wǎng)關(guān)300的實現(xiàn)中,例如,作為HTTP代理服務(wù)器、TCP代理服務(wù)器、層3/層4隧道網(wǎng)關(guān)、防火墻、IP隧道網(wǎng)關(guān)、IPv4/IPv6隧穿網(wǎng)關(guān)、IP-IP隧穿網(wǎng)關(guān)。圖2示出了處理數(shù)據(jù)包405的服務(wù)網(wǎng)關(guān)300。服務(wù)網(wǎng)關(guān)300接收數(shù)據(jù)包405。數(shù)據(jù)包405可以由主機(jī)100或服務(wù)器200發(fā)送。服務(wù)網(wǎng)關(guān)300實現(xiàn)服務(wù)網(wǎng)關(guān)應(yīng)用314,該服務(wù)網(wǎng)關(guān)應(yīng)用314是駐留在計算機(jī)可讀介質(zhì)340中由處理器模塊310執(zhí)行的軟件?;跀?shù)據(jù)包405,應(yīng)用314確定數(shù)據(jù)包405需要修改。應(yīng)用314生成包編輯腳本512。包編輯腳本512包括一個或多個腳本入口,該腳本入口指示要應(yīng)用到數(shù)據(jù)包405的必要修改。當(dāng)應(yīng)用314確定數(shù)據(jù)需要包括在數(shù)據(jù)包305中時,應(yīng)用314生成描述要包括的數(shù)據(jù)的腳本入口。當(dāng)應(yīng)用314確定數(shù)據(jù)要從數(shù)據(jù)包305中移除時,應(yīng)用314省略生成將描述被移除的數(shù)據(jù)的腳本入口。當(dāng)應(yīng)用314確定數(shù)據(jù)要被插入到數(shù)據(jù)包305中時,應(yīng)用314生成描述要被插入的數(shù)據(jù)的腳本入口。對于包編輯腳本512的更詳細(xì)的描述會稍后出現(xiàn)在本說明書中。例如,在一個實施例中,應(yīng)用314確定HTTP報頭要從數(shù)據(jù)包305中移除。包編輯腳本512描述要移除的HTTP報頭的部分。在一個實施例中,應(yīng)用314確定HTTP報頭要插入到數(shù)據(jù)包305中。包編輯腳本512描述HTTP報頭要被插入的位置以及用于HTTP報頭的數(shù)據(jù)。在一個實施例中,應(yīng)用314確定附加的IP報頭要插入到數(shù)據(jù)包305中。包編輯腳本512描述附加IP報頭的細(xì)節(jié),使得包編輯器350將執(zhí)行所述插入。在一個實施例中,包編輯腳本512包括數(shù)據(jù)包405。然后,應(yīng)用314向包編輯器350發(fā)送包編輯腳本512,有效地通知包編輯器350將使用包編輯腳本512來修改數(shù)據(jù)包305。包編輯器350接收包編輯腳本512并且基于包編輯腳本512生成數(shù)據(jù)包415。在一個實施例中,包編輯器350發(fā)送數(shù)據(jù)包415到網(wǎng)絡(luò)模塊330用于傳輸。在一個實施例中,包編輯器350在生成數(shù)據(jù)包415之后通知應(yīng)用314。應(yīng)用314通知網(wǎng)絡(luò)模塊330以發(fā)送數(shù)據(jù)包415。圖3示出包編輯腳本512。在一個實施例中,包編輯腳本512包括腳本入口表524和數(shù)據(jù)塊527。腳本入口表524包括腳本入口542。在一個實施例中,腳本入口542包括多個字段,所述字段包括塊位置551、塊長度552、包開始指示符(SOP)554、包結(jié)束指示符(EOP)553、以及腳本結(jié)束指示符(EOT)555。在一個實施例中,SOP554、EOP553和EOT555是1比特長的指示符;塊位置551具有10比特的值;塊長度552是11比特的值。腳本入口542可以包括一個或多個未使用的多比特字段,使得腳本入口542是一個4字節(jié)或者32比特長的數(shù)據(jù)結(jié)構(gòu)。塊位置551和塊長度552涉及數(shù)據(jù)塊527中的一個數(shù)據(jù)的塊。塊位置551涉及數(shù)據(jù)塊527的位置。在一個實施例中,腳本入口表524包括具有相同字段的第二腳本入口543。一個或多個腳本入口(諸如腳本入口542和腳本入口543)由包編輯器350用來生成修改的數(shù)據(jù)包。數(shù)據(jù)塊527包含一個或多個數(shù)據(jù)的塊以生成修改的數(shù)據(jù)包。圖4示出了基于包編輯腳本512生成數(shù)據(jù)包353的包編輯器350。在該實施例中,包編輯器350包括控制存儲器354、控制模塊356、包緩沖區(qū)359、以及包緩沖區(qū)標(biāo)記358。與圖4結(jié)合,圖4a示出了包編輯器350的處理流程。在步驟931中,響應(yīng)于接收包編輯腳本512,包編輯器350從腳本入口表524接收一個或多個腳本入口并且將所述腳本入口存儲到控制存儲器354中。在一個實施例中,包編輯器350從腳本入口表524檢索腳本入口542,并且將腳本入口542存儲到控制存儲器354中。包編輯器350檢查腳本入口542的EOT555。在一個實施例中,EOT555具有為0的值。包編輯器350確定腳本入口542不是腳本入口表524的最后一個腳本入口。包編輯器350從腳本入口表524檢索下一個腳本入口。在一個實施例中,EOT555具有為1的值。包編輯器350確定腳本入口542是腳本入口表524的最后一個腳本入口。包編輯器350完成步驟951。在步驟933中,控制模塊356從控制存儲器354檢索腳本入口542,并且開始處理腳本入口542。在步驟935中,控制模塊356檢查SOP554。在一個實施例中,SOP554具有為1的值??刂颇K356保存包緩沖區(qū)359,從而生成數(shù)據(jù)包353。控制模塊356在0處或者在包緩沖區(qū)359的開頭設(shè)置包緩沖區(qū)標(biāo)記358。在一個實施例中,SOP554具有為0的值。控制模塊356進(jìn)行到另一個步驟。在步驟937中,控制模塊356基于腳本入口542的塊位置551和塊長度552,從數(shù)據(jù)塊527復(fù)制一個數(shù)據(jù)的塊到包緩沖區(qū)359??刂颇K356在包緩沖區(qū)標(biāo)記358處向包緩沖區(qū)359添加數(shù)據(jù)的塊,所述數(shù)據(jù)的塊來自從塊位置551開始具有塊長度552大小的數(shù)據(jù)527??刂颇K356用塊長度552的值來使包緩沖區(qū)標(biāo)記358增大,這樣隨后的復(fù)制將在當(dāng)前被復(fù)制的數(shù)據(jù)塊后開始。在步驟939中,控制模塊356檢查EOP553。在一個實施例中,EOP553具有為1的值??刂颇K356確定在包緩沖區(qū)359中生成數(shù)據(jù)包353的完成,該數(shù)據(jù)包353具有的數(shù)據(jù)塊一直到包緩沖區(qū)標(biāo)記358。包編輯器350繼續(xù)步驟943。在一個實施例中,EOP553具有為0的值,跳過步驟943,且控制模塊356執(zhí)行步驟949。在步驟943中,包編輯器353進(jìn)一步包括校驗和模塊357。校驗和模塊357計算用于數(shù)據(jù)包353的校驗和。在一個實施例中,數(shù)據(jù)包353包括IP包。校驗和模塊357計算用于IP報頭的校驗和并且用所計算的校驗和修改數(shù)據(jù)包353。在一個實施例中,數(shù)據(jù)包353包括TCP或者UDP包,校驗和模塊357計算對于對應(yīng)的TCP或UDP包的校驗和,并且使用所計算的校驗和修改數(shù)據(jù)包353。在一個實施例中,數(shù)據(jù)包353包括需要校驗和的包格式,校驗和模塊357計算用于包格式的校驗和并且使用所計算的校驗和修改數(shù)據(jù)包353。在步驟949中,控制模塊356檢查EOT555。在一個實施例中,EOT555具有為1的值。控制模塊356確定包編輯腳本512的處理完成了。在一個實施例中,EOT555具有為0的值,控制模塊356從控制存儲器354取得第二腳本入口并且為第二腳本入口重復(fù)執(zhí)行步驟933-949。圖5示出了用于移除HTTP報頭字段的包編輯腳本612的示例。在該實施例中,腳本入口表624包括腳本入口642和腳本入口643。腳本入口642包括塊位置651=8塊長度652=192SOP654=1EOP653=0EOT655=0腳本入口643包括塊位置661=284塊長度662=726SOP664=0EOP663=1EOT665=1數(shù)據(jù)塊627包括總共1000字節(jié)的數(shù)據(jù),該數(shù)據(jù)可能是HTTP包。包編輯器350根據(jù)包編輯腳本612構(gòu)造數(shù)據(jù)包409,如圖4所示。更具體的,包編輯器350獲得腳本入口表的腳本入口642。腳本入口642在EOT655(值為0)中指示腳本入口642不是腳本入口表624中的最后一個腳本入口。值為1的SOP654指示數(shù)據(jù)包的開始。包編輯器350為數(shù)據(jù)包409準(zhǔn)備數(shù)據(jù)緩沖區(qū)。包編輯器350檢查塊位置651和塊長度652。包編輯器350從位置8(塊位置651的值)開始復(fù)制總共192(塊長度652的值)字節(jié)的數(shù)據(jù)塊627。值為0的EOP653指示數(shù)據(jù)包409的生成還沒有完成。在腳本入口642完成之后,包編輯器350獲得腳本入口643并相應(yīng)地進(jìn)行處理。SOP664具有為0的值,向包編輯器350指示繼續(xù)數(shù)據(jù)包409。包編輯器350檢查塊位置661和塊長度662。包編輯器350從包編輯腳本612的位置284(塊位置661的值)開始復(fù)制726(塊長度662的值)字節(jié)的數(shù)據(jù)627。在復(fù)制完成之后,包編輯器350從EOP663的值(1)確定數(shù)據(jù)包409的生成完成了。值為1的EOT665指示腳本入口643是腳本入口表624中的最后一個入口。包編輯器350確定包編輯器腳本612的處理完成了。在這個實施例中,包編輯器350不從位置192復(fù)制數(shù)據(jù)塊到位置284(總共92字節(jié))。在一個實施例中,不被復(fù)制的數(shù)據(jù)塊代表要被移除的HTTP報頭字段。圖6示出了用于插入數(shù)據(jù)(諸如HTTP報頭字段)和用于生成兩個數(shù)據(jù)包的包編輯腳本712的示例。在一個實施例中,兩個包的生成指示了將一個IP包分裂成兩個IP包。在該示例中,包編輯腳本712包括腳本入口表724,該腳本入口表724包括腳本入口742、743、744、745和756。腳本入口742包括塊位置821=0塊長度822=231SOP824=1EOP823=0EOT825=0腳本入口743包括塊位置831=1544塊長度832=200SOP834=0EOP833=0EOT835=0腳本入口744包括塊位置841=251塊長度842=1073SOP844=0EOP843=1EOT845=0腳本入口745包括塊位置851=1524塊長度852=20SOP854=1EOP853=0EOT855=0腳本入口746包括塊位置861=1324塊長度862=200SOP864=0EOP863=1EOT865=1數(shù)據(jù)塊727包括原始包772、第二包報頭773以及將被插入的數(shù)據(jù)塊774。在這個示例中,原始包772具有1504字節(jié)的大??;第二包報頭773具有20字節(jié)的大小,而要插入的數(shù)據(jù)塊774具有200字節(jié)的大小。在數(shù)據(jù)塊727中,原始包772的塊位置是20。第二包報頭773的塊位置是1524。要插入的數(shù)據(jù)塊774的塊位置是1324。根據(jù)圖4中所示的處理,包編輯器350按照腳本入口742、743、744、745和746的順序進(jìn)行處理,并且生成數(shù)據(jù)包411和數(shù)據(jù)包412。在處理SOP824是1的腳本入口742的過程中,包編輯器350為數(shù)據(jù)包411準(zhǔn)備數(shù)據(jù)緩沖區(qū)。包編輯器350從數(shù)據(jù)塊727復(fù)制從位置20(塊位置821的值)開始大小為231字節(jié)(塊長度822的值)的數(shù)據(jù)的塊。所述復(fù)制的數(shù)據(jù)的塊是原始包772的第一個231字節(jié)。接下來,包編輯器350根據(jù)腳本入口743從數(shù)據(jù)塊727復(fù)制從位置1544(塊位置831的值)開始大小為200(塊長度832的值)的數(shù)據(jù)的塊到數(shù)據(jù)包411上。所述被復(fù)制的數(shù)據(jù)的塊包括要被插入的數(shù)據(jù)塊774的整體。然后,包編輯器350根據(jù)腳本入口744從數(shù)據(jù)塊727復(fù)制從位置251(塊位置841的值)開始的大小為1073(塊長度842的值)的數(shù)據(jù)的塊到數(shù)據(jù)包411上。所述被復(fù)制的數(shù)據(jù)的塊是原始包772中緊跟腳本入口742中復(fù)制的數(shù)據(jù)的塊的數(shù)據(jù)塊。EOP843為1指示數(shù)據(jù)包411的生成完成。然后,包編輯器350繼續(xù)處理腳本入口745。SOP854為1指令包編輯器350準(zhǔn)備生成數(shù)據(jù)包412。包編輯器350從數(shù)據(jù)塊727復(fù)制從位置1524開始(塊位置851的值)大小為20字節(jié)(塊長度852的值)的數(shù)據(jù)的塊到數(shù)據(jù)包412上。所述被復(fù)制的數(shù)據(jù)的塊包括第二包報頭773的整體。包編輯器350繼續(xù)處理腳本入口746。包編輯器350從數(shù)據(jù)塊727復(fù)制從位置1324(塊位置861的值)開始大小為200字節(jié)(塊長度862的值)的數(shù)據(jù)的塊到數(shù)據(jù)包412上。被復(fù)制的數(shù)據(jù)的塊是原始包772在腳本入口744中被復(fù)制的數(shù)據(jù)的塊之后剩余的數(shù)據(jù)。腳本入口746的EOP863的值為1。包編輯器350確定數(shù)據(jù)包412的生成完成了。腳本入口746的EOT865具有為1的值。包編輯器350確定包編輯腳本712的處理完成。作為完成包編輯腳本712的結(jié)果,包編輯器350生成數(shù)據(jù)包411和數(shù)據(jù)包412。上述附圖示出了包編輯腳本512從數(shù)據(jù)塊527移除或者不復(fù)制一個或多個數(shù)據(jù)的塊以及從數(shù)據(jù)塊527復(fù)制一個或多個數(shù)據(jù)的塊的實施例。通過使用復(fù)制指令,本領(lǐng)域技術(shù)人員可以設(shè)計用于多種數(shù)據(jù)包處理的包編輯腳本。在一個實施例中,服務(wù)網(wǎng)關(guān)應(yīng)用314,如圖7所示,實現(xiàn)輸入數(shù)據(jù)包405的網(wǎng)絡(luò)地址轉(zhuǎn)換。服務(wù)網(wǎng)關(guān)應(yīng)用314為數(shù)據(jù)包405準(zhǔn)備作為替換IP/TCP/UDP報頭的數(shù)據(jù)塊532。服務(wù)網(wǎng)關(guān)應(yīng)用314創(chuàng)建包編輯腳本512,所述腳本中數(shù)據(jù)塊527包括數(shù)據(jù)包405和數(shù)據(jù)塊532,還創(chuàng)建包括一個或多個指令包編輯器350不復(fù)制數(shù)據(jù)包405的IP/TCP/UDP報頭、復(fù)制數(shù)據(jù)塊532、以及復(fù)制數(shù)據(jù)包405剩余部分的腳本入口的腳本入口表524。在本發(fā)明的一個實施例中,服務(wù)網(wǎng)關(guān)應(yīng)用314執(zhí)行IP隧穿網(wǎng)關(guān)(諸如IP-IP隧道,IPv4/IPv6隧道)。服務(wù)網(wǎng)關(guān)應(yīng)用314接收數(shù)據(jù)包405并確定要插入IP隧道報頭。服務(wù)網(wǎng)關(guān)應(yīng)用314準(zhǔn)備數(shù)據(jù)塊532作為IP隧道報頭。服務(wù)網(wǎng)關(guān)應(yīng)用314創(chuàng)建包編輯腳本512,其中的數(shù)據(jù)塊527包括數(shù)據(jù)包405和數(shù)據(jù)塊532,還創(chuàng)建腳本入口表524以包括一個或多個腳本入口,用于指令包編輯器350復(fù)制數(shù)據(jù)塊532以及復(fù)制數(shù)據(jù)包405。在一個實施例中,服務(wù)網(wǎng)關(guān)應(yīng)用314確定要移除IP隧道報頭。服務(wù)網(wǎng)關(guān)應(yīng)用314確定IP隧道報頭的大小。服務(wù)網(wǎng)關(guān)應(yīng)用314創(chuàng)建包編輯腳本512,其中的數(shù)據(jù)塊527包括數(shù)據(jù)包405,以及創(chuàng)建腳本入口542使得腳本入口542的塊位置跳過隧道報頭。包編輯腳本512指令包編輯器350在跳過或者不復(fù)制IP隧道報頭的同時復(fù)制數(shù)據(jù)包405。在一個實施例中,服務(wù)網(wǎng)關(guān)應(yīng)用314實現(xiàn)代理服務(wù),諸如TCP代理或者HTTP代理。服務(wù)網(wǎng)關(guān)應(yīng)用314接收輸入的數(shù)據(jù)包405并確定在數(shù)據(jù)包403中的第一組的多個數(shù)據(jù)塊要被第二組的多個數(shù)據(jù)塊替換。服務(wù)網(wǎng)關(guān)應(yīng)用314準(zhǔn)備該第二組的多個數(shù)據(jù)塊,并且創(chuàng)建包編輯腳本512,其中包編輯腳本512的數(shù)據(jù)塊527包括數(shù)據(jù)包405以及第二組的多個數(shù)據(jù)塊。包編輯腳本512也準(zhǔn)備腳本入口表524以包括多個腳本入口,所述腳本入口用于指令包編輯器350從數(shù)據(jù)包405復(fù)制某些數(shù)據(jù)塊、不從數(shù)據(jù)包405復(fù)制第一組的多個數(shù)據(jù)塊、以及復(fù)制第二組的多個數(shù)據(jù)塊,本質(zhì)上是用第二組的多個數(shù)據(jù)塊來替換第一組的多個數(shù)據(jù)塊。盡管本發(fā)明已根據(jù)示出的實施例進(jìn)行了描述,一個本領(lǐng)域技術(shù)人員將容易地認(rèn)識到可以對實施例作變形,并且這些變形也在本發(fā)明的精神和范圍內(nèi)。因此,本領(lǐng)域技術(shù)人員在不背離所附權(quán)利要求書的精神和范圍的情況下可以作出許多修改。