一种透明代理及其实现方法技术

技术编号:9528661 阅读:103 留言:0更新日期:2014-01-02 18:10
本发明专利技术公开了一种透明代理及其实现方法,透明代理与客户端之间建立TCP链路;透明代理通过链路层网卡获取客户端发往目的服务端的业务数据包,并根据业务数据包的应用层协议类型选择相应的粘合服务端;透明代理与粘合服务端之间建立TCP链路;透明代理修改客户端的业务数据包的目的地址,将修改后的业务数据包通过链路层网卡直接发往粘合服务端进行处理。采用本发明专利技术,能够实现数据的按应用层协议类型高性能转发。

【技术实现步骤摘要】
一种透明代理及其实现方法
本专利技术涉及移动互联网
,尤其涉及一种透明代理及其实现方法。
技术介绍
随着移动互联网的飞速发展,形形色色的业务流量(http/ftp/rtsp/p2p…)在网络中传输,伴随而生的就是各种个性化的特色需求,需要对各种业务流量进行分拣,并发送到各种专用服务器进行信息加工与处理。透明代理是实现截获终端发送原始数据并转发送至各个专用服务器的关键桥梁,tcp粘合技术是实现透明代理的关键技术,使用tcp底层链路管理与数据交换技术,使客户端和专用服务器在感觉不到其存在的情况下建立通信链路。
技术实现思路
本专利技术解决的技术问题是提供一种透明代理及其实现方法,能够实现数据的按应用层协议类型高性能转发。为解决上述技术问题,本专利技术提供了一种透明代理实现方法,透明代理与客户端之间建立TCP链路;所述透明代理通过链路层网卡获取所述客户端发往目的服务端的业务数据包,并根据所述业务数据包的应用层协议类型选择相应的粘合服务端;所述透明代理与所述粘合服务端之间建立TCP链路;所述透明代理修改所述客户端的业务数据包的目的地址,将修改后的业务数据包通过链路层网卡直接发往所述粘合服务端进行处理。进一步地,所述透明代理与所述客户端建立TCP链路的过程,包括:所述客户端发起syn建链请求,所述syn建链请求中携带随机产生的第一初始序列号,且源地址和源端口为所述客户端的IP和端口号,目的地址和目的端口为所述服务端的IP和端口号;所述透明代理获取所述客户端发起的所述syn建链请求,向所述客户端发起第二次握手syn_ack,所述syn_ack中携带随机产生的第二初始序列号,且源地址和源端口为所述目的服务端的IP和端口号,目的地址和目的端口为所述客户端的IP和端口号;所述客户端发起第三次握手ack,所述透明代理与所述客户端的TCP链路建立完成。进一步地,所述方法还包括:所述透明代理与所述客户端建立TCP链路时,所述透明代理保存所述客户端发起的第三次握手ack包,以及所述ack包后续的一个或几个数据包。进一步地,所述透明代理与所述粘合服务端建立TCP链路的过程,包括:所述透明代理选择所述粘合服务端,并向所述粘合服务端发起syn建链请求,所述syn建链请求中携带的目的地址和端口为所述粘合服务端的IP和端口号;所述粘合服务端回应syn_ack,所述syn_ack携带随机产生的序列号;所述透明代理对序列号进行同步后,将保存的所述客户端发起的第三次握手ack包和后续的一个或几个数据包发送给所述粘合服务端,所述透明代理与所述粘合服务端的TCP链路建立完成。进一步地,其特征在于,所述方法还包括:所述链路层网卡维护缓存的数据包内存块,并将内存块索引通知应用层;应用层根据所述内存块索引对链路层的内存数据包进行收发控制。进一步地,所述方法还包括:所述透明代理将所述客户端的业务数据包中的初始目的地址与修改后的目的地址共同组成目的地址池,并将所述目的地址池与源地址、源端口及传输层协议类型与数据流id建立关联后进行保存。本专利技术还提供了一种透明代理,所述透明代理包括数据获取模块,建链模块,和数据转发模块,所述数据获取模块,用于通过链路层网卡获取客户端发往目的服务端的业务数据包,并根据所述业务数据包的应用层协议类型选择相应的粘合服务端;所述建链模块,用于分别与所述客户端以及所述粘合服务端之间建立TCP链路;所述数据转发模块,用于修改所述客户端的业务数据包的目的地址,将修改后的业务数据包通过链路层网卡直接发往所述粘合服务端进行处理。进一步地,所述建链模块用于,按照以下方式与所述客户端建立TCP链路:所述建链模块获取所述客户端发起的所述syn建链请求,所述syn建链请求中携带随机产生的第一初始序列号,且源地址和源端口为所述客户端的IP和端口号,目的地址和目的端口为所述服务端的IP和端口号;所述建链模块向所述客户端发起第二次握手syn_ack,所述syn_ack中携带随机产生的第二初始序列号,且源地址和源端口为所述目的服务端的IP和端口号,目的地址和目的端口为所述客户端的IP和端口号;接收到所述客户端发起的第三次握手ack时,所述建链模块与所述客户端的TCP链路建立完成;且所述建链模块保存所述客户端发起的第三次握手ack包以及后续的一个或几个数据包。进一步地,所述建链模块用于,按照以下方式与粘合服务端建立TCP链路:所述建链模块向所述粘合服务端发起syn建链请求,所述syn建链请求中携带的目的地址和端口为所述粘合服务端的IP和端口号;所述建链模块接收到所述粘合服务端回应的syn_ack时,根据所述syn_ack中携带的随机产生的序列号对序列号进行同步后,将与所述客户端建立TCP链路时保存的所述客户端发起的第三次握手ack包和后续的一个或几个数据包发送给所述粘合服务端,所述建链模块与所述粘合服务端的TCP链路建立完成。进一步地,所述透明代理还包括数据流粘合模块,所述数据流粘合模块,用于将所述客户端的业务数据包中的初始目的地址与修改后的目的地址共同组成目的地址池,并将所述目的地址池与源地址、源端口及传输层协议类型与数据流id建立关联后进行保存。本专利技术中,透明代理的数据直接来源于链路层网卡,并通过网卡直接发送,不经由操作系统协议栈,无须启动监听,实现数据高效传输;此外,透明代理与客户端及服务端的双边链路建立之后,后续数据流实现透明传输,并且保持了通信过程中客户端和服务端之间五元组信息的一致性和序列空间的同步性。附图说明此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1是本专利技术实施例的客户端-服务器数据流截获处理与转发示意图;图2是本专利技术实施例的客户端-服务器序列号粘合示意图;图3是本专利技术实施例的客户端-服务器IP/PORT粘合示意图;图4是本专利技术实施例的目标服务器与粘合服务器地址池管理与数据流约束示意图。具体实施方式本专利技术提供一种透明代理实施方案,以tcp粘合作为底层实现手段,实现透明代理。通过对客户端和服务端的双边欺诈,实现客户端和服务端直接数据的透明传输,此处所述的服务端不是客户端请求的目的服务端,而是转发处理的专用服务器,数据经由该服务器处理之后再被最终发送至目标服务端。具体地,本实施方案的tcp代理粘合方案,具有如下主要内容:1)不需要内核空间与应用层空间的数据交换内核空间只需要提供一个内存索引,应用空间可以根据这个内存索引操作相应的内存块。不仅是建链完成后的数据传输,包括建链阶段,都不需要应用空间和内核空间的数据交换,可以实现更高的性能。其中,透明代理如果在应用层实现,由于涉及内核空间和用户空间的海量内存拷贝,会严重影响性能;而如果纯粹在内核层实现,则需要经由tcp/ip协议栈处理,且实现复杂度非常高。而本专利技术中用户空间只进行控制,数据全部由网卡直接进行交换,用户空间只需操作内核内存的索引,而无须拷贝,所以性能与直接在内核实现相差无几;同时,因为控制逻辑在应用层实现,又大大降低了实现复杂性,提高了可维护性。链路层网卡驱动维护大块内存,用于高速数据包缓存,并只向应用空间通知内存块索引。数据不需要在内核空间和应用空间之间进行拷贝,应用层进程直接对本文档来自技高网...

