基于硬件的包编辑器的制作方法与工艺

文档序号:12866664阅读:134来源:国知局
基于硬件的包编辑器的制作方法与工艺
本发明大致涉及数据通信,更具体的,涉及服务网关。

背景技术:
如防火墙、服务加载均衡器之类的服务网关已由服务提供商和企业配置。在过去,服务网关用于安全之类的特殊目的。但是,现在服务网关应用被扩展。许多服务提供商配置服务网关以完成多种服务网关应用,从而检查和分析在主机设备和服务器计算机之间的通信会话的数据包。许多网关应用修改包来帮助对数据包和通信会话的分析。包修改是计算加强且存储接入加强的任务。修改任务通常由服务网关的处理器模块完成。通常,处理器或者处理器模块分析数据包,确定必要的修改数据块,产生包存储缓冲区,从数据包复制一些数据到数据包存储缓冲区中并复制所述修改数据块到包存储缓冲区中。当数据复制完成时,处理器已经从原始的数据包产生了新的数据包。然后服务网关将产生的数据包发送到网络上。数据包修改处理对处理器模块来说代价很高,其消耗CPU周期和存储接入带宽。如果数据包修改处理可以由服务网关的基于硬件的高执行模块卸载和处理,则处理器模块可以分配其资源来处理附加的数据包或者附加的通信会话。因此,需要引入基于硬件的高执行包编辑模块来处理数据包修改。

