CN109729104B - 客户端源地址获取方法、装置、服务器和计算机可读介质 - Google Patents
客户端源地址获取方法、装置、服务器和计算机可读介质 Download PDFInfo
- Publication number
- CN109729104B CN109729104B CN201910209254.7A CN201910209254A CN109729104B CN 109729104 B CN109729104 B CN 109729104B CN 201910209254 A CN201910209254 A CN 201910209254A CN 109729104 B CN109729104 B CN 109729104B
- Authority
- CN
- China
- Prior art keywords
- source address
- module
- kernel module
- service module
- message
- 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.)
- Active
Links
Images
Abstract
本公开提供一种客户端源地址信息获取方法,通过在客户端源地址获取服务器内设置内核模块,利用内核模块与F5设备建立TCP连接后,F5设备就可以向内核模块发送数据报文,内核模块可以从中获取客户端的源地址信息和源端口信息。在内核模块以客户端的源地址和端口与服务模块建立TCP连接之后,内核模块可以用客户端的源端口信息和源地址信息转发数据报文,这样服务模块看到的就是客户端真实的IP地址和端口。此外,内核模块为虚拟功能模块,可以通过加载/卸载的方式,来开启/关闭获取客户端真实IP地址和端口信息的功能,使用更加灵活,减少硬件投入成本。本公开还提供一种装置、服务器和计算机可读介质。
Description
技术领域
本公开涉及通信技术领域,具体涉及一种客户端源地址获取方法、装置、服务器和计算机可读介质。
背景技术
通过F5设备(即硬件负载均衡设备)做负载均衡,可以选择对客户端的源地址信息进行转换,这样负载均衡挂载的后端服务器看到的源地址是经过转换后的IP(InternetProtocol,互联网协议地址,而不是客户端的真实IP地址。某些应用依赖于客户端的IP地址进行访问控制(ACL),在此场景下,服务端无法获取客户端的真实IP地址,业务不可用。
针对四层负载方式,F5设备目前提供了一些种供服务器端获取客户端真实IP地址的方法,主要包括:修改TCP(Transmission Control Protocol,传输层通信协议)/UDP(User Datagram Protocol,用户数据报协议)数据报文,在数据报文中插入客户端的源地址和源端口信息。但是,F5设备只能修改数据报文,而F5设备向服务器发送的SYN、SYN-ACK报文中无法插入源地址和源端口信息,造成服务器无法通过修改netfilter的方式将源地址替换成客户端的真实IP地址。
针对七层负载方式,对于http/https类型的服务,目前是在http报文头中插入x-forward-for字段,供服务器获取客户端的真实IP地址。但是,当F5设备和后端服务器建立连接后,服务器从网络协议栈层面看到的都是经地址转换过后的地址,无法直接获取客户端真实的源地址和源端口信息,需要开发额外的逻辑去数据报文中获取客户端的真实IP地址,工作量较大。
现有解决方案是:在F5设备后实际部署一台物理服务器进行地址转换的操作,一方面,这种方案增加了硬件的投入成本,且存在单点的风险,物理网络调整不够灵活;另一方面,这种方案基于TCP的三次握手来建立会话表,即SYN报文中就需要包含客户端的源地址和源端口信息,但是F5设备无法在三次握手过程中插入源地址和源端口信息,因此该方案也是不合适的。
发明内容
本公开针对现有技术中存在的上述不足,提供及一种客户端源地址获取方法、装置、服务器和计算机可读介质。
第一方面,本公开实施例提供及一种客户端源地址获取方法,所述方法应用于包括硬件负载均衡F5设备和客户端源地址获取服务器的系统,所述客户端源地址获取服务器包括内核模块和服务模块,所述方法包括:
内核模块与F5设备建立TCP连接;
所述内核模块接收所述F5设备发送的第一数据报文,获取其中携带的源地址信息和源端口信息;
所述内核模块获取当前报文的第一序列号和第二序列号;
所述内核模块判断与服务模块是否已建立TCP连接,若是,则根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文,并向所述服务模块发送所述第二数据报文。
优选的,所述根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文,具体包括:
将所述第一数据报文中的第一序列号和第二序列号分别调整为所述当前报文的第一、二序列号,并对所述第一数据报文根据所述源地址信息和源端口信息进行地址转换,以生成第二数据报文。
优选的,所述内核模块判断与服务模块是否已建立TCP连接,具体包括:
所述内核模块判断所述第一数据报文中携带的五元组信息是否全部命中会话表,若全部命中,则所述内核模块与服务模块已建立TCP连接;若所述五元组信息中的至少一个未命中会话表,则所述内核模块与服务模块未建立TCP连接。
进一步的,若所述内核模块与服务模块未建立TCP连接,则所述内核模块以所述源地址信息和源端口信息与所述服务模块建立TCP连接,且根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文,并向所述服务模块发送所述第二数据报文。
优选的,所述内核模块以所述源地址信息和源端口信息与所述服务模块建立TCP连接,具体包括:
所述内核模块向所述服务模块发送SYN报文,在接收到所述服务模块返回的SYN-ACK报文后,向所述服务模块发送ACK报文;其中,所述SYN报文中携带所述源地址信息和源端口信息。
优选的,所述内核模块获取当前报文的第一序列号和第二序列号,具体包括:从协议栈中获取当前报文的第一序列号和第二序列号。
进一步的,所述客户端源地址获取方法还包括:
当所述内核模块接收到所述服务模块发送的第三数据报文时,获取当前报文的第一序列号和第二序列号;
所述内核模块判断与所述F5设备是否已建立TCP连接,若是,则根据所述第三数据报文和所述当前报文的第一、二序列号以及所述内核模块的地址信息和端口信息,生成第四数据报文,并向所述F5设备发送所述第四数据报文。
优选的,所述内核模块与硬件负载均衡F5设备建立TCP连接,具体包括:
内核模块接收F5设备发送的SYN报文;
向所述F5设备返回SYN-ACK报文;
接收所述F5设备发送的ACK报文。
另一方面,本公开实施例还提供及一种客户端源地址获取装置,包括内核模块和服务模块,所述内核模块包括会话建立单元、第一接收单元、第一获取单元、第二获取单元、判断单元、处理单元和第一发送单元;
所述会话建立单元用于,与硬件负载均衡F5设备建立TCP连接;
所述第一接收单元用于,接收所述F5设备发送的第一数据报文;
所述第一获取单元用于,获取所述第一数据报文中携带的源地址信息和源端口信息;
所述第二获取单元用于,获取当前报文的第一序列号和第二序列号;
所述判断单元用于,判断与服务模块是否已建立TCP连接,当判断出与服务模块已建立TCP连接时,指示所述处理单元根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文;
所述第一发送单元用于,向所述服务模块发送所述第二数据报文。
优选的,所述处理模块具体用于,将所述第一数据报文中的第一序列号和第二序列号分别调整为所述当前报文的第一、二序列号,并对所述第一数据报文根据所述源地址信息和源端口信息进行地址转换,以生成第二数据报文。
优选的,所述判断单元具体用于,判断所述第一数据报文中携带的五元组信息是否全部命中会话表,若全部命中,则所述内核模块与服务模块已建立TCP连接;若所述五元组信息中的至少一个未命中会话表,则所述内核模块与服务模块未建立TCP连接。
进一步的,所述判断单元还用于,当判断出所述内核模块与服务模块未建立TCP连接时,指示所述会话建立单元以所述源地址信息和源端口信息与所述服务模块建立TCP连接;以及指示所述处理单元用根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文;以及指示所述第一发送单元向所述服务模块发送第二数据报文。
优选的,所述会话建立单元具体用于,向所述服务模块发送SYN报文,在接收到所述服务模块返回的SYN-ACK报文后,向所述服务模块发送ACK报文;其中,所述SYN报文中携带所述源地址信息和源端口信息。
优选的,所述第二获取单元具体用于,从协议栈中获取当前报文的第一序列号和第二序列号。
进一步的,所述客户端源地址获取服务器还包括第二接收单元和第二发送单元;
所述第二接收单元用于,接收所述服务模块发送的第三数据报文;
所述第二获取单元还用于,当所述第二接收单元接收到所述服务模块发送的第三数据报文时,获取当前报文的第一序列号和第二序列号;
所述判断单元还用于,在所述第二获取单元获取到当前报文的第一序列号和第二序列号时,判断与所述F5设备是否已建立TCP连接,当判断出与所述F5设备已建立TCP连接时,指示所述处理单元根据所述第三数据报文和所述当前报文的第一、二序列号以及所述内核模块的地址信息和端口信息,生成第四数据报文;
所述第二发送单元用于,向所述F5设备发送所述第四数据报文。
优选的,所述会话建立单元具体用于,接收F5设备发送的SYN报文,向所述F5设备返回SYN-ACK报文,并接收所述F5设备发送的ACK报文。
又一方面,本公开实施例还提供一种服务器,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如前所述的客户端源地址获取方法。
再一方面,本公开实施例还提供一种计算机可读介质,其上存储有计算机程序,其中,所述程序被执行时实现如前所述的客户端源地址获取方法。
本公开的实施例,通过在客户端源地址获取服务器内设置内核模块,利用内核模块与F5设备建立TCP连接后,F5设备就可以向内核模块发送数据报文,这样,内核模块可以从中获取客户端的源地址信息和源端口信息。在内核模块以客户端的源地址和端口与客户端源地址获取服务器的服务模块建立TCP连接之后,内核模块可以用客户端的源端口信息和源地址信息转发数据报文,这样服务模块看到的就是客户端真实的IP地址和端口(即客户端的源地址和源端口),从而实现直接从数据报文中获取客户端的真实IP地址和端口信息。此外,内核模块为虚拟功能模块,可以通过加载/卸载内核模块的方式,来开启或者关闭获取客户端真实IP地址和端口信息的功能,使用更加灵活,减少硬件投入成本。
附图说明
图1本本公开的系统架构示意图。
图2为本公开一实施例提供的客户端源地址获取方法流程图;
图3为本公开又一实施例提供的客户端源地址获取方法流程图;
图4为本公开一实施例提供客户端源地址获取服务器的内核模块的结构示意图;
图5为本公开又实施例提供客户端源地址获取服务器的内核模块的结构示意图。
具体实施方式
为使本领域的技术人员更好地理解本发明的技术方案,下面结合附图对本发明提供的无人驾驶车辆控制器测试方案进行详细描述。
在下文中将参考附图更充分地描述示例实施例,但是所述示例实施例可以以不同形式来体现且不应当被解释为限于本文阐述的实施例。反之,提供这些实施例的目的在于使本公开透彻和完整,并将使本领域技术人员充分理解本公开的范围。
如本文所使用的,术语“和/或”包括一个或多个相关列举条目的任何和所有组合。
本文所使用的术语仅用于描述特定实施例,且不意欲限制本公开。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。还将理解的是,当本说明书中使用术语“包括”和/或“由……制成”时,指定存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其他特征、整体、步骤、操作、元件、组件和/或其群组。
本文所述实施例可借助本公开的理想示意图而参考平面图和/或截面图进行描述。因此,可根据制造技术和/或容限来修改示例图示。因此,实施例不限于附图中所示的实施例,而是包括基于制造工艺而形成的配置的修改。因此,附图中例示的区具有示意性属性,并且图中所示区的形状例示了元件的区的具体形状,但并不旨在是限制性的。
除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本公开的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。
本公开的一个实施例提供一种客户端源地址获取方法,如图1所示,所述方法应用于包括:硬件负载均衡F5设备1和客户端源地址获取服务器2的系统,客户端源地址获取服务器2包括内核模块(BTM)21和服务模块22,内核模块21可以为虚拟模块。
以下结合图2,对所述客户端源地址获取方法进行详细说明,如图2所示,该方法包括以下步骤:
步骤201,内核模块与F5设备建立TCP连接。
客户端源地址获取服务器2的内核模块21在netfilter PREROUTING&POSTROUTINGhook上注册钩子函数,当内核模块21接收到F5设备1发送的SYN报文时,调用钩子函数,与F5设备1进行TCP的三次握手。
具体的,F5设备1向内核模块21发送SYN报文,内核模块21响应SYN报文,即向F5设备1返回SYN-ACK(Acknowledgement,确认)报文,F5设备1接收到内核模块21返回的SYN-ACK报文后,向内核模块21发送ACK报文,由此建立F5设备1与内核模块21之间的TCP连接,并生成会话表。
通过本步骤,内核模块21可以代替服务模块22实现SYN报文的代答。
步骤202,内核模块接收F5设备发送的第一数据报文。
具体的,F5设备1向内核模块21发送第一数据报文,并将客户端的源地址信息和源端口信息插入在第一数据报文的tcp option字段中。
步骤203,内核模块获取第一数据报文中携带的源地址信息和源端口信息。
具体的,内核模块21解析第一数据报文,从tcp option字段中获取客户端的源地址信息和源端口信息。
步骤204,内核模块获取当前报文的第一序列号和第二序列号。
由于内核模块21代替服务模块22实现SYN报文代答,因此,F5设备1发送给内核模块21的数据报文的序列号,与内核模块21后续发送给服务模块22的数据报文的序列号是不一致的,因此,内核模块21在接收到F5设备1发送的第一数据报文后、向服务模块22转发该数据报文前,需要进行数据报文序列号的调整。
具体的,内核模块21从协议栈中获取当前报文的第一序列号和第二序列号,其中,第一序列号为sequence number,第二序列号为ack number。
步骤205,内核模块判断与服务模块是否已建立TCP连接,若是,则执行步骤206。
内核模块21判断当前与服务模块22是否已建立TCP连接,具体的,内核模块21判断第一数据报文中携带的五元组信息是否全部命中会话表,若全部命中,则说明内核模块21与服务模块22已建立TCP连接;若五元组信息中的至少一个未命中会话表,则说明内核模块21与服务模块22未建立TCP连接。
优选的,五元组信息包括:源地址、源端口号、目的地址、目的端口号、协议类型。
步骤206,内核模块根据第一数据报文、当前报文的第一、二序列号以及源地址信息和源端口信息,生成第二数据报文。
具体的,内核模块21将第一数据报文中的第一序列号和第二序列号分别调整为所述当前报文的第一、二序列号(即从协议栈中获取到的第一序列号和第二序列号),从而实现数据报文序列号的调整。此外,内核模块21还对第一数据报文根据所述源地址信息和源端口信息进行地址转换,以生成第二数据报文。即内核模块21利用从第一数据报文中获取到的源地址信息和源端口信息替换自己的地址信息和端口信息(写入报文头的源地址和源端口字段)。也就是说,第二数据报文中源地址和源端口为客户端的源地址信息和源端口信息,第二数据报文中目的地址和目的端口为服务模块的地址信息和端口信息。
步骤207,内核模块向服务模块发送第二数据报文。
服务模块22接收到第二数据报文,即可从中获取到客户端的源地址信息和源端口信息。
需要说明的是,步骤204和步骤205的执行顺序不限,只要保证步骤204和步骤205在步骤206之前执行即可。
通过步骤201-207可以看出,本公开通过在客户端源地址获取服务器内设置内核模块,利用内核模块与F5设备建立TCP连接后,F5设备就可以向内核模块发送数据报文,这样,内核模块可以从中获取客户端的源地址信息和源端口信息。在内核模块以客户端的源地址和端口与客户端源地址获取服务器的服务模块建立TCP连接之后,内核模块可以用客户端的源端口信息和源地址信息转发数据报文,这样服务模块看到的就是客户端真实的IP地址和端口(即客户端的源地址和源端口),从而实现直接从数据报文中获取客户端的真实IP地址和端口信息。此外,内核模块为虚拟功能模块,可以通过加载/卸载内核模块的方式,来开启或者关闭获取客户端真实IP地址和端口信息的功能,使用更加灵活,减少硬件投入成本。
进一步的,如图1所示,在步骤205中,若内核模块21判断出与服务模块22未建立TCP连接,则执行以下步骤:
步骤301,内核模块以所述源地址信息和源端口信息与服务模块建立TCP连接。
具体的,内核模块21向服务模块22发送SYN报文,其中,SYN报文中携带客户端的源地址信息和源端口信息。内核模块21在接收到服务模块22返回的SYN-ACK报文后,向服务模块22发送ACK报文,由此,通过三次握手机制建立内核模块21与服务模块22之间的TCP连接。
需要说明的是,内核模块21在接收到服务模块22返回的SYN-ACK报文后,还可以去掉SYN标记,只保留ACK标记,将ACK报文透传给F5设备1,以使F5设备1将该ACK报文作为一个窗口更新发送到客户端。
步骤302,内核模块根据第一数据报文、当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文。
具体的,本步骤的具体实现方式与步骤206的实现方式相同,在此不再赘述。
步骤303,内核模块向服务模块发送第二数据报文。
需要说明的是,客户端源地址获取服务器2也会向F5设备发送数据报文,因此,如图3所示,在本公开又一实施例中,所述客户端源地址获取方法还可以包括以下步骤:
步骤401-402,当内核模块接收到服务模块发送的第三数据报文时,获取当前报文的第一序列号和第二序列号。
具体的,当内核模块21接收到服务模块22发送的第三数据报文时,从协议栈中获取当前报文的第一序列号和第二序列号。
步骤403,内核模块判断与F5设备是否已建立TCP连接,若是,则执行步骤404。
步骤404,内核模块根据第三数据报文和当前报文的第一、二序列号以及自身的地址信息和端口信息,生成第四数据报文。
具体的,内核模块21将第三数据报文中的第一序列号和第二序列号分别调整为所述当前报文的第一、二序列号(即从协议栈中获取到的第一序列号和第二序列号),从而实现数据报文序列号的调整。此外,内核模块21还对第三数据报文根据内核模块自身的地址信息和端口信息进行地址转换,以生成第四数据报文。即内核模块21利用自己的地址信息和端口信息替换从第三数据报文中获取到的源地址信息和源端口信息(写入报文头的源地址和源端口字段)。也就是说,第四数据报文中源地址和源端口为内核模块21的地址信息和端口信息,第四数据报文中目的地址和目的端口为客户端的地址和端口。
步骤405,内核模块向F5设备发送第四数据报文。
本公开实施例的方案解决了在NAT(Network Address Translation,地址转换)模式下,F5设备绑定的后端服务器无法获取客户端真实源IP地址和源端口信息的问题,扩充了NAT模式下的F5设备的使用场景。
基于相同的技术构思,如图1所示,本公开实施例还提供一种客户端源地址获取服务器2,该客户端源地址获取服务器2包括内核模块21和服务模块22,如图4所示,内核模块21包括会话建立单元211、第一接收单元212、第一获取单元213、第二获取单元214、判断单元215、处理单元216和第一发送单元217。
会话建立单元211用于,与硬件负载均衡F5设备建立TCP连接。
第一接收单元212用于,接收所述F5设备发送的第一数据报文。
第一获取单元213用于,获取所述第一数据报文中携带的源地址信息和源端口信息。
第二获取单元214用于,获取当前报文的第一序列号和第二序列号。
判断单元215用于,判断与服务模块是否已建立TCP连接,当判断出与服务模块已建立TCP连接时,指示处理单元216根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文。
第一发送单元217用于,向所述服务模块发送所述第二数据报文。
优选的,处理模块216具体用于,将所述第一数据报文中的第一序列号和第二序列号分别调整为所述当前报文的第一、二序列号,并对所述第一数据报文根据所述源地址信息和源端口信息进行地址转换,以生成第二数据报文。
优选的,判断单元215具体用于,判断所述第一数据报文中携带的五元组信息是否全部命中会话表,若全部命中,则所述内核模块与服务模块已建立TCP连接;若所述五元组信息中的至少一个未命中会话表,则所述内核模块与服务模块未建立TCP连接。
进一步的,判断单元215还用于,当判断出所述内核模块与服务模块未建立TCP连接时,指示会话建立单元211以所述源地址信息和源端口信息与所述服务模块建立TCP连接;以及指示处理单元216用根据所述第一数据报文、所述第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文;以及指示第一发送单元217向所述服务模块发送第二数据报文。
优选的,会话建立单元211具体用于,向所述服务模块发送SYN报文,在接收到所述服务模块返回的SYN-ACK报文后,向所述服务模块发送ACK报文;其中,所述SYN报文中携带所述源地址信息和源端口信息。
优选的,第二获取单元214具体用于,从协议栈中获取当前报文的第一序列号和第二序列号。
进一步的,在本公开又一实施例中,如图5所示,所述客户端源地址获取服务器还包括第二接收单元218和第二发送单元219。
第二接收单元218用于,接收所述服务模块发送的第三数据报文。
第二获取单元214还用于,当第二接收单元218接收到所述服务模块发送的第三数据报文时,获取当前报文的第一序列号和第二序列号。
判断单元215还用于,在第二获取单元214获取到当前报文的第一序列号和第二序列号时,判断与所述F5设备是否已建立TCP连接,当判断出与所述F5设备已建立TCP连接时,指示所述处理单元根据所述第三数据报文和所述当前报文的第一、二序列号,生成第四数据报文。
第二发送单元219用于,向所述F5设备发送所述第四数据报文。
需要说明的是,本公开又一实施例中的其他单元模块与前一实施例在的单元模块相同,在此不再赘述。
优选的,会话建立单元211具体用于,接收F5设备发送的SYN报文,向所述F5设备返回SYN-ACK报文,并接收所述F5设备发送的ACK报文。
本公开实施例还提供了一种服务器,该服务器包括:一个或多个处理器以及存储装置;其中,存储装置上存储有一个或多个程序,当上述一个或多个程序被上述一个或多个处理器执行时,使得上述一个或多个处理器实现如前述各实施例所提供的客户端源地址获取方法。
本公开实施例还提供了一种计算机可读介质,其上存储有计算机程序,其中,该计算机程序被执行时实现如前述各实施例所提供的客户端源地址获取方法。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
本文已经公开了示例实施例,并且虽然采用了具体术语,但它们仅用于并仅应当被解释为一般说明性含义,并且不用于限制的目的。在一些实例中,对本领域技术人员显而易见的是,除非另外明确指出,否则可单独使用与特定实施例相结合描述的特征、特性和/或元素,或可与其他实施例相结合描述的特征、特性和/或元件组合使用。因此,本领域技术人员将理解,在不脱离由所附的权利要求阐明的本发明的范围的情况下,可进行各种形式和细节上的改变。
Claims (18)
1.一种客户端源地址获取方法,其中,所述方法应用于包括硬件负载均衡F5设备和客户端源地址获取服务器的系统,所述客户端源地址获取服务器包括内核模块和服务模块,所述方法包括:
内核模块与F5设备建立TCP连接,其中,所述内核模块在netfilter PREROUTING&POSTROUTING hook上注册钩子函数,当所述内核模块接收到所述F5设备发送的SYN报文时,调用所述钩子函数,与所述F5设备建立TCP连接;
所述内核模块接收所述F5设备发送的第一数据报文,获取其中携带的源地址信息和源端口信息;
所述内核模块获取当前报文的第一序列号和第二序列号;
所述内核模块判断与服务模块是否已建立TCP连接,若是,则根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文,并向所述服务模块发送所述第二数据报文。
2.如权利要求1所述的方法,其中,所述根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文,具体包括:
将所述第一数据报文中的第一序列号和第二序列号分别调整为所述当前报文的第一、二序列号,并对所述第一数据报文根据所述源地址信息和源端口信息进行地址转换,以生成第二数据报文。
3.如权利要求1所述的方法,其中,所述内核模块判断与服务模块是否已建立TCP连接,具体包括:
所述内核模块判断所述第一数据报文中携带的五元组信息是否全部命中会话表,若全部命中,则所述内核模块与服务模块已建立TCP连接;若所述五元组信息中的至少一个未命中会话表,则所述内核模块与服务模块未建立TCP连接。
4.如权利要求1所述的方法,其中,若所述内核模块与服务模块未建立TCP连接,则所述内核模块以所述源地址信息和源端口信息与所述服务模块建立TCP连接,且根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文,并向所述服务模块发送所述第二数据报文。
5.如权利要求4所述的方法,其中,所述内核模块以所述源地址信息和源端口信息与所述服务模块建立TCP连接,具体包括:
所述内核模块向所述服务模块发送SYN报文,在接收到所述服务模块返回的SYN-ACK报文后,向所述服务模块发送ACK报文;其中,所述SYN报文中携带所述源地址信息和源端口信息。
6.如权利要求1所述的方法,其中,所述内核模块获取当前报文的第一序列号和第二序列号,具体包括:从协议栈中获取当前报文的第一序列号和第二序列号。
7.如权利要求1-6任一项所述的方法,其中,还包括:
当所述内核模块接收到所述服务模块发送的第三数据报文时,获取当前报文的第一序列号和第二序列号;
所述内核模块判断与所述F5设备是否已建立TCP连接,若是,则根据所述第三数据报文和所述当前报文的第一、二序列号以及所述内核模块的地址信息和端口信息,生成第四数据报文,并向所述F5设备发送所述第四数据报文。
8.如权利要求1-6任一项所述的方法,其中,所述内核模块与硬件负载均衡F5设备建立TCP连接,具体包括:
内核模块接收F5设备发送的SYN报文;
向所述F5设备返回SYN-ACK报文;
接收所述F5设备发送的ACK报文。
9.一种客户端源地址获取服务器,其中,包括内核模块和服务模块,所述内核模块包括会话建立单元、第一接收单元、第一获取单元、第二获取单元、判断单元、处理单元和第一发送单元;
所述会话建立单元用于,与硬件负载均衡F5设备建立TCP连接;其中,所述内核模块在netfilter PREROUTING&POSTROUTING hook上注册钩子函数,当所述内核模块接收到所述F5设备发送的SYN报文时,调用所述钩子函数,与所述F5设备建立TCP连接;
所述第一接收单元用于,接收所述F5设备发送的第一数据报文;
所述第一获取单元用于,获取所述第一数据报文中携带的源地址信息和源端口信息;
所述第二获取单元用于,获取当前报文的第一序列号和第二序列号;
所述判断单元用于,判断与服务模块是否已建立TCP连接,当判断出与服务模块已建立TCP连接时,指示所述处理单元根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文;
所述第一发送单元用于,向所述服务模块发送所述第二数据报文。
10.如权利要求9所述的客户端源地址获取服务器,其中,所述处理模块具体用于,将所述第一数据报文中的第一序列号和第二序列号分别调整为所述当前报文的第一、二序列号,并对所述第一数据报文根据所述源地址信息和源端口信息进行地址转换,以生成第二数据报文。
11.如权利要求9所述的客户端源地址获取服务器,其中,所述判断单元具体用于,判断所述第一数据报文中携带的五元组信息是否全部命中会话表,若全部命中,则所述内核模块与服务模块已建立TCP连接;若所述五元组信息中的至少一个未命中会话表,则所述内核模块与服务模块未建立TCP连接。
12.如权利要求9所述的客户端源地址获取服务器,其中,所述判断单元还用于,当判断出所述内核模块与服务模块未建立TCP连接时,指示所述会话建立单元以所述源地址信息和源端口信息与所述服务模块建立TCP连接;以及指示所述处理单元用根据所述第一数据报文、所述当前报文的第一、二序列号以及所述源地址信息和源端口信息,生成第二数据报文;以及指示所述第一发送单元向所述服务模块发送第二数据报文。
13.如权利要求12所述的客户端源地址获取服务器,其中,所述会话建立单元具体用于,向所述服务模块发送SYN报文,在接收到所述服务模块返回的SYN-ACK报文后,向所述服务模块发送ACK报文;其中,所述SYN报文中携带所述源地址信息和源端口信息。
14.如权利要求9所述的客户端源地址获取服务器,其中,所述第二获取单元具体用于,从协议栈中获取当前报文的第一序列号和第二序列号。
15.如权利要求9-14任一项所述的客户端源地址获取服务器,其中,还包括第二接收单元和第二发送单元;
所述第二接收单元用于,接收所述服务模块发送的第三数据报文;
所述第二获取单元还用于,当所述第二接收单元接收到所述服务模块发送的第三数据报文时,获取当前报文的第一序列号和第二序列号;
所述判断单元还用于,在所述第二获取单元获取到当前报文的第一序列号和第二序列号时,判断与所述F5设备是否已建立TCP连接,当判断出与所述F5设备已建立TCP连接时,指示所述处理单元根据所述第三数据报文和所述当前报文的第一、二序列号以及所述内核模块的地址信息和端口信息,生成第四数据报文;
所述第二发送单元用于,向所述F5设备发送所述第四数据报文。
16.如权利要求9-14任一项所述的客户端源地址获取服务器,其中,所述会话建立单元具体用于,接收F5设备发送的SYN报文,向所述F5设备返回SYN-ACK报文,并接收所述F5设备发送的ACK报文。
17.一种服务器,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-8任一项所述的客户端源地址获取方法。
18.一种计算机可读介质,其上存储有计算机程序,其中,所述程序被计算机执行时实现如权利要求1-8任一项所述的客户端源地址获取方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910209254.7A CN109729104B (zh) | 2019-03-19 | 2019-03-19 | 客户端源地址获取方法、装置、服务器和计算机可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910209254.7A CN109729104B (zh) | 2019-03-19 | 2019-03-19 | 客户端源地址获取方法、装置、服务器和计算机可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109729104A CN109729104A (zh) | 2019-05-07 |
CN109729104B true CN109729104B (zh) | 2021-08-17 |
Family
ID=66301944
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910209254.7A Active CN109729104B (zh) | 2019-03-19 | 2019-03-19 | 客户端源地址获取方法、装置、服务器和计算机可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109729104B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110933190B (zh) * | 2019-10-18 | 2022-09-27 | 平安科技(深圳)有限公司 | 一种客户端地址获取方法、装置、存储介质及计算机设备 |
CN110798542A (zh) * | 2019-10-28 | 2020-02-14 | 北京奇艺世纪科技有限公司 | 一种获取ip地址的方法及系统 |
CN113691640B (zh) * | 2020-05-19 | 2023-04-25 | 阿里巴巴集团控股有限公司 | 通信方法、装置、电子设备及计算机可读存储介质 |
CN115242888A (zh) * | 2021-04-02 | 2022-10-25 | 深圳市锐速云计算有限公司 | 四层tcp/udp协议转发真实ip方法及系统 |
CN113794703A (zh) * | 2021-08-31 | 2021-12-14 | 上海弘积信息科技有限公司 | 一种负载均衡系统中获取客户端ip的方法 |
CN115134315B (zh) * | 2022-09-01 | 2022-12-02 | 珠海星云智联科技有限公司 | 报文转发方法及相关装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106789884A (zh) * | 2016-11-16 | 2017-05-31 | 上海斐讯数据通信技术有限公司 | 一种Portal认证方法和系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102255932B (zh) * | 2010-05-20 | 2015-09-09 | 百度在线网络技术(北京)有限公司 | 负载均衡方法和负载均衡器 |
CN103023942B (zh) * | 2011-09-27 | 2016-08-03 | 北京奇虎科技有限公司 | 一种服务器负载均衡方法、装置及系统 |
CN103297407B (zh) * | 2012-03-02 | 2016-05-25 | 百度在线网络技术(北京)有限公司 | 传递客户端IPv6地址及端口至后端服务器的方法及装置 |
US9560126B2 (en) * | 2013-05-06 | 2017-01-31 | Alcatel Lucent | Stateless load balancing of connections |
CN103533080A (zh) * | 2013-10-25 | 2014-01-22 | 北京奇虎科技有限公司 | 用于lvs的服务器调度方法及装置 |
CN103607311B (zh) * | 2013-11-29 | 2017-01-18 | 厦门市美亚柏科信息股份有限公司 | 一种无缝重建tcp连接的系统及方法 |
CN106470238A (zh) * | 2015-08-20 | 2017-03-01 | 阿里巴巴集团控股有限公司 | 应用于服务器负载均衡中的连接建立方法及装置 |
CN105554065B (zh) * | 2015-12-03 | 2019-06-18 | 华为技术有限公司 | 处理报文的方法、转换单元和应用单元 |
-
2019
- 2019-03-19 CN CN201910209254.7A patent/CN109729104B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106789884A (zh) * | 2016-11-16 | 2017-05-31 | 上海斐讯数据通信技术有限公司 | 一种Portal认证方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109729104A (zh) | 2019-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109729104B (zh) | 客户端源地址获取方法、装置、服务器和计算机可读介质 | |
US11277341B2 (en) | Resilient segment routing service hunting with TCP session stickiness | |
US10397379B2 (en) | Robust multipath TCP stateless connection establishment | |
EP2557754B1 (en) | Method for inserting and unloading tcp proxy and service gateway device | |
EP3694160A1 (en) | Date transmission method, apparatus and device | |
CN105162883B (zh) | 网络负载均衡处理系统及其方法和装置 | |
US11431671B2 (en) | Method and apparatus for dynamic discovery of a blockchain component in a cloud computing system | |
US10417014B2 (en) | System service reloading method and apparatus | |
CN113452686B (zh) | 数据处理方法、装置、代理服务器及存储介质 | |
EP2858313A1 (en) | Method, device, and system for routing function activation and data transmission | |
CN109196842B (zh) | 一种会话保持方法、设备及存储介质 | |
CN104967613B (zh) | 一种移动网络环境下数据传输的系统和方法 | |
WO2022022366A1 (zh) | 隧道bfd会话建立方法及装置 | |
US20230189368A1 (en) | Associating transport identifiers with quality of service flows | |
US9350652B2 (en) | Method, system and router for changing application in BGP session | |
US10178015B2 (en) | Methods, systems, and computer readable media for testing network equipment devices using connectionless protocols | |
CN112565441A (zh) | 一种数据通信方法及电子设备 | |
WO2022222674A1 (zh) | 消息处理方法和装置、电子设备、计算机可读存储介质 | |
CA2840972C (en) | Communication system for establishing a real-time communication session | |
CN112398754B (zh) | 数据传输方法、装置、介质、电子设备及网络接入设备 | |
CN111836233A (zh) | 数据传输方法、通信设备和存储介质 | |
US7564854B2 (en) | Network architecture with a light-weight TCP stack | |
CN111131315B (zh) | 一种会话连接方法、设备及介质 | |
WO2015188706A1 (zh) | 数据帧的处理方法、装置与系统 | |
CN115150363B (zh) | Ip地址更新方法、网关设备、网关下挂设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |