实现CDN回源请求携带客户端IP的方法及系统与流程

文档序号:17986042发布日期:2019-06-22 00:25阅读:1869来源:国知局
实现CDN回源请求携带客户端IP的方法及系统与流程

本发明涉及计算机网络技术领域,尤其涉及一种实现cdn回源请求携带客户端ip的方法及系统。



背景技术:

cdn(contentdistributionnetwork)即是内容分发网络,是构筑在现有互联网上的一种先进的流量分配网络。该网络将源站服务器中的内容存储到分布于各地的cdn节点上,通过智能网络流量分配控制系统,将客户端的访问请求自动指向健康可用且距离本地最近的cdn节点专用服务器上,以提高客户端访问的响应速度和服务的可用性,改善互联网上的服务质量。但是,若客户端要访问的内容未存储在cdn节点上,那么cdn节点将从源站服务器拉取缺失的内容进行访问,以获得客户端所需的内容,此过程称为回源。

为了提高客户端的访问体验,网站通常会根据客户端ip分析客户端的客户行为,以自动推荐客户端感兴趣的内容,因此,cdn回源请求中是否携带的客户端ip是能否实现分析客户端的客户行为的关键。对于https网站而言,现有技术通常将客户端ip和请求内容加密,并通过部署在cdn节点上的私钥对其解密,当解密结果为需将请求内容回源至源站服务器时,此时,源站服务器才可获取客户端ip和请求内容,并将所需内容反馈给客户端。但是,由于部分网站出于安全考虑,通常不会将私匙部署在cdn节点上,这样将导致cdn节点无法解密客户端请求,进而源站服务器也就无法获得客户端的ip,同时也不能基于客户端ip对客户行为进行分析。



技术实现要素:

本发明的目的在于提供一种实现cdn回源请求携带客户端ip的方法及系统,能够在未部署私匙的cdn节点上,向https网站的源站服务器发送携带客户端ip的回源请求,使得https网站的源站服务器能够基于客户端ip对客户行为进行分析。

为了实现上述目的,本发明的一方面提供一种实现cdn回源请求携带客户端ip的方法,应用于cdn节点与https源站服务器的回源请求中,所述方法包括:

步骤s1:根据cdn节点接收客户端访问请求,判断所述cdn节点是否存储有与所述访问请求对应私钥;若“无”,则执行s3;

步骤s3:发起到源站服务器的tcp连接请求,插入客户端ip和端口到tcpsyn数据包中,并将更新后的所述tcpsyn数据包发送至源站服务器;

步骤s4:通过源站服务器提取所述tcpsyn数据包中的客户端ip和端口,返回synack数据包给cdn节点,接受所述tcp连接请求;

步骤s5:利用所述cdn节点将客户端访问请求内容通过所述tcp连接转发至源站服务器,使得源站服务器的业务逻辑反馈所述请求内容,并获得客户端ip和端口。

具体地,所述s3包括:

步骤s31:cdn节点向源站服务器发起握手请求,构造tcpsyn数据包;

步骤s32:调用第一内核函数将客户端ip和端口插入所述tcpsyn数据包的头部选项(option),以更新所述tcpsyn数据包;

步骤s33:将更新后的所述tcpsyn数据包发送至源站服务器。

优选地,所述s4具体包括:

步骤s41:调用第二内核函数对所述头部选项(option)验证;

步骤s42:验证通过后提取所述头部选项(option)中的客户端ip和端口,存储至sock结构体中;

步骤s43:通过所述sock结构体管理源站服务器与所述cdn节点的tcp连接关系。

较佳地,所述步骤s41中调用第二内核函数对头部选项(option)验证的方法包括:

同时判断所述头部选项(option)的kind号是否为tcpopt_cip,所述头部选项(option)的长度是否为tcpolen_cip,当两者的判断结果为“是”时,则上述验证结果通过。

较佳地,所述s5具体包括:

步骤s51:利用accept函数调用源站服务器中的inet_getname_cip函数;

步骤s52:inet_getname_cip函数调用内核原生函数inet_getname,利用所述原生函数inet_getname从所述sock结构体中提取客户端ip和端口,并将客户端ip和端口返回至accept函数。

优选地,所述第一内核函数为tcp_options_write函数,所述第二内核函数为tcp_v4_syn_recv_sock_cip函数。

优选地,所述tcp_v4_syn_recv_sock_cip函数为源站服务器中内核syn_recv_sock上挂载的钩子函数。

可选地,在步骤s1与步骤s3之间,还包括:步骤s2:使用所述私钥对所述访问请求解密,并将客户端ip和端口插入到解密后的请求内容中,然后回源至源站服务器,使得源站服务器的业务逻辑能够获得客户端ip和端口,并反馈对应访问请求内容。

与现有技术相比,本发明提供的实现cdn回源请求携带客户端ip的方法具有以下有益效果:

本发明提供的实现cdn回源请求携带客户端ip的方法中,利用部署在各地的cdn节点实时接收客户端的访问请求,并依据cdn节点上是否存储有与访问请求相关私钥,对应选择不同的回源模式,具体的,当cdn节点上存储有相关私钥则选择私钥回源模式,当cdn节点上未存储有相关私钥则选择插入客户端ip的回源模式;其中,私钥回源模式是指使用相关私钥对访问请求解密,并将解密得到的客户端ip和请求内容回源至源站服务器,通过此种方法实现在反馈访问请求内容的同时获得客户端ip,但是这种回源模式只适用于安全性要求较低的https网站,即,只适用于将相关私钥部署在cdn节点上的https网站。若对于安全性较高的https网站,即cdn节点上未部署相关私钥的网站,则可采用插入客户端ip的回源模式,通过插入客户端ip和端口构造tcpsyn数据包,并将更新后tcpsyn数据包发送至源站服务器,利用源站服务器提取tcpsyn数据包中的客户端ip和端口,并接受tcp连接请求,建立tcp连接关系,使得源站服务器的业务逻辑不仅能够反馈相应请求,同时能够获得客户端ip和端口,这样可实现在未部署相关私钥的cdn节点上也能获得客户端真实ip,换句话说,此种回源模式不仅保证了网站的安全性,同时还能够基于客户端ip对客户行为进行分析。

可见,使用本发明提供的实现cdn回源请求携带客户端ip的方法能够在未部署私匙的cdn节点上,向https网站的源站服务器发送携带客户端ip的回源请求,以使https网站的源站服务器能够基于客户端ip对客户行为进行分析。

本发明的另一方面提供一种实现cdn回源请求携带客户端ip的系统,应用于上述技术方案所述的实现cdn回源请求携带客户端ip的方法中,所述系统包括回源请求判断单元、第一回源处理单元、数据包更新单元、信息提取单元和第二回源处理单元;

所述回源请求判断单元用于根据cdn节点接收的客户端访问请求,判断所述cdn节点是否存储有与所述访问请求对应私钥;

所述第一回源处理单元用于在判断结果为是时使用所述私钥对访问请求解密,并将客户端ip和端口插入到解密得到的请求内容中回源至源站服务器,使得源站服务器的业务逻辑做出响应;

所述数据包更新单元用于在判断结果为否时,插入客户端ip和端口到tcpsyn数据包中,并将更新后的所述tcpsyn数据包发送至源站服务器;

所述信息提取单元用于提取并存储所述tcpsyn数据包中的客户端ip和端口;

所述第二回源处理单元用于接收客户端ip、端口以及请求内容,并反馈对应访问请求内容。

优选地,所述数据包更新单元包括:

握手请求模块,用于向源站服务器发送握手请求;

数据包更新模块,用于调用第一内核函数将客户端ip和端口插入tcpsyn数据包的头部选项(option),并将更新后的所述tcpsyn数据包至源站服务器。

较佳地,所述信息提取单元包括:

信息验证模块,用于调用第二内核函数对所述头部选项(option)验证;

信息存储模块,用于在验证通过后提取所述头部选项(option)中的客户端ip和端口,并将客户端ip和端口存储至sock结构体。

与现有技术相比,本发明提供的实现cdn回源请求携带客户端ip的系统的有益效果与上述技术方案提供的实现cdn回源请求携带客户端ip的方法的有益效果相同,在此不做赘述。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为本发明实施例中实现cdn回源请求携带客户端ip的方法的流程示意图;

图2为本发明实施例中插入客户端ip和端口构造tcpsyn数据包的方法示意图;

图3为本发明实施例中提取tcpsyn数据包中的客户端ip、端口以及请求内容,并与cdn节点建立tcp连接关系的方法示意图;

图4为本发明实施例中接收客户端ip、端口以及请求内容,并反馈访问请求内容的方法示意图;

图5为本发明实施例中实现cdn回源请求携带客户端ip的方法的时序图;

图6为本发明实施例中实现cdn回源请求携带客户端ip系统的结构示意图。

附图标记:

1-回源请求判断单元,2-第一回源处理单元;

3-数据包更新单元,4-信息提取单元;

5-第一回源处理单元,31-握手请求模块;

32-数据包更新模块,41-信息验证模块;

42-信息存储模块。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其它实施例,均属于本发明保护的范围。

实施例一

图1为本发明实施例一中实现cdn回源请求携带客户端ip的方法的流程示意图。图5为本发明实施例一中实现cdn回源请求携带客户端ip的方法的时序图。请参阅图1、图5,本实施例提供一种实现cdn回源请求携带客户端ip的方法,包括:

步骤s1:根据cdn节点接收的客户端访问请求,判断cdn节点是否存储有与访问请求对应私钥;若“无”,则执行s3;

步骤s3:发起到源站服务器的tcp连接请求,插入客户端ip和端口到tcpsyn数据包中,并将更新后的tcpsyn数据包发送至源站服务器;

步骤s4:通过源站服务器提取tcpsyn数据包中的客户端ip和端口,返回synack数据包给cdn节点,接受tcp连接请求;这是tcp三次握手的过程:synack到达cdn节点后,cdn节点会回复一个ack;这个时候,双方都认为连接已经建立。

步骤s5:利用cdn节点将客户端访问请求内容通过tcp连接转发至源站服务器,使得源站服务器的业务逻辑反馈请求内容,并获得客户端ip和端口。

本实施例提供的实现cdn回源请求携带客户端ip的方法中,利用部署在各地的cdn节点实时接收客户端的访问请求,并依据cdn节点上是否存储有与访问请求相关私钥,对应选择不同的回源模式,具体的,当cdn节点上存储有相关私钥则选择私钥回源模式,当cdn节点上未存储有相关私钥则选择插入客户端ip的回源模式;其中,私钥回源模式是指使用相关私钥对访问请求解密,并将解密得到的客户端ip和请求内容回源至源站服务器,通过此种方法实现在反馈访问请求内容的同时获得客户端ip,但是这种回源模式只适用于安全性要求较低的https网站,即,只适用于愿意将相关私钥部署在cdn节点上的https网站。若对于安全性较高的https网站,即cdn节点上未部署相关私钥的网站,则可采用插入客户端ip的回源模式,可通过插入客户端ip和端口构造tcpsyn数据包,并将更新后tcpsyn数据包发送至源站服务器,利用源站服务器提取tcpsyn数据包中的客户端ip和端口,并接受tcp连接请求,建立tcp连接关系,使得源站服务器的业务逻辑不仅能够反馈相应请求,同时能够获得客户端ip和端口,这样可实现在未部署相关私钥的cdn节点上也能获得客户端真实ip,换句话说,此种回源模式不仅保证了网站的安全性,同时还能够基于客户端ip对客户行为进行分析。

可见,使用本实施例提供的实现cdn回源请求携带客户端ip的方法,能够提供多种回源模式可供选择,即,无论cdn节点是否存储有相关私钥,均可采用对应回源模式获得客户端真实ip。

需要说明的是,上述实施例中的私钥回源模式为现有技术常用的回源方法,此处不再对私钥回源模式的进行赘述。

具体的,请参阅图2,本实施例中的s3具体包括:

步骤s31:cdn节点向源站服务器发起握手请求,构造tcpsyn数据包;

步骤s32:调用第一内核函数将客户端ip和端口插入tcpsyn数据包的头部选项(option),以更新tcpsyn数据包;

步骤s33:将更新后的tcpsyn数据包发送至源站服务器。

进一步的,请参阅图3,本实施例中的s4具体包括:

步骤s41:调用第二内核函数对头部选项(option)验证;

步骤s42:验证通过后提取头部选项(option)中的客户端ip和端口,存储至sock结构体中;

步骤s43:通过sock结构体管理源站服务器与cdn节点的tcp连接关系。

具体地,上述实施例中的步骤s41中调用第二内核函数对头部选项(option)验证的方法包括:

同时判断头部选项(option)的kind号是否为tcpopt_cip,头部选项(option)的长度是否为tcpolen_cip,当两者的判断结果为“是”时,则上述验证结果通过。即,头部选项(option)的kind号是tcpopt_cip并且头部选项(option)的长度是tcpolen_cip时,上述验证结果获得通过。

较佳地,请参阅图4,本实施例中的s5具体包括:

步骤s51:利用accept函数调用源站服务器中的inet_getname_cip函数;

步骤s52:inet_getname_cip函数调用内核原生函数inet_getname,利用所述原生函数inet_getname从所述sock结构体中提取客户端ip和端口,并将客户端ip和端口返回至accept函数。

需要说明的是,第一内核函数为tcp_options_write函数,第二内核函数为tcp_v4_syn_recv_sock_cip函数。tcp_v4_syn_recv_sock_cip函数为源站服务器中内核syn_recv_sock上挂载的钩子函数。

实施例二

请参阅图1、图5,在步骤s1与步骤s3之间,还包括:步骤s2:使用所述私钥对所述访问请求解密,并将客户端ip和端口插入到解密后的请求内容中,然后回源至源站服务器,使得源站服务器的业务逻辑能够获得客户端ip和端口,并反馈对应访问请求内容。

本实施例提供的实现cdn回源请求携带客户端ip的方法中,利用部署在各地的cdn节点实时接收客户端的访问请求,并依据cdn节点上是否存储有与访问请求相关私钥,对应选择不同的回源模式。

实施例三

请参阅图1和图5,本实施例提供一种实现cdn回源请求携带客户端ip的方法,包括:

cdn节点接收客户端访问请求,判断该cdn节点的本地是否存储有与所述访问请求对应私钥;

cdn节点发起到源站服务器的tcp连接请求,插入客户端ip和端口到tcpsyn数据包中,并将更新后的所述tcpsyn数据包发送至源站服务器;

cdn节点接收源站服务器在提取所述tcpsyn数据包中客户端ip和端口后返回的synack数据包,并与源站服务器建立所述tcp连接;

cdn节点将客户端访问请求内容通过所述tcp连接转发至源站服务器,使得源站服务器的业务逻辑反馈所述请求内容,并获得客户端ip和端口。

其中,上述方法中cdn节点发起到源站服务器的tcp连接请求,插入客户端ip和端口到tcpsyn数据包中,并将更新后的所述tcpsyn数据包发送至源站服务器具体包括:

cdn节点向源站服务器发起握手请求,构造tcpsyn数据包;

调用第一内核函数将客户端ip和端口插入所述tcpsyn数据包的头部选项(option),以更新所述tcpsyn数据包;

将更新后的所述tcpsyn数据包发送至源站服务器。

优选地,上述方法中cdn节点接收源站服务器在提取所述tcpsyn数据包中客户端ip和端口后返回的synack数据包,并与源站服务器建立所述tcp连接具体包括:

调用第二内核函数对所述头部选项(option)验证;

验证通过后提取所述头部选项(option)中的客户端ip和端口,存储至sock结构体中;

通过所述sock结构体管理源站服务器与所述cdn节点的tcp连接关系。

较佳地,调用第二内核函数对头部选项(option)验证的方法包括:

同时判断所述头部选项(option)的kind号是否为tcpopt_cip,所述头部选项(option)的长度是否为tcpolen_cip,当两者的判断结果为“是”时,则上述验证结果通过。

较佳地,上述方法中cdn节点将客户端访问请求内容通过所述tcp连接转发至源站服务器,使得源站服务器的业务逻辑反馈所述请求内容,并获得客户端ip和端口具体包括:

利用accept函数调用源站服务器中的inet_getname_cip函数;

inet_getname_cip函数调用内核原生函数inet_getname,利用所述原生函数inet_getname从所述sock结构体中提取客户端ip和端口,并将客户端ip和端口返回至accept函数。

优选地,本实施例中的第一内核函数为tcp_options_write函数,第二内核函数为tcp_v4_syn_recv_sock_cip函数。

较佳地,本实施例中的tcp_v4_syn_recv_sock_cip函数为源站服务器中内核syn_recv_sock上挂载的钩子函数。