技术实现要素:
根据本发明的一个实施例,一种由基于硬件的包编辑器修改数据包的方法包括:(a)由包编辑器接收包编辑脚本,所述脚本包括一个或多个指示应用于数据包和包括用于修改包的数据的数据块的修改的脚本入口;(b)对于包编辑脚本中每一个给定的脚本入口,包编辑器将处于在该给定脚本入口中识别的位置且为在该给定脚本入口中识别的大小的数据块中的数据复制到包缓冲区中;以及(c)包编辑器用包缓冲区中的数据生成修改数据包。在本发明的一方面,复制(b)包括:(b1)检索所述包编辑脚本的给定脚本入口;(b2)确定该给定脚本入口是否是用于修改数据包的第一脚本入口;(b3)响应于确定所述给定脚本入口是用于修改数据包的第一脚本入口,保留用于修改数据包的包缓冲区;(b4)将处于在给定的编辑脚本中识别的块位置并具有在给定的编辑脚本中识别的块长度的数据块中的数据复制到数据缓冲区中;(b5)确定该给定脚本入口是否是用于修改数据包的最后一个脚本入口;(b6)响应于确定所述给定脚本入口不是用于修改数据包的最后一个脚本入口,为包编辑脚本的下一个给定脚本入口执行所述复制(b4)和确定(b5)。在本发明的一方面,所述确定(b2)包括:(b2i)确定给定脚本入口中的包开始(SOP)指示符是否指示所述给定脚本入口是用于修改数据包的第一脚本入口。在本发明的一方面,所述确定(b5)包括:(b5i)确定给定脚本入口中的包结束(EOP)指示符是否指示所述给定脚本入口是用于修改数据包的最后一个脚本入口。在本发明的一方面,所述保留(b3)和复制(b4)包括:(b3i)在包缓冲区开始的地方设置包缓冲区标记;(b4i)将处于在给定编辑脚本中识别的块位置且具有在给定编辑脚本中识别的块长度的数据块中的数据的副本添加到包缓冲区标记处的包缓冲区;以及(b4ii)用在给定编辑脚本中识别的块长度修改包缓冲区标记。在本发明的一方面,所述生成(c)包括:(c1)响应于确定所述给定脚本入口是用于修改数据包的最后一个脚本入口,用包缓冲区中的数据生成修改的数据包。在本发明的一方面,所述生成(c)进一步包括:(c2)确定给定的脚本入口是否是包编辑脚本中的最后一个脚本入口;以及(c3)响应于确定所述给定脚本入口不是包编辑脚本中的最后一个脚本入口,为包编辑脚本中的下一个给定脚本入口重复所述检索(b1)、所述确定(b2)、所述保留(b3)、所述复制(b4)、所述确定(b5)、所述执行(b6)以及所述生成(c1)。在本发明的一方面,所述确定(c2)包括:(c2i)确定给定脚本入口中的表结束(EOP)指示符是否指示所述给定脚本入口是包编辑脚本中的最后一个脚本入口。根据本发明的另一个实施例,一种由包含处理器的服务网关对数据包进行处理的方法,包括:由处理器接收将从主机向服务器发送或者将从服务器向主机发送的数据包;由处理器确定数据包在发送给服务器或主机之前需要修改;由处理器生成包编辑脚本,所述脚本包括一个或多个指示应用于数据包和包括用于修改包的数据的数据块的修改的脚本入口,其中所述生成包括:对于确定包括在修改包中的数据包的每个和任意给定部分,生成用于识别在数据块中对应于确定包括的给定部分的第一位置和第一长度的第一脚本入口;对于确定要从数据包移除的数据包的每个和任意给定部分,省略对应于确定要移除的给定部分的脚本入口的生成;以及对于确定要加入到修改包中的每个和任意新数据,生成将包括在包编辑脚本的数据块中的新数据并生成识别数据块中对应于新数据的第二位置和第二长度的第二脚本入口;以及由处理器发送包编辑脚本到基于硬件的包编辑器,其中包编辑器根据在包编辑脚本中的脚本入口生成修改的包。对应于上述概述方法的系统和计算机程序产品也在此被描述和要求保护。附图说明图1示出根据本发明的使用具有基于硬件的包编辑器的服务网关的通信会话处理方法的实施例。图2示出根据本发明的包处理流程的实施例。图3示出了根据本发明的包编辑脚本的实施例。图4和4a示出根据本发明的包编辑处理流程的实施例。图5示出根据本发明实施例的移除HTTP报头属性的示例。图6示出根据本发明实施例的插入HTTP报头和包分裂成两个包的示例。图7示出根据本发明的服务网关应用的附加实施例。具体实施方式以下描述的呈现使得本领域技术人员可以制造和使用本发明,并且以下描述被提供在专利申请和其要求的内容中。对实施例的多种修改对于本领域技术人员是容易显而易见的,并且在此处的一般原理可以被应用于其他实施例。因此,本发明并不旨在被限制于所示的实施例,而是根据与在此描述的原理和特征一致的最宽的范围。本发明可以采用整个为硬件的实施例的形式、整个为软件的实施例或者既包括硬件元件又包括软件元件的实施例。在较佳实施例中,本发明由软件实现,所述软件包括但不限于固件、常驻软件、微代码等。进一步的,本发明可以采用计算机程序产品,该计算机程序产品可从提供计算机或任何指令执行系统使用或与其连接的程序码的计算机可用或计算机可读介质获得。为了该说明目的,计算机可用或计算机可读介质可以是任何可包含、存储、通信、传播或传输指令执行系统、装置或设备使用或与其连接的eh程序的装置。介质可以是电、磁、光、电磁、红外、或半导体系统(或装置或设备)或传播介质。计算机可读介质的示例包括半导体或固态存储器、磁带、可移动计算机磁盘、随机存取存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。现今光盘的示例包括高密度磁盘-只读存储器(CD-ROM)、高密度磁盘-读/写(CD-R/W)和DVD。适用于存储和/或执行程序代码的数据处理系统将包括至少一个处理器,所述处理器直接或通过系统总线间接耦合到存储元件。存储元件可以包括在程序代码的实际执行过程中使用的本地存储器、大容量存储装置以及为了减少在执行过程中必须从大容量存储装置中检索代码的次数而为至少一些程序代码提供临时存储的高速缓冲存储器。输入/输出或者I/O设备(包括但不限于键盘、显示器、点设备等)可以直接或者通过插入的I/O控制器耦合到系统。网络适配器也可以耦合到系统,使得数据处理系统变为通过插入的私人网络或公共网络耦合到其他数据处理系统或者远程的打印机或存储设备。调制解调器、电缆调制解调器和以太网卡只是当前可用的网络适配器的一少部分类型。附图中的流程图和框图示出根据本发明多个实施例的系统、方法和计算机程序产品可以实现的结构、功能和操作。在这点上,流程图或框图中的每个块可代表模块、段或者代码的部分,所述代码包括一个或多个可执行的指令,用于实现指定的本地功能。还应该注意到,在一些可替换的执行实例中,块中注释的功能可以不以附图中注释的顺序发生。举例来说,根据包含的功能,所示出的接连的两个块事实上可以基本上同时执行,或者块有时可以倒过来的顺序执行。还应该注意到,框图和/或流程图展示中的每个块,以及框图和/或流程图展示中的块的组合可以由执行指定功能或动作的基于硬件的特殊用途的系统,或者由特殊用途的硬件和计算机指令的组合来实现。此处使用的术语只是出于描述特定实施例的目的,其并不旨在限制本发明。如此处所使用的,单数形式“一”和“所述”旨在同样包括复数形式,除非内容明确指出。应该进一步理解的是,当在本说明书中使用时,术语“包括”和/或“包含”,规定了固有特征、整数、步骤、操作、元件和/或成分的存在,但并不排除一个或多个其他特征、整数、步骤、操作、元件、成分和/或其群组的存在或添加。在图1所示的实施例中,服务网关300处理在主机100和服务器200之间的通信会话400。会话400在数据网络150上传送。在一个实施例中,数据网络150包括互联网协议(IP)网络、联合数据网、地域联合数据网、互联网服务提供商网络、住宅数据网络、如以太网之类的有线网、如WiFi网络之类的无线网、蓝牙网络、或者蜂窝式网络。在一个实施例中,数据网络150位于数据中心,或者连接到网络或应用网络云。主机100是具有网络接入能力的计算设备。在一个实施例中,主机100是工作站、台式个人计算机或者膝上型个人计算机、个人数据助手(PDA)、写字板PC、智能手机、或者蜂窝式手机、机顶盒、互联网媒体阅读器、互联网媒体播放器、智能传感器、智能医疗设备、网顶盒、网络电视机、网络DVR、网络蓝光播放器、媒体中心、或者网络连接的设备。服务器200是典型地与处理器和存储计算机可读程序代码的计算机可读介质耦合的计算设备。具有处理器和计算机可读程序代码的服务器200实现万维网服务器、文件服务器、视频服务器、数据库服务器、应用服务器、语音系统、会议服务器、媒体网关、媒体中心、应用服务器或使用通信会话400向主机100提供网络服务或应用服务的网络服务器的功能。服务网关300操作性地耦合到处理器模块310、包编辑器350、网络接口模块330、以及计算机可读介质340。计算机可读介质340存储计算机可读程序化码,该程序代码当由处理器模块310执行时,实现如本文描述的本发明的多个实施例。在一些实施例中,服务网关300实现为服务器加载均衡器、应用传输控制器、服务传输平台、通信量管理器、安全网关、防火墙系统中的部件、虚拟私人网络(VPN)的部件、视频服务器的加载均衡器、将加载分配给一个或多个服务器的网关、处理HTTP服务会话300的HTTP层的万维网或HTTP服务器、或者执行网络地址转换(NAT)的网关。处理器模块330典型地包括一个或多个通用处理器或者微处理器。在一个实施例中,处理器模块330包括多核微处理器。在一个实施例中,处理器模块330包括存储变量的存储器单元,所述变量在计算机可读模块340中存储的计算机可读程序代码的执行过程中使用。网络接口模块330连接到数据网络150。网络接口模块330从主机100和服务器200接收通信会话400的数据包,并且向主机100和服务器200发送通信会话400的数据包。包编辑器350是基于硬件的包处理加速模块,典型地包括处理数据包的高执行能力。在一个实施例中,包编辑器350包括现场可编程门阵列(FPGA)模块、专用集成电路(ASIC)模块、数字信号处理器(DSP)、或者能够执行包编辑器350的高速处理需求的电路。在一个实施例中,主机100向服务器200发送通信会话400的数据包403。服务网关300通过网络模块330接收数据包403。处理器模块310根据计算机可读介质340上存储的计算机可读程序代码处理数据包403。处理器模块310确定数据包403要由包编辑器350修改。包编辑器350接收数据包403并且生成数据包408。网络模块330向服务器200发送数据包408。在一个实施例中,服务器200向主机100发送通信会话400的数据包418。服务网关300通过网络模块330接收数据包418。处理器模块310根据计算机可读介质340上存储的计算机可读程序代码处理数据包418。处理器模块310确定数据包418要由包编辑器350修改。包编辑器350接收数据包418并且生成数据包413。网络模块330向服务器200发送数据包408。在一个实施例中,数据包403是超文本传输协议(HTTP)包,并且包编辑器350移除数据包403的HTTP报头的一部分来生成数据包408。在一个实施例中,418是HTTP包,而包编辑器350向数据包418插入HTTP报头,从而生成数据包413。在一个实施例中,数据包403是一个包括IP报头的IP包,而包编辑器350向数据包403插入第二IP报头,从而生成IP隧道数据包413。在一个实施例中,包编辑器350在发送数据包413和第二数据包到服务器200之前,执行IP分裂以生成数据包413和第二数据包(未示出)。在一个实施例中,数据包418是IP隧道包,而包编辑器350从数据包418移除IP报头,从而生成数据包413。在一个实施例中,包编辑器350通过复制一个或多个数据包403的数据块到数据包408上、通过来自处理器模块310的指令复制附加数据块到数据包408上、使用数据包403的一个或多个部分计算校验和并将校验和放置到数据包408上,来处理数据包403,以生成数据包408。上述对数据包408的数据包修改可应用在很多服务网关300的实现中,例如,作为HTTP代理服务器、TCP代理服务器、层3/层4隧道网关、防火墙、IP隧道网关、IPv4/IPv6隧穿网关、IP-IP隧穿网关。图2示出了处理数据包405的服务网关300。服务网关300接收数据包405。数据包405可以由主机100或服务器200发送。服务网关300实现服务网关应用314,该服务网关应用314是驻留在计算机可读介质340中由处理器模块310执行的软件。基于数据包405,应用314确定数据包405需要修改。应用314生成包编辑脚本512。包编辑脚本512包括一个或多个脚本入口,该脚本入口指示要应用到数据包405的必要修改。当应用314确定数据需要包括在数据包305中时,应用314生成描述要包括的数据的脚本入口。当应用314确定数据要从数据包305中移除时,应用314省略生成将描述被移除的数据的脚本入口。当应用314确定数据要被插入到数据包305中时,应用314生成描述要被插入的数据的脚本入口。对于包编辑脚本512的更详细的描述会稍后出现在本说明书中。例如,在一个实施例中,应用314确定HTTP报头要从数据包305中移除。包编辑脚本512描述要移除的HTTP报头的部分。在一个实施例中,应用314确定HTTP报头要插入到数据包305中。包编辑脚本512描述HTTP报头要被插入的位置以及用于HTTP报头的数据。在一个实施例中,应用314确定附加的IP报头要插入到数据包305中。包编辑脚本512描述附加IP报头的细节,使得包编辑器350将执行所述插入。在一个实施例中,包编辑脚本512包括数据包405。然后,应用314向包编辑器350发送包编辑脚本512,有效地通知包编辑器350将使用包编辑脚本512来修改数据包305。包编辑器350接收包编辑脚本512并且基于包编辑脚本512生成数据包415。在一个实施例中,包编辑器350发送数据包415到网络模块330用于传输。在一个实施例中,包编辑器350在生成数据包415之后通知应用314。应用314通知网络模块330以发送数据包415。图3示出包编辑脚本512。在一个实施例中,包编辑脚本512包括脚本入口表524和数据块527。脚本入口表524包括脚本入口542。在一个实施例中,脚本入口542包括多个字段,所述字段包括块位置551、块长度552、包开始指示符(SOP)554、包结束指示符(EOP)553、以及脚本结束指示符(EOT)555。在一个实施例中,SOP554、EOP553和EOT555是1比特长的指示符;块位置551具有10比特的值;块长度552是11比特的值。脚本入口542可以包括一个或多个未使用的多比特字段,使得脚本入口542是一个4字节或者32比特长的数据结构。块位置551和块长度552涉及数据块527中的一个数据的块。块位置551涉及数据块527的位置。在一个实施例中,脚本入口表524包括具有相同字段的第二脚本入口543。一个或多个脚本入口(诸如脚本入口542和脚本入口543)由包编辑器350用来生成修改的数据包。数据块527包含一个或多个数据的块以生成修改的数据包。图4示出了基于包编辑脚本512生成数据包353的包编辑器350。在该实施例中,包编辑器350包括控制存储器354、控制模块356、包缓冲区359、以及包缓冲区标记358。与图4结合,图4a示出了包编辑器350的处理流程。在步骤931中,响应于接收包编辑脚本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的值。控制模块356保存包缓冲区359,从而生成数据包353。控制模块356在0处或者在包缓冲区359的开头设置包缓冲区标记358。在一个实施例中,SOP554具有为0的值。控制模块356进行到另一个步骤。在步骤937中,控制模块356基于脚本入口542的块位置551和块长度552,从数据块527复制一个数据的块到包缓冲区359。控制模块356在包缓冲区标记358处向包缓冲区359添加数据的块,所述数据的块来自从块位置551开始具有块长度552大小的数据527。控制模块356用块长度552的值来使包缓冲区标记358增大,这样随后的复制将在当前被复制的数据块后开始。在步骤939中,控制模块356检查EOP553。在一个实施例中,EOP553具有为1的值。控制模块356确定在包缓冲区359中生成数据包353的完成,该数据包353具有的数据块一直到包缓冲区标记358。包编辑器350继续步骤943。在一个实施例中,EOP553具有为0的值,跳过步骤943,且控制模块356执行步骤949。在步骤943中,包编辑器353进一步包括校验和模块357。校验和模块357计算用于数据包353的校验和。在一个实施例中,数据包353包括IP包。校验和模块357计算用于IP报头的校验和并且用所计算的校验和修改数据包353。在一个实施例中,数据包353包括TCP或者UDP包,校验和模块357计算对于对应的TCP或UDP包的校验和,并且使用所计算的校验和修改数据包353。在一个实施例中,数据包353包括需要校验和的包格式,校验和模块357计算用于包格式的校验和并且使用所计算的校验和修改数据包353。在步骤949中,控制模块356检查EOT555。在一个实施例中,EOT555具有为1的值。控制模块356确定包编辑脚本512的处理完成了。在一个实施例中,EOT555具有为0的值,控制模块356从控制存储器354取得第二脚本入口并且为第二脚本入口重复执行步骤933-949。图5示出了用于移除HTTP报头字段的包编辑脚本612的示例。在该实施例中,脚本入口表624包括脚本入口642和脚本入口643。脚本入口642包括块位置651=8块长度652=192SOP654=1EOP653=0EOT655=0脚本入口643包括块位置661=284块长度662=726SOP664=0EOP663=1EOT665=1数据块627包括总共1000字节的数据,该数据可能是HTTP包。包编辑器350根据包编辑脚本612构造数据包409,如图4所示。更具体的,包编辑器350获得脚本入口表的脚本入口642。脚本入口642在EOT655(值为0)中指示脚本入口642不是脚本入口表624中的最后一个脚本入口。值为1的SOP654指示数据包的开始。包编辑器350为数据包409准备数据缓冲区。包编辑器350检查块位置651和块长度652。包编辑器350从位置8(块位置651的值)开始复制总共192(块长度652的值)字节的数据块627。值为0的EOP653指示数据包409的生成还没有完成。在脚本入口642完成之后,包编辑器350获得脚本入口643并相应地进行处理。SOP664具有为0的值,向包编辑器350指示继续数据包409。包编辑器350检查块位置661和块长度662。包编辑器350从包编辑脚本612的位置284(块位置661的值)开始复制726(块长度662的值)字节的数据627。在复制完成之后,包编辑器350从EOP663的值(1)确定数据包409的生成完成了。值为1的EOT665指示脚本入口643是脚本入口表624中的最后一个入口。包编辑器350确定包编辑器脚本612的处理完成了。在这个实施例中,包编辑器350不从位置192复制数据块到位置284(总共92字节)。在一个实施例中,不被复制的数据块代表要被移除的HTTP报头字段。图6示出了用于插入数据(诸如HTTP报头字段)和用于生成两个数据包的包编辑脚本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数据块727包括原始包772、第二包报头773以及将被插入的数据块774。在这个示例中,原始包772具有1504字节的大小;第二包报头773具有20字节的大小,而要插入的数据块774具有200字节的大小。在数据块727中,原始包772的块位置是20。第二包报头773的块位置是1524。要插入的数据块774的块位置是1324。根据图4中所示的处理,包编辑器350按照脚本入口742、743、744、745和746的顺序进行处理,并且生成数据包411和数据包412。在处理SOP824是1的脚本入口742的过程中,包编辑器350为数据包411准备数据缓冲区。包编辑器350从数据块727复制从位置20(块位置821的值)开始大小为231字节(块长度822的值)的数据的块。所述复制的数据的块是原始包772的第一个231字节。接下来,包编辑器350根据脚本入口743从数据块727复制从位置1544(块位置831的值)开始大小为200(块长度832的值)的数据的块到数据包411上。所述被复制的数据的块包括要被插入的数据块774的整体。然后,包编辑器350根据脚本入口744从数据块727复制从位置251(块位置841的值)开始的大小为1073(块长度842的值)的数据的块到数据包411上。所述被复制的数据的块是原始包772中紧跟脚本入口742中复制的数据的块的数据块。EOP843为1指示数据包411的生成完成。然后,包编辑器350继续处理脚本入口745。SOP854为1指令包编辑器350准备生成数据包412。包编辑器350从数据块727复制从位置1524开始(块位置851的值)大小为20字节(块长度852的值)的数据的块到数据包412上。所述被复制的数据的块包括第二包报头773的整体。包编辑器350继续处理脚本入口746。包编辑器350从数据块727复制从位置1324(块位置861的值)开始大小为200字节(块长度862的值)的数据的块到数据包412上。被复制的数据的块是原始包772在脚本入口744中被复制的数据的块之后剩余的数据。脚本入口746的EOP863的值为1。包编辑器350确定数据包412的生成完成了。脚本入口746的EOT865具有为1的值。包编辑器350确定包编辑脚本712的处理完成。作为完成包编辑脚本712的结果,包编辑器350生成数据包411和数据包412。上述附图示出了包编辑脚本512从数据块527移除或者不复制一个或多个数据的块以及从数据块527复制一个或多个数据的块的实施例。通过使用复制指令,本领域技术人员可以设计用于多种数据包处理的包编辑脚本。在一个实施例中,服务网关应用314,如图7所示,实现输入数据包405的网络地址转换。服务网关应用314为数据包405准备作为替换IP/TCP/UDP报头的数据块532。服务网关应用314创建包编辑脚本512,所述脚本中数据块527包括数据包405和数据块532,还创建包括一个或多个指令包编辑器350不复制数据包405的IP/TCP/UDP报头、复制数据块532、以及复制数据包405剩余部分的脚本入口的脚本入口表524。在本发明的一个实施例中,服务网关应用314执行IP隧穿网关(诸如IP-IP隧道,IPv4/IPv6隧道)。服务网关应用314接收数据包405并确定要插入IP隧道报头。服务网关应用314准备数据块532作为IP隧道报头。服务网关应用314创建包编辑脚本512,其中的数据块527包括数据包405和数据块532,还创建脚本入口表524以包括一个或多个脚本入口,用于指令包编辑器350复制数据块532以及复制数据包405。在一个实施例中,服务网关应用314确定要移除IP隧道报头。服务网关应用314确定IP隧道报头的大小。服务网关应用314创建包编辑脚本512,其中的数据块527包括数据包405,以及创建脚本入口542使得脚本入口542的块位置跳过隧道报头。包编辑脚本512指令包编辑器350在跳过或者不复制IP隧道报头的同时复制数据包405。在一个实施例中,服务网关应用314实现代理服务,诸如TCP代理或者HTTP代理。服务网关应用314接收输入的数据包405并确定在数据包403中的第一组的多个数据块要被第二组的多个数据块替换。服务网关应用314准备该第二组的多个数据块,并且创建包编辑脚本512,其中包编辑脚本512的数据块527包括数据包405以及第二组的多个数据块。包编辑脚本512也准备脚本入口表524以包括多个脚本入口,所述脚本入口用于指令包编辑器350从数据包405复制某些数据块、不从数据包405复制第一组的多个数据块、以及复制第二组的多个数据块,本质上是用第二组的多个数据块来替换第一组的多个数据块。尽管本发明已根据示出的实施例进行了描述,一个本领域技术人员将容易地认识到可以对实施例作变形,并且这些变形也在本发明的精神和范围内。因此,本领域技术人员在不背离所附权利要求书的精神和范围的情况下可以作出许多修改。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1