【技术保护点】
一种透明代理实现方法,其特征在于,透明代理与客户端之间建立TCP链路;所述透明代理通过链路层网卡获取所述客户端发往目的服务端的业务数据包,并根据所述业务数据包的应用层协议类型选择相应的粘合服务端;所述透明代理与所述粘合服务端之间建立TCP链路;所述透明代理修改所述客户端的业务数据包的目的地址,将修改后的业务数据包通过链路层网卡直接发往所述粘合服务端进行处理。

【技术特征摘要】
1.一种透明代理实现方法,其特征在于,透明代理与客户端之间建立TCP链路;所述透明代理通过链路层网卡获取所述客户端发往目的服务端的业务数据包,并根据所述业务数据包的应用层协议类型选择相应的粘合服务端;所述透明代理与所述粘合服务端之间建立TCP链路;所述透明代理修改所述客户端的业务数据包的目的地址,将修改后的业务数据包通过链路层网卡直接发往所述粘合服务端进行处理;其中,所述链路层网卡维护缓存的数据包内存块,并将内存块索引通知应用层;应用层根据所述内存块索引对链路层的内存数据包进行收发控制。2.如权利要求1所述的方法,其特征在于,所述透明代理与所述客户端建立TCP链路的过程,包括:所述客户端发起syn建链请求,所述syn建链请求中携带随机产生的第一初始序列号,且源地址和源端口为所述客户端的IP和端口号,目的地址和目的端口为所述服务端的IP和端口号;所述透明代理获取所述客户端发起的所述syn建链请求,向所述客户端发起第二次握手syn_ack,所述syn_ack中携带随机产生的第二初始序列号,且源地址和源端口为所述目的服务端的IP和端口号,目的地址和目的端口为所述客户端的IP和端口号;所述客户端发起第三次握手ack,所述透明代理与所述客户端的TCP链路建立完成。3.如权利要求2所述的方法,其特征在于,所述方法还包括:所述透明代理与所述客户端建立TCP链路时,所述透明代理保存所述客户端发起的第三次握手ack包,以及所述ack包后续的一个或几个数据包。4.如权利要求3所述的方法,其特征在于,所述透明代理与所述粘合服务端建立TCP链路的过程,包括:所述透明代理选择所述粘合服务端,并向所述粘合服务端发起syn建链请求,所述syn建链请求中携带的目的地址和端口为所述粘合服务端的IP和端口号;所述粘合服务端回应syn_ack,所述syn_ack携带随机产生的序列号;所述透明代理对序列号进行同步后,将保存的所述客户端发起的第三次握手ack包和后续的一个或几个数据包发送给所述粘合服务端,所述透明代理与所述粘合服务端的TCP链路建立完成。5.如权利要求1、2、3或4之任一项所述的方法,其特征在于,所述方法还包括:所述透明代理将所述客户端的业务数据包中的初始目的地址与修改后的目的地址共同组成目的地址池,并将所述目的地址池与源地址、源端口及传输层协议类型与数据流id建立关联后进行...

【专利技术属性】
技术研发人员:董广跃
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1