本实施例提供的实现cdn回源请求携带客户端ip的方法中,利用部署在各地的cdn节点实时接收客户端的访问请求,并依据cdn节点上是否存储有与访问请求相关私钥,对应选择不同的回源模式。

实施例四

请参阅图1、图5,本实施例提供一种实现cdn回源请求携带客户端ip的方法,包括:

cdn节点接收客户端访问请求,判断该cdn节点的本地是否存储有与所述访问请求对应私钥;

cdn节点发起到源站服务器的tcp连接请求,插入客户端ip和端口到tcpsyn数据包中;

cdn节点将更新后的所述tcpsyn数据包发送至源站服务器,并接收源站服务器返回的synack数据包;

cdn节点与源站服务器建立所述tcp连接,并将客户端访问请求内容通过所述tcp连接转发至源站服务器。

具体地,上述方法中cdn节点发起到源站服务器的tcp连接请求,插入客户端ip和端口到tcpsyn数据包具体包括:

cdn节点向源站服务器发起握手请求,构造tcpsyn数据包;

调用第一内核函数将客户端ip和端口插入所述tcpsyn数据包的头部选项(option),以更新所述tcpsyn数据包;

将更新后的所述tcpsyn数据包发送至源站服务器。

优选地,上述方法中cdn节点与源站服务器建立所述tcp连接,并将客户端访问请求内容通过所述tcp连接转发至源站服务器,具体包括:

调用第二内核函数对所述头部选项(option)验证;

验证通过后提取所述头部选项(option)中的客户端ip和端口,存储至sock结构体中;

通过所述sock结构体管理源站服务器与所述cdn节点的tcp连接关系。

进一步地,所述第二内核函数对头部选项(option)验证的方法包括:

同时判断所述头部选项(option)的kind号是否为tcpopt_cip,所述头部选项(option)的长度是否为tcpolen_cip,当两者的判断结果为“是”时,则上述验证结果通过。

优选地,所述第一内核函数为tcp_options_write函数,所述第二内核函数为tcp_v4_syn_recv_sock_cip函数。

优选地,所述tcp_v4_syn_recv_sock_cip函数为源站服务器中内核

syn_recv_sock上挂载的钩子函数。

本实施例提供的实现cdn回源请求携带客户端ip的方法中,利用部署在各地的cdn节点实时接收客户端的访问请求,并依据cdn节点上是否存储有与访问请求相关私钥,对应选择不同的回源模式。

实施例五

请参阅1和图6,本发明实施例提供了一种实现cdn回源请求携带客户端ip的系统,包括回源请求判断单元1、第一回源处理单元2、数据包更新单元3、信息提取单元4和第二回源处理单元5;

所述回源请求判断单元1用于根据cdn节点接收的客户端访问请求,判断所述cdn节点是否存储有与所述访问请求对应私钥;

所述第一回源处理单元2用于在判断结果为是时使用所述私钥对访问请求解密,并将客户端ip和端口插入到解密得到的请求内容中回源至源站服务器,使得源站服务器的业务逻辑做出响应;

所述数据包更新单元3用于在判断结果为否时,插入客户端ip和端口到tcpsyn数据包中,并将更新后的所述tcpsyn数据包发送至源站服务器;

所述信息提取单元4用于提取并存储所述tcpsyn数据包中的客户端ip和端口;

所述第二回源处理单元5用于接收客户端ip、端口以及请求内容,并反馈对应访问请求内容。

具体的,请接着参阅图6,本实施中的数据包更新单元3包括:

握手请求模块31,用于向源站服务器发送握手请求;

数据包更新模块32,用于调用第一内核函数将客户端ip和端口插入tcpsyn数据包的头部选项(option),并将更新后的所述tcpsyn数据包至源站服务器。

进一步的,请继续参阅图6,所述信息提取单元4包括:

信息验证模块41,用于调用第二内核函数对所述头部选项(option)验证;

信息存储模块42,用于在验证通过后提取所述头部选项(option)中的客户端ip和端口,并将客户端ip和端口存储至sock结构体。

与现有技术相比,本发明实施例提供的实现cdn回源请求携带客户端ip的系统的有益效果与上述实施例一提供的实现cdn回源请求携带客户端ip的方法的有益效果相同,在此不做赘述。

本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,的程序可以存储于计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而所述的存储介质可以是:rom/ram、磁碟、光盘、存储卡等。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1