CN103297407A - 传递客户端IPv6地址及端口至后端服务器的方法及装置 - Google Patents

传递客户端IPv6地址及端口至后端服务器的方法及装置 Download PDF

Info

Publication number
CN103297407A
CN103297407A CN2012100544317A CN201210054431A CN103297407A CN 103297407 A CN103297407 A CN 103297407A CN 2012100544317 A CN2012100544317 A CN 2012100544317A CN 201210054431 A CN201210054431 A CN 201210054431A CN 103297407 A CN103297407 A CN 103297407A
Authority
CN
China
Prior art keywords
port
address
client
initial
ttm
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012100544317A
Other languages
English (en)
Other versions
CN103297407B (zh
Inventor
罗枫
吴教仁
刘涛
刘宁
张�诚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201210054431.7A priority Critical patent/CN103297407B/zh
Publication of CN103297407A publication Critical patent/CN103297407A/zh
Application granted granted Critical
Publication of CN103297407B publication Critical patent/CN103297407B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提出一种从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法和装置。方法包括:客户端向IPv6负载均衡设备发送数据包;IPv6负载均衡设备对客户端的原始IPv6地址及端口进行地址转换,将客户端的原始IPv6地址及端口存储在TCP选项字段中并发送带有TCP选项字段的数据包;后端服务器的Linux内核层截获syn_recv_sock钩子,挂载tcp_v6_syn_recv_sock_ttm钩子函数,以得到TCP选项字段中的客户端的原始IPv6地址及端口并存储;后端服务器的Linux内核层截获getname钩子,挂载inet6_getname_ttm钩子函数,以提取客户端的原始IPv6地址及端口供服务器的Linux应用层使用。本发明通过在TCP选项字段中增加客户端的原始IPv6地址和端口信息,使得后端服务器能够获取客户端的原始IP和端口信息,从而能够对客户进行地址定位。

Description

传递客户端IPv6地址及端口至后端服务器的方法及装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法。
背景技术
现有的负载均衡设备中,如果采用了NAT(Network Address Translation,网络地址转换)模式,那么后端服务器只能看到负载均衡设备的后端IP,而无法看到客户端的真实源IP,因此无法对客户端进行地址定位,从而无法正常开展基于地理信息的相关业务。
发明内容
本发明旨在至少解决上述技术问题之一。
为此,本发明的一个目的在于提出一种可以将客户端的原始IPv6地址和端口传递到后端服务器的方法。
本发明的另一目的在于提出一种从IPv6负载均衡设备传递客户端的原始IPv6地址和端口至后端服务器的系统。
为了实现上述目的,根据本发明第一方面的实施例的从IPv6负载均衡设备获取客户端的原始IPv6地址和端口的方法包括以下步骤:(A)所述客户端向所述IPv6负载均衡设备发送数据包;(B)所述IPv6负载均衡设备对所述客户端的原始IPv6地址及端口进行地址转换,将所述客户端的原始IPv6地址及端口存储在TCP选项字段中并发送带有所述TCP选项字段的数据包;(C)所述后端服务器的Linux内核层截获syn_recv_sock钩子,挂载tcp_v6_syn_recv_sock_ttm钩子函数,以得到所述TCP选项字段中的所述客户端的原始IPv6地址及端口并存储;(D)所述后端服务器的Linux内核层截获getname钩子,挂载inet6_getname_ttm钩子函数,以提取所述客户端的原始IPv6地址及端口供所述后端服务器的Linux应用层使用。
根据本发明实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法,通过在TCP选项字段中增加客户端的原始IPv6地址和端口信息,使得后端服务器能够提取TCP选项字段中的信息获取客户端的原始IP和端口信息,从而能够对客户进行地址定位并开展基于地理信息的相关服务。而且本发明的方法不需要对Linux内核做任何的修改,具有较强的灵活性,可移植性高。
为了实现上述目的,根据本发明第二方面的实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置包括第一截获模块和第二截获模块,所述客户端向所述IPv6负载均衡设备发送数据包,所述IPv6负载均衡设备对所述客户端的原始IPv6地址及端口进行地址转换,将所述客户端的原始IPv6地址及端口存储在TCP选项字段中并发送带有所述TCP选项字段的数据包,所述第一截获模块用于截获syn_recv_sock钩子,挂载tcp_v6_syn_recv_sock_ttm钩子函数,以得到所述TCP选项字段中的所述客户端的原始IPv6地址及端口并保存,所述第二截获模块用于截获getname钩子,挂载inet6_getname_ttm钩子函数,以提取所述客户端的原始IPv6地址及端口供所述后端服务器的Linux应用层使用。
根据本发明实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置,通过在TCP选项字段中增加客户端的原始IPv6地址和端口信息,并通过截获模块截获TCP选项字段中的信息获取客户端的原始IP和端口信息,从而能够对客户进行地址定位并开展基于地理信息的相关服务。而且实现过程中不需要对Linux内核做任何的修改,具有较强的灵活性,可移植性高。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,
图1是根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法的流程图;
图2是根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法的流程图;
图3是根据本发明一个实施例的分析TCP选项并提取客户端的原始IPv6地址及端口的方法的流程图;
图4是根据本发明一个实施例的inet6_getname_ttm钩子函数的工作流程图;
图5是根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法的流程图;
图6是根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置的结构框图;
图7是根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置的结构框图;以及
图8是根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置的结构框图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
下面参考附图描述根据本发明实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法及装置。
图1是根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法的流程图。
如图1所示,从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法包括下述步骤。后端服务器是向客户端提供服务的真实服务器。
步骤S101,客户端向IPv6负载均衡设备发送数据包。
步骤S102,IPv6负载均衡设备对客户端的原始IPv6地址及端口进行地址转换,将客户端的原始IPv6地址及端口存储在TCP选项字段中并发送带有TCP选项字段的数据包。
步骤S103,后端服务器的Linux内核层截获syn_recv_sock钩子,挂载tcp_v6_syn_recv_sock_ttm钩子函数,以得到TCP选项字段中的客户端的原始IPv6地址及端口并存储。
步骤S104,后端服务器的Linux内核层截获getname钩子,挂载inet6_getname_ttm钩子函数,以提取客户端的原始IPv6地址及端口供后端服务器的Linux应用层使用。
根据本发明实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法,通过在TCP选项字段中增加客户端的原始IPv6地址和端口信息,使得后端服务器能够提取TCP选项字段中的信息获取客户端的原始IP和端口信息,从而能够对客户进行地址定位并开展基于地理信息的相关服务。
图2是根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法的流程图。
如图2所示,从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法包括下述步骤。
步骤S201,客户端向IPv6负载均衡设备发送数据包。
步骤S202,IPv6负载均衡设备对客户端的原始IPv6地址及端口进行地址转换,将客户端的原始IPv6地址及端口存储在TCP选项字段中并发送带有该TCP选项字段的数据包。
步骤S203,将TCP选项字段的kind号写入作为TCPOPT_TTM并将TCP选项字段的总长度写入作为TCPOLEN_TTM。例如,kind号为253,总长度为20,即1字节的kind类型+1字节的选项长度+2字节的端口+16字节的IPv6地址。
步骤S204,服务器的Linux内核层截获syn_recv_sock钩子,挂载tcp_v6_syn_recv_sock_ttm钩子函数,以得到TCP选项字段中的客户端的原始IPv6地址及端口并存储。
Linux内核在监听套接字收到三次握手的ACK包之后,会从SYN_REVC状态进入到TCP_ESTABLISHED状态,在这个过程中服务器的Linux内核层会调用tcp_v6_syn_recv_sock函数。客户端的原始IPv6地址和端口号作为TCP选项在负载均衡设备和后端服务器的三次握手之间进行传递。本发明通过截获tcp_v6_syn_recv_sock钩子函数对TCP选项字段中的客户端的原始IPv6地址及端口进行提取并存储到分配的高速缓存中,然后将对应的sock结构体中的sk_user_data指针指向这片缓存,以备inet6_getname使用。
具体地,图3为本发明一个实施例的分析TCP选项并提取客户端的IPv6地址和端口的方法的流程图。如图3所示,该方法包括以下步骤:
步骤S311,后端服务器的Linux内核层调用Linux内核原生的tcp_v6_syn_recv_sock函数。
步骤S312,判断TCP选项字段的kind号是否为TCPOPT_TTM并判断TCP选项字段的总长度是否为TCPOLEN_TTM。
步骤S313,如果TCP选项字段的kind号是TCPOPT_TTM且TCP选项字段的总长度是TCPOLEN_TTM,则获取存储在TCP选项字段中的客户端的原始IPv6地址及端口。
步骤S314,为客户端的原始IPv6地址及端口分配高速缓存。
步骤S315,将sock结构体中的sk_user_data指针指向分配的高速缓存。
步骤S316,将客户端的原始IPv6地址及端口保存到高速缓存中。
应理解,在本发明的另一个实施例中,该分析TCP选项并提取客户端的IPv6地址和端口的方法还可以包括步骤S317:如果不存在kind号为TCPOPT_TTM且长度为TCPOLEN的TCP选项字段,则返回。
类似地,在本发明的又一个实施例中,该分析TCP选项并提取客户端的IPv6地址和端口的方法还可以包括步骤S318:如果没有成功分配高速缓存,则返回。
由此,成功提取到TCP选项字段中的客户端的原始IPv6地址及端口并存储到高速缓存中,以备inet6_getname使用。
步骤S205,后端服务器的Linux内核层截获getname钩子,挂载inet6_getname_ttm钩子函数,以提取客户端的原始IPv6地址及端口供后端服务器的Linux应用层使用。
用户在使用套接字中的accept方法时,会调用到inet6_getname将sock结构体中存储的源IPv6地址和端口号返回。由于在这个阶段客户端的真实IPv6地址和端口号已经提取出来存储在sock结构中,因此只需要提取出这个数据返回即可。在本发明中对inet6_getname钩子函数进行截获完成客户端的原始IPv6地址和端口到用户的传递。具体的工作流程如图4所示。
图4为本发明一个实施例的inet6_getname_ttm钩子函数的工作流程图。如图4所示,inet6_getname_ttm钩子函数的工作流程包括以下步骤:
步骤S411,调用linux内核原生的inet6_getname函数。
步骤S412,判断sk_user_data指针指向的高速缓存是否为空。
步骤S413,如果sk_user_data指针指向的高速缓存不为空,则进一步判断高速缓存中是否存储有客户端的原始IPv6地址及端口。
步骤S414,如果高速缓存中存储有客户端的原始IPv6地址及端口,则将sk_user_data指针指向的高速缓存中存储的客户端的原始IPv6地址及端口赋值到uaddr的sin6_addr和sin6_port。
应理解,在本发明的另一个实施例中,该方法还可以包括步骤S415:如果判断sk_user_data指针指向的高速缓存为空,则返回。
类似地,在本发明的又一个实施例中,该方法还可以包括步骤S416:如果判断高速缓存中没有存储客户端的原始IPv6地址及端口,则返回。
图5是根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法的流程图。
如图5所示,从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法包括下述步骤。
步骤S501,客户端向IPv6负载均衡设备发送数据包。
步骤S502,IPv6负载均衡设备对客户端的原始IPv6地址及端口进行地址转换,将客户端的原始IPv6地址及端口存储在TCP选项字段中并发送带有该TCP选项字段的数据包。
步骤S503,将TCP选项字段的kind号写入作为TCPOPT_TTM并将TCP选项字段的总长度写入作为TCPOLEN_TTM。
步骤S504,后端服务器的Linux内核层截获syn_recv_sock钩子,挂载tcp_v6_syn_recv_sock_ttm钩子函数,以得到TCP选项字段中的客户端的原始IPv6地址及端口并存储。
步骤S505,后端服务器的Linux内核层截获getname钩子,挂载inet6_getname_ttm钩子函数,以提取客户端的原始IPv6地址及端口供后端服务器的Linux应用层使用。
上述步骤S501至步骤S505的具体实现过程可与上述步骤S201至步骤S205的实现相同,此处不再详细描述。
步骤S506,截获_sk_stream_mem_reclaim函数,使用跳转指令码替换_sk_stream_mem_reclaim函数开始部分的指令代码,进而调用__sk_stream_mem_reclaim_ttm函数,并完成sock结构体以及高速缓存的释放。
在本发明的一个实施例中,客户端的原始IPv6地址和端口信息的存储采用的是高速缓存,在每一个TCP连接中都要分配一个高速缓存进行存储,在TCP连接关闭或者连接超时等情况下,该高速缓存必须释放。本发明的一个实施例采用的方法是在释放skb的时候,同时释放高速缓存。释放skb的函数为_sk_stream_mem_reclaim函数,这是一个普通的内核函数。本发明的一个实施例中采用了二进制hack的方式对这个函数进行了截获,具体为:截获_sk_stream_mem_reclaim函数,使用跳转指令码替换_sk_stream_mem_reclaim函数开始部分的指令代码,进而调用__sk_stream_mem_reclaim_ttm函数,完成sock结构体以及高速缓存的释放。
根据本发明实施例的从IPV6负载均衡设备中传递客户端的原始IPv6地址及端口至后端服务器的方法,通过在TCP选项字段中增加客户端的原始IPv6地址和端口信息,使得后端服务器能够提取TCP选项字段中的信息获取客户端的原始IP和端口信息,从而能够对客户进行地址定位并开展基于地理信息的相关服务。而且本发明的方法不需要对Linux内核做任何的修改,具有较强的灵活性,可移植性高。
本发明还提出一种从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置。
图6是根据本发明一个实施例的从IPv6负载均衡传递获取客户端的原始IPv6地址及端口至后端服务器的装置的结构框图。如图6所示,从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置30包括第一截获模块310和第二截获模块320。
客户端10向IPv6负载均衡设备20发送数据包。IPv6负载均衡设备20对客户端10的原始IPv6地址及端口进行地址转换,将客户端10的原始IPv6地址及端口存储在TCP选项字段中并发送带有该TCP选项字段的数据包。第一截获模块310截获syn_recv_sock钩子,挂载tcp_v6_syn_recv_sock_ttm钩子函数,以得到TCP选项字段中的客户端10的原始IPv6地址及端口并存储。第二截获模块320截获getname钩子,挂载inet6_getname_ttm钩子函数,以提取客户端10的原始IPv6地址及端口供后端服务器40的Linux应用层使用。
根据本发明实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置,通过在TCP选项字段中增加客户端的原始IPv6地址和端口信息,并通过截获模块截获TCP选项字段中的信息获取客户端的原始IP和端口信息,从而能够对客户进行地址定位并开展基于地理信息的相关服务。
图7为根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置的结构框图。如图7所示,在图6所示的实施例的基础上,该装置还包括写入模块330。写入模块330用于将TCP选项字段的kind号写入作为TCPOPT_TTM并将所述TCP选项字段的总长度写入作为TCPOLEN_TTM。例如,kind号为253,总长度为20,即1字节的kind号+1字节的选项长度+2字节的端口+16字节的IPv6地址。
由此,第一截获模块310首先调用linux内核原生的tcp_v6_syn_recv_sock函数,然后判断TCP选项字段的kind号是否为TCPOPT_TTM并判断TCP选项字段的总长度是否为TCPOLEN_TTM。如果TCP选项字段的kind号是TCPOPT_TTM且TCP选项字段的总长度是TCPOLEN_TTM,则获取存储在TCP选项字段中的客户端的原始IPv6地址及端口。接着,为客户端的原始IPv6地址及端口分配高速缓存,并将sock结构体的sk_user_data指针指向该高速缓存。然后,将客户端的原始IPv6地址及端口保存到高速缓存中,以备inet6_getname使用。
此外,如果不存在kind号为TCPOPT_TTM且长度为TCPOLEN_TTM的TCP选项字段,或者如果没有成功分配缓存,则返回。
第二截获模块320首先调用linux内核原生的inet6_getname函数,判断sk_user_data指针指向的高速缓存是否为空。如果sk_user_data指针指向的高速缓存不为空,则进一步判断高速缓存中是否存储有客户端的原始IPv6地址及端口。如果高速缓存中存储有客户端的原始IPv6地址及端口,则将sk_user_data指针指向的高速缓存中存储的客户端的原始IPv6地址及端口赋值到uaddr的sin6_addr和sin6_port。
此外,如果判断sk_user_data指针指向的高速缓存为空,或者如果判断高速缓存中没有存储客户端的原始IPv6地址及端口,则返回。
图8为根据本发明一个实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置的结构框图。如图8所示,在图7所示的实施例的基础上,该装置还包括第三截获模块340。第三截获模块340用于截获_sk_stream_mem_reclaim函数,使用跳转指令码替换_sk_stream_mem_reclaim函数开始部分的指令代码,进而调用__sk_stream_mem_reclaim_ttm函数,并完成sock结构体以及高速缓存的释放。
根据本发明实施例的从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置,通过在TCP选项字段中增加客户端的原始IPv6地址和端口信息,并通过截获模块截获TCP选项字段中的信息获取客户端的原始IP和端口信息,从而能够对客户进行地址定位并开展基于地理信息的相关服务。而且实现过程中不需要对Linux内核做任何的修改,具有较强的灵活性,可移植性高。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同限定。

Claims (18)

1.一种从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的方法,其特征在于,包括以下步骤:
(A)所述客户端向所述IPv6负载均衡设备发送数据包;
(B)所述IPv6负载均衡设备对所述客户端的原始IPv6地址及端口进行地址转换,将所述客户端的原始IPv6地址及端口存储在TCP选项字段中并发送带有所述TCP选项字段的数据包;
(C)所述后端服务器的Linux内核层截获syn_recv_sock钩子,挂载tcp_v6_syn_recv_sock_ttm钩子函数,以得到所述TCP选项字段中的所述客户端的原始IPv6地址及端口并存储;
(D)所述后端服务器的Linux内核层截获getname钩子,挂载inet6_getname_ttm钩子函数,以提取所述客户端的原始IPv6地址及端口供所述后端服务器的Linux应用层使用。
2.根据权利要求1所述的方法,其特征在于,进一步包括步骤:
(E)截获_sk_stream_mem_reclaim函数,使用跳转指令码替换所述_sk_stream_mem_reclaim函数开始部分的指令代码,进而调用__sk_stream_mem_reclaim_ttm函数,并完成所述sock结构体以及所述高速缓存的释放。
3.根据权利要求1或2所述的方法,其特征在于,在所述步骤(B)之后进一步包括:
步骤(F),将所述TCP选项字段的kind号写入作为TCPOPT_TTM并将所述TCP选项字段的总长度写入作为TCPOLEN_TTM。
4.根据权利要求3所述的方法,其特征在于,所述步骤(C)包括:
所述服务器的Linux内核层调用linux内核原生的tcp_v6_syn_recv_sock函数;
判断所述TCP选项字段的kind号是否为TCPOPT_TTM并判断所述TCP选项字段的总长度是否为TCPOLEN_TTM;
如果是,则获取存储在所述TCP选项字段中的所述客户端的原始IPv6地址及端口;
为所述客户端的原始IPv6地址及端口分配高速缓存;
将sock结构体的sk_user_data指针指向所述高速缓存;以及
将所述客户端的原始IPv6地址及端口保存到所述高速缓存中。
5.根据权利要求4所述的方法,其特征在于,进一步包括:
如果不存在kind号为TCPOPT_TTM且长度为TCPOLEN_TTM的所述TCP选项字段,则返回。
6.根据权利要求4所述的方法,其特征在于,进一步包括:
如果没有成功分配所述高速缓存,则返回。
7.根据权利要求1或2所述的方法,其特征在于,步骤(D)包括:
调用linux内核原生的inet6_getname函数;
判断所述sk_user_data指针指向的所述高速缓存是否为空;
如果否,则判断所述高速缓存中是否存储有所述客户端的原始IPv6地址及端口;以及
如果所述高速缓存中存储有所述客户端的原始IPv6地址及端口,则将所述sk_user_data指针指向的所述高速缓存中存储的所述客户端的原始IPv6地址及端口赋值到uaddr的sin6_addr和sin6_port。
8.根据权利要求7所述的方法,其特征在于,进一步包括步骤:
如果判断所述sk_user_data指针指向的所述高速缓存为空,则返回。
9.根据权利要求7所述的方法,其特征在于,进一步包括步骤:
如果判断所述高速缓存中没有存储所述客户端的原始IPv6地址及端口,则返回。
10.一种从IPv6负载均衡设备传递客户端的原始IPv6地址及端口至后端服务器的装置,其特征在于,所述客户端向所述IPv6负载均衡设备发送数据包,所述IPv6负载均衡设备对所述客户端的原始IPv6地址及端口进行地址转换,将所述客户端的原始IPv6地址及端口存储在TCP选项字段中并发送带有所述TCP选项字段的数据包,所述装置包括:
第一截获模块,所述第一截获模块用于截获syn_recv_sock钩子,挂载tcp_v6_syn_recv_sock_ttm钩子函数,以得到所述TCP选项字段中的所述客户端的原始IPv6地址及端口并存储;以及
第二截获模块,所述第二截获模块用于截获getname钩子,挂载inet6_getname_ttm钩子函数,以提取所述客户端的原始IPv6地址及端口供所述服务器的Linux应用层使用。
11.根据权利要求10所述的装置,其特征在于,进一步包括:
第三截获模块,所述第三截获模块用于截获_sk_stream_mem_reclaim函数,使用跳转指令码替换所述_sk_stream_mem_reclaim函数开始部分的指令代码,进而调用__sk_stream_mem_reclaim_ttm函数,并完成所述sock结构体以及所述高速缓存的释放。
12.根据权利要求10或11所述的方法,其特征在于,进一步包括:
写入模块,所述写入模块用于将所述TCP选项字段的kind号写入作为TCPOPT_TTM并将所述TCP选项字段的总长度写入作为TCPOLEN_TTM。
13.根据权利要求12所述的装置,其特征在于,所述第一截获模块用于:调用所述tcp_v6_syn_recv_sock函数;
判断所述TCP选项字段的kind号是否为TCPOPT_TTM并判断所述TCP选项的总长度是否为TCPOLEN_TTM;
如果是,则获取存储在所述TCP选项字段中的所述客户端的原始IPv6地址及端口;
为所述客户端的原始IPv6地址及端口分配高速缓存;
将sock结构体的sk_user_data指针指向所述高速缓存;以及
将所述客户端的原始IPv6地址及端口保存到所述高速缓存中。
14.根据权利要求13所述的方法,其特征在于,所述第一截获模块进一步用于:
如果不存在kind号为TCPOPT_TTM且长度为TCPOLEN_TTM的所述TCP选项字段,则返回。
15.根据权利要求13所述的方法,其特征在于,所述第一截获模块进一步用于:
如果没有成功分配所述高速缓存,则返回。
16.根据权利要求10或11所述的装置,其特征在于,所述第二截获模块用于:
调用所述inet6_getname函数;
判断所述sk_user_data指针指向的所述高速缓存是否为空;
如果否,则判断所述高速缓存中是否存储有所述客户端的原始IPv6地址及端口;以及
如果是,则将所述sk_user_data指针指向的所述高速缓存中存储的所述客户端的原始IPv6地址及端口赋值到uaddr的sin6_addr和sin6_port。
17.根据权利要求16所述的装置,其特征在于,所述第二截获模块进一步用于:
如果判断所述sk_user_data指针指向的所述高速缓存为空,则返回。
18.根据权利要求16所述的装置,其特征在于,所述第二截获模块进一步用于:
如果判断所述高速缓存中没有存储所述客户端的原始IPv6地址及端口,则返回。
CN201210054431.7A 2012-03-02 2012-03-02 传递客户端IPv6地址及端口至后端服务器的方法及装置 Active CN103297407B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210054431.7A CN103297407B (zh) 2012-03-02 2012-03-02 传递客户端IPv6地址及端口至后端服务器的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210054431.7A CN103297407B (zh) 2012-03-02 2012-03-02 传递客户端IPv6地址及端口至后端服务器的方法及装置

Publications (2)

Publication Number Publication Date
CN103297407A true CN103297407A (zh) 2013-09-11
CN103297407B CN103297407B (zh) 2016-05-25

Family

ID=49097734

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210054431.7A Active CN103297407B (zh) 2012-03-02 2012-03-02 传递客户端IPv6地址及端口至后端服务器的方法及装置

Country Status (1)

Country Link
CN (1) CN103297407B (zh)

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104753928A (zh) * 2015-03-16 2015-07-01 苏州科达科技股份有限公司 一种码流转发方法及系统
CN106685930A (zh) * 2016-12-06 2017-05-17 深圳市深信服电子科技有限公司 一种传输控制协议选项的处理方法及装置
CN107360272A (zh) * 2017-07-31 2017-11-17 赛尔网络有限公司 基于IPv6协议的流量入口的调度方法及装置
CN107465666A (zh) * 2017-07-12 2017-12-12 北京潘达互娱科技有限公司 一种客户端ip获取方法与装置
CN108494748A (zh) * 2018-03-08 2018-09-04 网宿科技股份有限公司 一种通信方法、装置及存储介质
CN108989480A (zh) * 2018-07-26 2018-12-11 杭州云缔盟科技有限公司 一种在服务器获取客户端地址的方法
CN109729104A (zh) * 2019-03-19 2019-05-07 北京百度网讯科技有限公司 客户端源地址获取方法、装置、服务器和计算机可读介质
CN110535879A (zh) * 2019-09-23 2019-12-03 中星科源(北京)信息技术有限公司 一种原始地址传输方法、系统、存储介质和处理器
CN110933190A (zh) * 2019-10-18 2020-03-27 平安科技(深圳)有限公司 一种客户端地址获取方法、装置、存储介质及计算机设备
CN111586207A (zh) * 2020-06-17 2020-08-25 北京宏图佳都通信设备有限公司 用于跨网络传递客户端源地址的方法、系统及相关设备
CN111586208A (zh) * 2020-06-17 2020-08-25 北京宏图佳都通信设备有限公司 用于跨网络传递客户端源地址的方法、系统及相关设备
CN111722979A (zh) * 2020-06-10 2020-09-29 北京百度网讯科技有限公司 质量监测方法、装置、服务器及存储介质
CN111800518A (zh) * 2020-08-20 2020-10-20 杭州迪普科技股份有限公司 客户端ip地址插入方法及装置
CN112242935A (zh) * 2019-07-19 2021-01-19 腾讯科技(深圳)有限公司 获取tcp状态信息的方法、装置、设备及存储介质
CN113794703A (zh) * 2021-08-31 2021-12-14 上海弘积信息科技有限公司 一种负载均衡系统中获取客户端ip的方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101252591A (zh) * 2008-04-03 2008-08-27 中国科学技术大学 实现上下行数据分离的方法和装置
CN102255932A (zh) * 2010-05-20 2011-11-23 百度在线网络技术(北京)有限公司 负载均衡方法和负载均衡器

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101252591A (zh) * 2008-04-03 2008-08-27 中国科学技术大学 实现上下行数据分离的方法和装置
CN102255932A (zh) * 2010-05-20 2011-11-23 百度在线网络技术(北京)有限公司 负载均衡方法和负载均衡器

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
史科军: ""支持集群系统的linux内核技术研究"", 《中国优秀硕士学位论文全文数据库(信息科技辑)》, no. 7, 15 November 2005 (2005-11-15), pages 138 - 413 *

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104753928A (zh) * 2015-03-16 2015-07-01 苏州科达科技股份有限公司 一种码流转发方法及系统
CN106685930A (zh) * 2016-12-06 2017-05-17 深圳市深信服电子科技有限公司 一种传输控制协议选项的处理方法及装置
CN107465666A (zh) * 2017-07-12 2017-12-12 北京潘达互娱科技有限公司 一种客户端ip获取方法与装置
CN107360272B (zh) * 2017-07-31 2020-04-03 赛尔网络有限公司 基于IPv6协议的流量入口的调度方法及装置
CN107360272A (zh) * 2017-07-31 2017-11-17 赛尔网络有限公司 基于IPv6协议的流量入口的调度方法及装置
CN108494748A (zh) * 2018-03-08 2018-09-04 网宿科技股份有限公司 一种通信方法、装置及存储介质
CN108494748B (zh) * 2018-03-08 2021-06-04 网宿科技股份有限公司 一种通信方法、装置及存储介质
CN108989480A (zh) * 2018-07-26 2018-12-11 杭州云缔盟科技有限公司 一种在服务器获取客户端地址的方法
CN109729104A (zh) * 2019-03-19 2019-05-07 北京百度网讯科技有限公司 客户端源地址获取方法、装置、服务器和计算机可读介质
CN112242935A (zh) * 2019-07-19 2021-01-19 腾讯科技(深圳)有限公司 获取tcp状态信息的方法、装置、设备及存储介质
CN112242935B (zh) * 2019-07-19 2022-05-10 腾讯科技(深圳)有限公司 获取tcp状态信息的方法、装置、设备及存储介质
CN110535879A (zh) * 2019-09-23 2019-12-03 中星科源(北京)信息技术有限公司 一种原始地址传输方法、系统、存储介质和处理器
CN110933190A (zh) * 2019-10-18 2020-03-27 平安科技(深圳)有限公司 一种客户端地址获取方法、装置、存储介质及计算机设备
CN111722979A (zh) * 2020-06-10 2020-09-29 北京百度网讯科技有限公司 质量监测方法、装置、服务器及存储介质
CN111722979B (zh) * 2020-06-10 2024-02-13 北京百度网讯科技有限公司 质量监测方法、装置、服务器及存储介质
CN111586207A (zh) * 2020-06-17 2020-08-25 北京宏图佳都通信设备有限公司 用于跨网络传递客户端源地址的方法、系统及相关设备
CN111586208A (zh) * 2020-06-17 2020-08-25 北京宏图佳都通信设备有限公司 用于跨网络传递客户端源地址的方法、系统及相关设备
CN111800518A (zh) * 2020-08-20 2020-10-20 杭州迪普科技股份有限公司 客户端ip地址插入方法及装置
CN111800518B (zh) * 2020-08-20 2023-02-07 杭州迪普科技股份有限公司 客户端ip地址插入方法及装置
CN113794703A (zh) * 2021-08-31 2021-12-14 上海弘积信息科技有限公司 一种负载均衡系统中获取客户端ip的方法

Also Published As

Publication number Publication date
CN103297407B (zh) 2016-05-25

Similar Documents

Publication Publication Date Title
CN103297407A (zh) 传递客户端IPv6地址及端口至后端服务器的方法及装置
CN103297552A (zh) 传递客户端IPv4地址及端口至后端服务器的方法及装置
US9363744B2 (en) Method and system for scalable and manageable non-access stratum (NAS) node selection function for evolved packet systems
CN101094187A (zh) 一种学习介质访问控制地址的方法和装置、业务板
CN105340327A (zh) 移动网络中的无线电接入技术信息存储
CN103491053A (zh) Udp负载均衡方法、系统及装置
EP2139243A1 (en) Base station, wireless control device, and wireless device
WO2018063622A1 (en) Hash-based signature balancing
CN101714932A (zh) 一种用于irf堆叠设备的mad检测方法及装置
CN104837127A (zh) 由辅基站和主基站执行的通信方法以及相应的基站
CN102316133A (zh) 一种负载均衡方法及装置
CN103491016A (zh) Udp负载均衡系统中源地址传递方法、系统及装置
JP2017516201A5 (zh)
CN105871661A (zh) 公网服务器探测方法及探测服务器
CN102546364A (zh) 网络数据分流方法及其装置
CN108418752A (zh) 一种聚合组的创建方法和装置
CN107249038A (zh) 业务数据转发方法及系统
CN102594707A (zh) 网络控制系统及网络交换适配器
CN105072145A (zh) 一种物联网的通信方法及系统
CN102404156B (zh) 一种基于聚合链路的数据传输方法和设备
EP2822237A1 (en) Mobile communication system, communication system, node, flow-control network, and communication-control method
CN107277011B (zh) 终端设备的数据分类方法及装置
US9826371B2 (en) SMS message management
CN101207525B (zh) 无线网络控制器信令处理模块的测试系统和装置
CN113572698B (zh) 组播组容量的测试方法和装置、存储介质及电子装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant