CN113765867A - 一种数据传输方法、装置、设备及存储介质 - Google Patents
一种数据传输方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113765867A CN113765867A CN202010808395.3A CN202010808395A CN113765867A CN 113765867 A CN113765867 A CN 113765867A CN 202010808395 A CN202010808395 A CN 202010808395A CN 113765867 A CN113765867 A CN 113765867A
- Authority
- CN
- China
- Prior art keywords
- opposite
- communication
- handle
- mapping information
- service
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例公开了一种数据传输方法、装置、设备及存储介质,所述方法包括:获取待处理通信数据包;通过预先加载的数据传输逻辑获取所述待处理通信数据包中包含的对端端口标识,根据所述对端端口标识确定所述待处理通信数据包对应的对端套接字句柄,其中,所述数据传输逻辑基于eBPF框架实现;根据所述对端套接字句柄将所述待处理通信数据包进行传输。本发明实施例提供的方法通过基于eBPF实现服务网格技术中的流量劫持,直接基于对端套接字句柄将待处理通信数据包进行传输,减少了数据传输过程中的环节,提高了流量劫持的效率,进而提高了系统性能。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种数据传输方法、装置、设备及存储介质。
背景技术
服务网格技术是当下最前沿的微服务架构,其与传统微服务架构的区别在于:服务网格技术将完成通信的RPC SDK与业务逻辑完全分离,使两者彻底解耦,分别运行在两个不同的容器中,其中专门运行RPC SDK的容器叫“数据面Proxy(代理)”,它完成了所有非业务逻辑(包括服务注册/发现、协议编/解码、负载均衡、路由、健康检测、连接管理、熔断等等),而另一个容器只运行与业务相关的逻辑。以使数据面Proxy出现bug或者提供了新的功能特性时,可以通过“热升级”技术在不损失流量的情况下独立进行重新发布,而业务逻辑无需做任何事情,从而极大地减轻了业务开发人员的工作量。
但是数据面Proxy和业务逻辑彻底解耦后需要解决流量重定向的问题,这被称之为“流量劫持”。当前被普遍采用的流量劫持技术为Iptables,Iptables的底层机制是Linux内核中的Netfilter框架,该框架基于Linux内核的TCP/IP网络处理栈实现。在实现本发明的过程中,发明人发现现有技术中至少存在以下技术问题:采用Iptables实现流量劫持时,从调用端发出请求到服务端接收到该请求的过程中,需经过多次Iptables操作,严重地降低了数据包的传输效率。由此可见,基于Iptables的流量劫持数据流转的环节太多,存在严重的性能损失;且数据需要在内核态和用户态进行多次复制,存在严重的性能问题。
发明内容
本发明实施例提供了一种数据传输方法、装置、设备及存储介质,以实现减少流量劫持中数据流转环节,提高系统性能。
第一方面,本发明实施例提供了一种数据传输方法,包括:
获取待处理通信数据包;
通过预先加载的数据传输逻辑获取待处理通信数据包中包含的对端端口标识,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,其中,数据传输逻辑基于eBPF框架实现;
根据对端套接字句柄将待处理通信数据包进行传输。
第二方面,本发明实施例还提供了一种数据传输装置,包括:
通信数据获取模块,用于获取待处理通信数据包;
对端句柄确定模块,用于通过预先加载的数据传输逻辑获取待处理通信数据包中包含的对端端口标识,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,其中,数据传输逻辑基于eBPF框架实现;
通信数据传输模块,用于根据对端套接字句柄将待处理通信数据包进行传输。
第三方面,本发明实施例还提供了一种计算机设备,设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如本发明任意实施例所提供的数据传输方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的数据传输方法。
本发明实施例通过获取待处理通信数据包;通过预先加载的数据传输逻辑获取待处理通信数据包中包含的对端端口标识,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,其中,数据传输逻辑基于eBPF框架实现;根据对端套接字句柄将待处理通信数据包进行传输,通过基于eBPF实现服务网格技术中的流量劫持,直接基于对端套接字句柄将待处理通信数据包进行传输,减少了数据传输过程中的环节,提高了流量劫持的效率,进而提高了系统性能。
附图说明
图1是本发明实施例一所提供的一种数据传输方法的流程图;
图2是本发明实施例二所提供的一种数据传输方法的流程图;
图3是本发明实施例三所提供的一种数据传输方法的流程图;
图4a是本发明实施例四所提供的一种数据传输方法的传输示意图;
图4b是本发明实施例四所提供的一种数据传输系统的系统架构图;
图4c是本发明实施例四所提供的一种映射信息构建示意图;
图4d是本发明实施例四所提供的一种数据传输逻辑示意图;
图5是本发明实施例五所提供的一种数据传输装置的结构示意图;
图6是本发明实施例六所提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1是本发明实施例一所提供的一种数据传输方法的流程图。本实施例可适用于在服务网格技术中进行流量劫持时的情形。该方法可以由数据传输装置执行,该数据传输装置可以采用软件和/或硬件的方式实现,例如,该数据传输装置可配置于计算机设备中。如图1所示,所述方法包括:
S110、获取待处理通信数据包。
服务网格技术将完成通信的RPC SDK与业务逻辑完全分离,使两者彻底解耦,分别运行在两个不同的容器中。可选的,可以将运行RPC SDK的容器命名为数据面Proxy或通信模块,数据面Proxy完成了所有非业务逻辑,将另一个仅运行与业务相关的逻辑的容器命名为业务模块。可以理解的是,业务逻辑的对外请求由数据面Proxy完成。也就是说,调用端业务模块和服务端业务模块之前均部署一个通信模块,由通信模块完成调用端和服务端之间的数据传输。
本实施例提供的数据传输方法可以应用于调用端,也可以应用于服务端。当本实施例提供的数据传输方法应用于调用端时,可以实现由业务模块至通信模块的数据传输;当本实施例提供的数据传输方法应用于服务端时,可以实现由通信模块至业务模块的数据传输。可以理解的是,当本实施例提供的数据传输方法应用于调用端时,待处理通信数据包为检测到的调用端中业务模块需要传输至通信模块的新的通信数据包;当本实施例提供的数据传输方法应用于服务端时,待处理通信数据包为检测到的服务端中通信模块需要传输至业务模块的新的通信数据包。其中,通信数据包可以为需要传输的数据文件、或业务请求等数据信息。
可以理解的是,无论本实施例提供的数据传输方法应用于调用端或服务端,数据传输方法均由调用端或服务端所配置的计算机设备的内核执行。也就是说,当数据传输方法应用于调用端时,该方法由调用端所配置的计算机设备的内核执行;当数据传输方法应用于服务端时,该方法由服务端所配置的计算机设备的内核执行。可选的,获取待处理通信数据包可以为:获取内核传入的待处理通信数据包。其中,待处理通信数据包包括通信数据包的接收端口信息以及待传输的数据信息。
S120、通过预先加载的数据传输逻辑获取待处理通信数据包对应的对端端口标识,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,其中,数据传输逻辑基于eBPF框架实现。
在本实施例中,预先基于eBPF框架中的sockmap机制编写能够实现socket之间直接进行流量转发的数据传输逻辑,在计算机设备启动时,将预先编写的数据传输逻辑加载至设备内核中,并完成程序的初始化操作。在获取待处理通信数据包后,基于加载的数据传输逻辑对待处理通信数据包进行解析,获得待处理通信数据包中包含的对端端口标识,基于对端端口标识确定对端套接字句柄,直接基于对端套接字句柄将待处理通信数据包进行传输,实现了直接将来源端口发送的socket传输至对端端口,避免了数据包在内核态和用户态之间的多次拷贝,并且完美绕过了TCP/IP协议栈,极大地提高了流量劫持的效率。可以理解的是,对端是指与待处理通信数据包发送端相对的一端。在本实施例中,调用端中的业务模块和调用端中的通信模块互为对端。同理,服务端中的业务模块和服务端中的通信模块也互为对端。示例性的,假设待处理通信数据包的发送端为调用端中的业务模块,则其对端为调用端中的通信模块;假设待处理通信数据包的发送端为调用端中的通信模块,则其对端为调用端中的业务模块。
在本发明的一种实施方式中,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,包括:根据对端端口标识以及对端端口映射信息确定对端端口标识对应的对端索引值;根据对端索引值以及对端句柄映射信息确定对端套接字句柄。在本实施例中,由于eBPF的功能限制,无法直接构建端口标识(port)与套接字句柄(socket fd)之间的映射信息。在此基础上,通过设置索引值,分别构建端口标识与索引值之间的端口映射信息,以及套接字句柄与索引值之间的句柄映射信息,结合上述两个映射信息实现端口标识与套接字句柄(之间的映射。可以理解的是,在服务网格技术中,端口标识包括通信端口标识和业务端口标识,套接字句柄包括通信套接字句柄和业务套接字句柄。相应的,预先构建的端口映射信息包括通信端口标识与通信端口索引值之间的通信端口映射信息,以及业务端口标识与业务端口索引值之间的业务端口映射信息;句柄映射信息包括通信套接字句柄与通信句柄索引值之间的通信句柄映射信息,以及业务套接字句柄与业务句柄索引值之间的业务句柄映射信息。在进行数据传输时,根据应用场景选取相应的映射信息分别作为对端端口映射信息及对端句柄映射信息,基于选取的对端端口映射信息和对端句柄映射信息确定与对端端口标识对应的对端套接字句柄。
可以理解的是,当本实施例提供的数据传输方法应用于调用端时,对端端口标识为调用端的通信端口标识,对端套接字句柄为调用端的通信套接字句柄,对端端口映射信息为通信端口映射信息,对端句柄映射信息为通信句柄映射信息;当本实施例提供的数据传输方法应用于服务端时,对端端口标识为服务端的业务端口标识,对端套接字句柄为服务端的业务套接字句柄,对端端口映射信息为业务端口映射信息,对端句柄映射信息为业务句柄映射信息。
S130、根据对端套接字句柄将待处理通信数据包进行传输。
在本实施例中,确定对端套接字句柄后,将对端套接字句柄作为键值,调用数据传输函数将待处理通信数据包传输至对端套接字句柄对应的端口。示例性的,可以将对端套接字句柄作为key,通过bpf_sk_redirect_map完成待处理通信数据包的传输。
本发明实施例通过获取待处理通信数据包;通过预先加载的数据传输逻辑获取待处理通信数据包中包含的对端端口标识,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,其中,数据传输逻辑基于eBPF框架实现;根据对端套接字句柄将待处理通信数据包进行传输,通过基于eBPF实现服务网格技术中的流量劫持,直接基于对端套接字句柄将待处理通信数据包进行传输,减少了数据传输过程中的环节,提高了流量劫持的效率,进而提高了系统性能。
在上述方案的基础上,在待处理通信数据包之前,还包括:当系统启动时,将数据传输逻辑载入内核中;基于通信端口标识构建通信端口映射信息;根据业务端口标识创建业务模块的业务套接字对象,获取业务套接字对象的业务套接字句柄,基于业务套接字句柄构建业务句柄映射信息,并将通信端口映射信息和业务句柄映射信息加载入内核中;和/或,基于业务端口标识构建业务端口映射信息,并将业务端口映射信息和通信句柄映射信息加载入内核中;根据通信端口标识创建通信模块的通信套接字对象,获取通信套接字对象的通信套接字句柄,并基于通信套接字句柄构建通信句柄映射信息。可以理解的是,当操作系统未启动,数据传输逻辑未加载入内核时,socket对象未创建,即socket对象的句柄未知。当系统启动时,将数据传输逻辑载入内核中,并根据通信模块或业务模块的ip/port创建相应的socket对象,基于创建的socket对象的句柄构建句柄映射信息,基于端口标识构建端口映射信息,然后将构建好的句柄映射信息和端口映射信息载入内核中,以使后续进行通信数据包的传输时,基于内核中载入的句柄映射信息和端口映射信息确定对端套接字句柄,基于内核中载入的数据传输逻辑进行数据传输。
可选的,可以根据应用场景确定映射信息的构建方式。当本实施例提供的数据传输方法应用于调用端时,用于业务模块向通信模块的数据传输,因此,需要构建通信端口映射信息和通信句柄映射信息。具体的,将通信端口标识作为key,设定的第一索引值作为value构建通信端口映射信息,将设定的第一索引值作为key,将通信套接字句柄作为value,构建通信句柄映射信息。当本实施例提供的数据传输方法应用于服务端时,用于业务模块向业务模块的数据传输,因此,需要构建业务端口映射信息和业务句柄映射信息。具体的,将业务端口标识作为key,设定的第二索引值作为value构建业务端口映射信息,将设定的第二索引值作为key,将业务套接字句柄作为value,构建业务句柄映射信息。
实施例二
图2是本发明实施例二所提供的一种数据传输方法的流程图。本实施例在上述方案的基础上,进行了进一步优化。如图2所示,所述方法包括:
S210、获取待处理通信数据包。
本实施例提供的数据传输方法应用于调用端。待处理通信数据包为调用端的业务模块需要传输至调用端的通信模块的通信数据包。示例性的,待处理通信数据包可以为调用端所配置的计算机设备内核传入的skb数据结构。
S220、通过预先加载的数据传输逻辑获取待处理通信数据包中包含的通信端口标识。
当本实施例提供的数据传输方法应用于调用端时,实现调用端业务模块向通信模块的数据传输,则对端端口标识为通信端口标识。可选的,可以通过预先加载的数据传输逻辑对待处理通信数据包进行解析,获得待处理通信数据包的中包含的通信端口标识作为对端端口标识。示例性的,可以对skb数据结构进行解析,将得到的remote_port的值作为对端端口标识。
S230、将通信端口标识作为第一目标键值,获取通信端口映射信息中第一目标键值对应的第一索引值作为对端索引值。
在本实施例中,当对端端口标识为业务端口标识时,将业务端口映射信息作为对端端口映射信息。在得到业务端口标识后,将业务端口标识作为第一目标键值,利用预先设定的函数获取业务端口映射信息中第一目标键值对应的存储数据作为第一索引值,即对端索引值。仍以上文为例,可以以remote_port为key,利用bpf_map_lookup_elem函数,在业务端口映射信息中查找key对应的value值作为对端索引值。
S240、将第一索引值作为第二目标键值,获取通信索引映射信息中第二目标键值对应的通信套接字句柄作为对端套接字句柄。
在本实施例中,当对端端口标识为通信端口标识时,需要实现业务模块向通信模块的数据传输,因此对端套接字句柄为通信套接字句柄,基于此,将通信句柄映射信息作为对端句柄映射信息。在确定对端索引值后,将对端索引值作为第二目标键值利用预先设定的函数获取通信句柄映射信息中第二目标键值对应的存储数据作为对端套接字句柄。仍以上文为例,可以以S230中查找到的value为key,利用bpf_map_lookup_elem函数,在通信句柄映射信息中查找key对应的value值作为对端套接字句柄。
S250、根据对端套接字句柄将待处理通信数据包进行传输。
在确定对端套接字句柄后,将对端套接字句柄作为key,通过预设传输函数完成待处理通信数据包的转发,将业务模块发出的待处理通信数据包转发至通信模块。示例性的,可以通过bpf_sk_redirect_map实现待处理通信数据包的转发。
本发明实施例将对端端口标识具体化为通信端口标识,将对端套接字句柄具体化为通信套接字句柄,通过将通信端口标识作为第一目标键值,获取通信端口映射信息中第一目标键值对应的第一索引值作为对端索引值;将第一索引值作为第二目标键值,获取通信句柄映射信息中第二目标键值对应的通信套接字句柄作为对端套接字句柄,实现了直接基于通信模块的套接字句柄进行数据的传输,减少了调用端业务模块与通信模块的数据传输过程中的环节,提高了调用端流量劫持的效率。
实施例三
图3是本发明实施例三所提供的一种数据传输方法的流程图。本实施例在上述方案的基础上,进行了进一步优化。如图3所示,所述方法包括:
S310、获取待处理通信数据包。
本实施例提供的数据传输方法应用于服务端。待处理通信数据包为服务端的通信模块需要传输至服务端的业务模块的通信数据包。示例性的,待处理通信数据包可以为服务端所配置的计算机设备内核传入的skb数据结构。
S320、通过预先加载的数据传输逻辑获取待处理通信数据包对应的业务端口标识。
当本实施例提供的数据传输方法应用于服务端时,实现服务端通信模块向业务模块的数据传输,则对端端口标识为业务端口标识。可选的,可以通过预先加载的数据传输逻辑对待处理通信数据包进行解析,获得发送待处理通信数据包中包含的业务端口标识作为对端端口标识。
S330、将业务端口标识作为第三目标键值,获取业务端口映射信息中第三目标键值对应的第二索引值作为对端索引值。
在本实施例中,当对端端口标识为业务端口标识时,将业务端口映射信息作为对端端口映射信息。在得到业务端口标识后,将业务端口标识作为第三目标键值,利用预先设定的函数获取业务索引映射信息中第三目标键值对应的存储数据作为第二索引值,即对端索引值。
S340、将第二索引值作为第四目标键值,获取业务句柄映射信息中第四目标键值对应的业务套接字句柄作为对端套接字句柄。
在本实施例中,当对端端口标识为业务端口标识时,需要实现通信模块向业务模块的数据传输,因此对端套接字句柄为业务套接字句柄,基于此,将业务句柄映射信息作为对端句柄映射信息。在确定对端索引值后,将对端索引值作为第四目标键值利用预先设定的函数获取业务句柄映射信息中第四目标键值对应的存储数据作为对端套接字句柄。
S350、根据对端套接字句柄将待处理通信数据包进行传输。
在确定对端套接字句柄后,将对端套接字句柄作为key,通过预设传输函数完成待处理通信数据包的转发,将通信模块发出的待处理通信数据包转发至业务模块。
本发明实施例将对端端口标识具体化为业务端口标识,将对端套接字句柄具体化为业务套接字句柄,通过将业务端口标识作为第三目标键值,获取业务端口映射信息中第三目标键值对应的第二索引值作为对端索引值;将第二索引值作为第四目标键值,获取业务句柄映射信息中第四目标键值对应的业务套接字句柄作为对端套接字句柄,实现了直接基于业务模块的套接字句柄进行数据的传输,减少了服务端通信模块与业务模块的数据传输过程中的环节,提高了服务端流量劫持的效率。
实施例四
图4a是本发明实施例四所提供的一种数据传输方法的传输示意图。本实施例在上述实施例的基础上,提供了一种优选实施例。
在本实施例中,将业务模块具体化为业务逻辑,将通信模块具体化为数据面Proxy。如图4a所示,调用端实例和服务端实例中均包含在操作系统层执行的eBPF/socketmap,以实现业务逻辑与Proxy之间的数据转发。eBPF是Linux内核支持的一种机制,对Linux内核中的数据路径提供了Hook机制,其中包括对网络数据包的流经路径的Hook机制。现有技术中Netfilter的Hook点紧紧围绕着内核的TCP/IP协议栈展开,因此一旦数据包到达TCP/IP协议栈就必须按照既定流程一步步地流转,而eBPF的Hook点要比Netfilter的更加外延,完全将Netfilter的Hook点包裹在里面,因此更加靠近上层应用的Socket层和底层设备层,使得数据传输时能够绕过TCP/IP协议栈。并且eBPF提供的sockmap机制提供了在两个socket之间直接进行流量转发的实现方式,不仅避免了数据包在内核态和用户态之间的多次拷贝,而且也完美绕过了TCP/IP协议栈,极大地提高了流量劫持的效率。本发明实施例利用eBPF的上述特性来完成流量劫持。参考图4a,利用eBPF完成流量劫持的过程为:在调用端实例中调用端发出的请求socket直接经过eBPF/sockmap到达数据面Proxy,而在服务端实例中数据面Proxy经过eBPF/sockmap直接把请求socket发给了服务端,两边的数据面Proxy通过正常的TCP/IP协议完成远程通信。相比现有技术中基于Iptables实现的流量劫持,减少了数据流转的环节和数据复制,提高了流量劫持的效率。
图4b是本发明实施例四所提供的一种数据传输系统的系统架构图。图4b中,“控制器”程序用于设置eBPF相关的映射信息,“sockmap程序”基于eBPF框架的API进行开发。“eBPF框架”是内置于Linux内核的机制,“eBPF k/v存储”是eBPF框架提供的一种基于“键/值”对的内存数据库,用来存储一些“键/值”对数据,存储的“键/值”对数据用于供eBPF程序(比如sockmap程序)所使用。
其中,eBPF相关的映射信息包括两种映射信息:端口映射信息(portmap)和句柄映射信息(socketmap)。portmap的Key为port值,为业务逻辑或Proxy对应的端口,为正整数,Value为index值,为socketmap的key值,从0开始依次递增,为大于等于0的整数;socketmap的Key为index值,Value为socket fd,为Proxy或业务逻辑的socket对象的fd句柄,为正整数。
在服务网格技术中,Proxy在固定端口进行监听,如Envoy的固定端口为15001。服务端也监听在固定端口上,如9080;而对于调用端,可以给其一个固定端口,如4321,针对固定端口利用操作系统提供的socket的API生成socket fd。上述映射信息需要预先定义在“控制器”程序中,然后通过eBPF框架提供的诸如bpf_map_update_elem的API写到“eBPF k/v存储”中。显而易见的,portmap和socketmap是关联的,即portmap的value为socketmap的key,因此通过portmap和socketmap即可实现根据port找到对应的socket对象。
控制器程序的逻辑基于加载的sockmap程序实现。控制器用于设置portmap和socketmap两种映射信息,同时将sockmap程序注入到内核中。假设控制器程序编译生成的二进制可执行文件为ctrl,其启动方式可以为:ctrl<ip><业务逻辑的端口><ip><Proxy的端口>。示例性的,以调用端为例:ctrl 127.0.0.1 4321 127.0.0.1 15001。
具体的,当系统启动时,“控制器”将“sockmap程序”注入内核,并设置eBPF相关的映射信息(端口映射信息和句柄映射信息),将映射信息载入内核中的“eBPF k/v存储”后,检测是否有新的通信数据包,当有新的通信数据包时,基于载入的数据传输逻辑以及映射信息完成“业务逻辑”与“Proxy”间的流量转发。
图4c是本发明实施例四所提供的一种映射信息构建示意图。如图4c所示,内核获取业务逻辑的ip/port信息作为ip1/port1,获取Proxy的ip/port信息作为ip2/port2;然后利用bpf_prog_load_xattr将sockmap程序注入到内核中;利用ip1/port1创建业务逻辑的socket对象,得到socket_fd1;利用ip2/port2创建Proxy的socket对象,得到socket_fd2;然后利用bpf_map_update_elem函数,使用socket_fd构造业务逻辑和Proxy的socketmap,利用bpf_map_update_elem函数,使用port构造业务逻辑和Proxy的portmap,得到两个映射信息。
图4d是本发明实施例四所提供的一种数据传输逻辑示意图。如图4d所示,获取内核传入的skb数据结构后,对skb数据结构进行解析,得到remote_port的值,并将remote_port作为key,利用bpf_map_lookup_elem函数在portmap中查找对应的value;当value为空时,将skb数据放行通过,当value不为空时,以value为key,利用bpf_sk_redirece_map将skb数据进行转发。具体的,在bpf_sk_redirect_map中,首先将value作为key从socketmap中得到对端的socket对象,然后就可以直接把数据转发给对端的socket对象,整个过程完全在内核中完成且绕过了TCP/IP协议栈。
本实施例利用eBPF技术提供的sockmap机制,实现了socket之间的数据直接传输,减少了流量劫持的环节,避免了数据包在内核态和用户态的多次复制,提升了数据劫持的效率。
实施例五
图5是本发明实施例五所提供的一种数据传输装置的结构示意图。该数据传输装置可以采用软件和/或硬件的方式实现,例如该数据传输装置可以配置于计算机设备中。如图5所示,所述装置包括通信数据获取模块510、对端句柄确定模块520和通信数据传输模块530,其中:
通信数据获取模块510,用于获取待处理通信数据包;
对端句柄确定模块520,用于通过预先加载的数据传输逻辑获取待处理通信数据包中包含的对端端口标识,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,其中,数据传输逻辑基于eBPF框架实现;
通信数据传输模块530,用于根据对端套接字句柄将待处理通信数据包进行传输。
本发明实施例通过通信数据获取模块获取待处理通信数据包;对端句柄确定模块通过预先加载的数据传输逻辑获取待处理通信数据包中包含的对端端口标识,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,其中,数据传输逻辑基于eBPF框架实现;通信数据传输模块将待处理通信数据包传输至对端套接字句柄对应的对端端口,通过基于eBPF实现服务网格技术中的流量劫持,直接基于对端套接字句柄将待处理通信数据包进行传输,减少了数据传输过程中的环节,提高了流量劫持的效率,进而提高了系统性能。
可选的,在上述方案的基础上,对端句柄确定模块520具体用于:
根据对端端口标识以及对端端口映射信息确定对端端口标识对应的对端索引值;
根据对端索引值以及对端句柄映射信息确定对端套接字句柄。
可选的,在上述方案的基础上,对端端口标识为业务端口标识,对端套接字句柄为业务套接字句柄。
可选的,在上述方案的基础上,对端端口映射信息为业务端口映射信息,对端句柄映射信息为业务句柄映射信息,对端句柄确定模块520具体用于:
将业务端口标识作为第一目标键值,获取业务端口映射信息中第一目标键值对应的第一索引值作为对端索引值;
将第一索引值作为第二目标键值,获取业务句柄映射信息中第二目标键值对应的业务套接字句柄作为对端套接字句柄。
可选的,在上述方案的基础上,对端端口标识为通信端口标识,对端套接字句柄为通信套接字句柄。
可选的,在上述方案的基础上,对端端口映射信息为通信端口映射信息,对端句柄映射信息为通信句柄映射信息,对端句柄确定模块520具体用于:
将通信端口标识作为第三目标键值,获取通信端口映射信息中第三目标键值对应的第二索引值作为对端索引值;
将第二索引值作为第四目标键值,获取通信句柄映射信息中第四目标键值对应的通信套接字句柄作为对端套接字句柄。
可选的,在上述方案的基础上,还包括映射信息构建模块,用于:
当系统启动时,将数据传输逻辑载入内核中;
基于通信端口标识构建通信端口映射信息;根据业务端口标识创建业务模块的业务套接字对象,获取业务套接字对象的业务套接字句柄,并基于业务套接字句柄构建业务句柄映射信息;和/或,基于业务端口标识构建业务端口映射信息;根据通信端口标识创建通信模块的通信套接字对象,获取通信套接字对象的通信套接字句柄,并基于通信套接字句柄构建通信句柄映射信息。
本发明实施例所提供的数据传输装置可执行本发明任意实施例所提供的数据传输方法,具备执行方法相应的功能模块和有益效果。
实施例六
图6是本发明实施例六所提供的一种计算机设备的结构示意图。图6示出了适于用来实现本发明实施方式的示例性计算机设备612的框图。图6显示的计算机设备612仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,计算机设备612以通用计算设备的形式表现。计算机设备612的组件可以包括但不限于:一个或者多个处理器616,系统存储器628,连接不同系统组件(包括系统存储器628和处理器616)的总线618。
总线618表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器616或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备612典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备612访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器628可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)630和/或高速缓存存储器632。计算机设备612可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储装置634可以用于读写不可移动的、非易失性磁介质(图6未显示,通常称为“硬盘驱动器”)。尽管图6中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线618相连。存储器628可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块642的程序/实用工具640,可以存储在例如存储器628中,这样的程序模块642包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块642通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备612也可以与一个或多个外部设备614(例如键盘、指向设备、显示器624等)通信,还可与一个或者多个使得用户能与该计算机设备612交互的设备通信,和/或与使得该计算机设备612能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口622进行。并且,计算机设备612还可以通过网络适配器620与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器620通过总线618与计算机设备612的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备612使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理器616通过运行存储在系统存储器628中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的数据传输方法,该方法包括:
获取待处理通信数据包;
通过预先加载的数据传输逻辑获取待处理通信数据包中包含的对端端口标识,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,其中,数据传输逻辑基于eBPF框架实现;
根据对端套接字句柄将待处理通信数据包进行传输。
当然,本领域技术人员可以理解,处理器还可以实现本发明任意实施例所提供的数据传输方法的技术方案。
实施例七
本发明实施例七还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明实施例所提供的数据传输方法,该方法包括:
获取待处理通信数据包;
通过预先加载的数据传输逻辑获取待处理通信数据包中包含的对端端口标识,根据对端端口标识确定待处理通信数据包对应的对端套接字句柄,其中,数据传输逻辑基于eBPF框架实现;
根据对端套接字句柄将待处理通信数据包进行传输。
当然,本发明实施例所提供的一种计算机可读存储介质,其上存储的计算机程序不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的数据传输方法的相关操作。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种数据传输方法,其特征在于,包括:
获取待处理通信数据包;
通过预先加载的数据传输逻辑获取所述待处理通信数据包中包含的对端端口标识,根据所述对端端口标识确定所述待处理通信数据包对应的对端套接字句柄,其中,所述数据传输逻辑基于eBPF框架实现;
根据所述对端套接字句柄将所述待处理通信数据包进行传输。
2.根据权利要求1所述的方法,其特征在于,所述根据所述对端端口标识确定所述待处理通信数据包对应的对端套接字句柄,包括:
根据所述对端端口标识以及对端端口映射信息确定所述对端端口标识对应的对端索引值;
根据所述对端索引值以及对端句柄映射信息确定所述对端套接字句柄。
3.根据权利要求2所述的方法,其特征在于,所述对端端口标识为业务端口标识,所述对端套接字句柄为业务套接字句柄。
4.根据权利要求3所述的方法,其特征在于,所述对端端口映射信息为业务端口映射信息,所述对端句柄映射信息为业务句柄映射信息,所述根据所述对端端口标识以及对端端口映射信息确定所述对端端口标识对应的对端索引值;根据所述对端索引值以及对端句柄映射信息确定所述对端套接字句柄,包括:
将所述业务端口标识作为第一目标键值,获取所述业务端口映射信息中所述第一目标键值对应的第一索引值作为所述对端索引值;
将所述第一索引值作为第二目标键值,获取所述业务句柄映射信息中所述第二目标键值对应的业务套接字句柄作为所述对端套接字句柄。
5.根据权利要求2所述的方法,其特征在于,所述对端端口标识为通信端口标识,所述对端套接字句柄为通信套接字句柄。
6.根据权利要求5所述的方法,其特征在于,对端端口映射信息为通信端口映射信息,所述对端句柄映射信息为通信句柄映射信息,所述根据所述对端端口标识以及对端端口映射信息确定所述对端端口标识对应的对端索引值;根据所述对端索引值以及对端句柄映射信息确定所述对端套接字句柄,包括:
将所述通信端口标识作为第三目标键值,获取所述通信端口映射信息中所述第三目标键值对应的第二索引值作为所述对端索引值;
将所述第二索引值作为第四目标键值,获取所述通信句柄映射信息中所述第四目标键值对应的通信套接字句柄作为所述对端套接字句柄。
7.根据权利要求1所述的方法,其特征在于,在待处理通信数据包之前,还包括:
当系统启动时,将数据传输逻辑载入内核中;
基于通信端口标识构建通信端口映射信息;根据业务端口标识创建业务模块的业务套接字对象,获取所述业务套接字对象的业务套接字句柄,基于所述业务套接字句柄构建业务句柄映射信息,并将所述通信端口映射信息和所述业务句柄映射信息加载入内核中;和/或,基于所述业务端口标识构建业务端口映射信息;根据通信端口标识创建通信模块的通信套接字对象,获取所述通信套接字对象的通信套接字句柄,基于所述通信套接字句柄构建通信句柄映射信息,并将所述业务端口映射信息和所述通信句柄映射信息加载入内核中。
8.一种数据传输装置,其特征在于,包括:
通信数据获取模块,用于获取待处理通信数据包;
对端句柄确定模块,用于通过预先加载的数据传输逻辑获取所述待处理通信数据包中包含的对端端口标识,根据所述对端端口标识确定所述待处理通信数据包对应的对端套接字句柄,其中,所述数据传输逻辑基于eBPF框架实现;
通信数据传输模块,用于根据所述对端套接字句柄将所述待处理通信数据包进行传输。
9.一种计算机设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的数据传输方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的数据传输方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010808395.3A CN113765867B (zh) | 2020-08-12 | 2020-08-12 | 一种数据传输方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010808395.3A CN113765867B (zh) | 2020-08-12 | 2020-08-12 | 一种数据传输方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113765867A true CN113765867A (zh) | 2021-12-07 |
CN113765867B CN113765867B (zh) | 2023-05-12 |
Family
ID=78785653
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010808395.3A Active CN113765867B (zh) | 2020-08-12 | 2020-08-12 | 一种数据传输方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113765867B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114979277A (zh) * | 2022-05-23 | 2022-08-30 | 江苏保旺达软件技术有限公司 | 网络请求的转发方法、装置、计算机设备以及存储介质 |
CN115118791A (zh) * | 2022-05-20 | 2022-09-27 | 网宿科技股份有限公司 | Udp报文的分发方法、设备及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108900503A (zh) * | 2018-06-27 | 2018-11-27 | 努比亚技术有限公司 | 数据通信方法、通信处理设备、终端及可读存储介质 |
US20190317846A1 (en) * | 2016-12-30 | 2019-10-17 | Huawei Technologies Co., Ltd. | Application interaction method, apparatus, and system, and physical machine |
WO2020015838A1 (en) * | 2018-07-20 | 2020-01-23 | Nokia Solutions And Networks Oy | Zero trust perimeterization for microservices |
CN110971482A (zh) * | 2019-11-05 | 2020-04-07 | 北京字节跳动网络技术有限公司 | 基于ebpf的后端服务器检测方法、装置及电子设备 |
-
2020
- 2020-08-12 CN CN202010808395.3A patent/CN113765867B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190317846A1 (en) * | 2016-12-30 | 2019-10-17 | Huawei Technologies Co., Ltd. | Application interaction method, apparatus, and system, and physical machine |
CN108900503A (zh) * | 2018-06-27 | 2018-11-27 | 努比亚技术有限公司 | 数据通信方法、通信处理设备、终端及可读存储介质 |
WO2020015838A1 (en) * | 2018-07-20 | 2020-01-23 | Nokia Solutions And Networks Oy | Zero trust perimeterization for microservices |
CN110971482A (zh) * | 2019-11-05 | 2020-04-07 | 北京字节跳动网络技术有限公司 | 基于ebpf的后端服务器检测方法、装置及电子设备 |
Non-Patent Citations (1)
Title |
---|
CYRAL: ""How to use eBPF for accelerating Cloud Native applications"", 《HTTPS://CYRAL.COM/BLOG/HOW-TO-EBPF-ACCELERATING-CLOUD-NATIVE/》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115118791A (zh) * | 2022-05-20 | 2022-09-27 | 网宿科技股份有限公司 | Udp报文的分发方法、设备及可读存储介质 |
CN115118791B (zh) * | 2022-05-20 | 2023-09-22 | 网宿科技股份有限公司 | Udp报文的分发方法、设备及可读存储介质 |
WO2023221990A1 (zh) * | 2022-05-20 | 2023-11-23 | 网宿科技股份有限公司 | Udp报文的分发方法、设备及可读存储介质 |
CN114979277A (zh) * | 2022-05-23 | 2022-08-30 | 江苏保旺达软件技术有限公司 | 网络请求的转发方法、装置、计算机设备以及存储介质 |
CN114979277B (zh) * | 2022-05-23 | 2024-03-05 | 江苏保旺达软件技术有限公司 | 网络请求的转发方法、装置、计算机设备以及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113765867B (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110708393B (zh) | 用于传输数据的方法、装置和系统 | |
CN109547580B (zh) | 一种处理数据报文的方法和装置 | |
CN111131037B (zh) | 基于虚拟网关的数据传输方法、装置、介质与电子设备 | |
US8544025B2 (en) | Efficient data transfer on local network connections using a pseudo socket layer | |
WO2023005773A1 (zh) | 基于远程直接数据存储的报文转发方法、装置、网卡及设备 | |
CN111510478B (zh) | 请求处理方法、装置、系统及电子设备 | |
US10348516B2 (en) | On-premise and off-premise communication | |
CN112261094A (zh) | 一种报文处理方法及代理服务器 | |
CN110177047B (zh) | 报文发送方法、装置、电子设备和计算机可读存储介质 | |
US20190387051A1 (en) | Method, device and computer program product for managing network system | |
CN113765867B (zh) | 一种数据传输方法、装置、设备及存储介质 | |
CN114518969A (zh) | 进程间通信方法、系统、存储介质和计算机设备 | |
US10462265B2 (en) | On-demand startup of offline servers and connection routing | |
CN115589383A (zh) | 基于eBPF的虚拟机数据传输方法、装置、设备及存储介质 | |
CN115297164A (zh) | 网络代理方法、装置、电子设备及计算机可读存储介质 | |
WO2018107433A1 (zh) | 信息处理方法和装置 | |
CN114938395A (zh) | 服务响应方法、装置、设备及存储介质 | |
CN108595574B (zh) | 数据库集群的连接方法、装置、设备及存储介质 | |
US11218559B2 (en) | Asymmetric networking proxy | |
US20190387052A1 (en) | Method, device and computer program product for transaction negotiation | |
CN116389599A (zh) | 网关服务请求的处理、云原生网关系统的管理方法及装置 | |
CN108848175B (zh) | 一种创建tcp连接的方法及装置 | |
CN114930776A (zh) | 混合网络环境中的流量镜像处理 | |
CN115361337B (zh) | 一种基于通信路由和星型网络的通信方法及系统 | |
CN111371723B (zh) | 一种在dpdk框架下实现pptp vpn网络隔离的方法和装置 |
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 |