UDP数据包的传输方法、系统、介质和电子设备技术方案

技术编号:22105086 阅读:19 留言:0更新日期:2019-09-14 04:27
本发明专利技术提供一种UDP数据包的传输方法、系统、介质及电子设备。该方法包括:接收网卡发送的UDP包;通过钩子函数判别所述UDP包是否为特定数据包;当所述UDP包为特定数据包时,读取所述特定数据包的网络连接特征值;对所述网络连接特征值进行哈希运算,生成哈希值;在已存储的哈希表中查找与所述哈希值存在映射关系的结构体qcs_entry;当查找到与所述哈希值存在映射关系的结构体qcs_entry时,指定所述UDP包中的套接字为所述结构体qcs_entry中的目标套接字,以使Nginx服务器中监听所述目标套接字的进程处理所述UDP包。该方法通过网络连接特征值进行多进程网络服务器的包调度,使网络连接不再依赖于网络环境,能够适应客户端上复杂多变的网络环境。

UDP Data Packet Transmission Method, System, Media and Electronic Equipment

【技术实现步骤摘要】
UDP数据包的传输方法、系统、介质和电子设备
本专利技术涉及计算机网络
,具体而言,涉及一种UDP数据包的传输方法、系统、介质和电子设备。
技术介绍
QUIC(QuickUDPInternetConnection)是谷歌提出的基于UDP(UserDatagramProtocol,用户数据报协议)的支持多路复用、0-1RTT建联的互联网传输协议。也就是说,QUIC是一个应用层协议,只是在UDP基础上实现了可靠数据传输、拥塞控制、数据多路复用等TCP、HTTP2技术。对于一个QUIC服务,其在Nginx服务器不同进程上都有一个监听在同一服务端IP地址、端口上的套接字(Socket),从而需要将同一个QUIC连接的包调度到同一个进程处理。目前,Linux内核会根据套接字四元组调度UDP包,四元组包括源IP地址、源端口、目的IP地址及目的端口。然而,当客户端改变四元组时,如手机切换网络等,此时服务端不知道网络连接已断开,从而会导致同一客户端同一个QUIC连接的数据包无法调度到Nginx服务器中的同一个进程。因此,在长期的研发当中,专利技术人对UDP数据包在传输过程中的调度问题进行了大量的研究,提出了一种UDP数据包的传输方法,以解决上述技术问题之一。
技术实现思路
本专利技术的目的在于提供一种UDP数据包的传输方法、系统、介质和电子设备,能够解决上述提到的至少一个技术问题。具体方案如下:根据本专利技术的具体实施方式,第一方面,本专利技术提供一种UDP数据包的传输方法,包括:接收网卡驱动发送的UDP数据包;通过注册在内核层的钩子函数判别所述UDP数据包是否为特定数据包;当所述UDP数据包为特定数据包时,读取所述特定数据包的网络连接特征值;对所述网络连接特征值进行哈希运算,生成一哈希值;在当前已存储的哈希表中查找与所述哈希值存在映射关系的结构体qcs_entry;其中,所述结构体qcs_entry中存储有所述网络连接特征值及对应的目标套接字;当查找到与所述哈希值存在映射关系的结构体qcs_entry时,对当前所述UDP数据包进行调度,包括:指定当前所述UDP数据包中的套接字为所述结构体qcs_entry中的目标套接字,以使Nginx服务器中监听所述目标套接字的进程处理所述UDP数据包。根据本专利技术的具体实施方式,第二方面,本专利技术提供一种UDP数据包的传输系统,包括:接收模块,用于接收网卡驱动发送的UDP数据包;判别模块,用于通过注册在内核层的钩子函数判别所述UDP数据包是否为特定数据包;读取模块,用于当所述UDP数据包为特定数据包时,读取所述特定数据包的网络连接特征值;哈希模块,用于对所述网络连接特征值进行哈希运算,生成一哈希值;查找模块,用于在当前已存储的哈希表中查找与所述哈希值存在映射关系的结构体qcs_entry;其中,所述结构体qcs_entry中存储有所述网络连接特征值及对应的目标套接字;调度模块,用于当查找到与所述哈希值存在映射关系的结构体qcs_entry时,指定当前所述UDP数据包中的套接字为所述结构体qcs_entry中的目标套接字,以使Nginx服务器中监听所述目标套接字的进程处理所述UDP数据包。根据本专利技术的具体实施方式,第三方面,本专利技术提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上任一项所述的UDP数据包的传输方法。根据本专利技术的具体实施方式,第四方面,本专利技术提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上任一项所述的UDP数据包的传输方法。本专利技术实施例的上述方案与现有技术相比,至少具有以下有益效果:第一,对于应用层网络协议的服务端调度,通过网络连接特征值进行多进程网络服务器的包调度,使网络连接不再依赖于网络环境,能够适应客户端上复杂多变的网络环境;同时,也能够支持客户端的连接迁移;第二,通过建立哈希表,能够提高套接字的查找效率;第三,通过对网络连接特征值进行哈希的方式,将UDP数据包调度到Nginx服务器的目标进程上,能够提高调度均匀性。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本专利技术的实施例,并与说明书一起用于解释本专利技术的原理。显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:图1示出了根据本专利技术实施例的一种UDP数据包的传输方法的流程图;图2示出了根据本专利技术实施例的通过注册在内核层的钩子函数判别所述UDP数据包中的特定数据包的方法流程图;图3示出了根据本专利技术实施例的当在当前已存储的哈希表中未查找到与所述哈希值存在映射关系的结构体qcs_entry时,对当前所述UDP数据包进行调度的方法流程图;图4示出了根据本专利技术实施例的更新所述当前已存储的哈希表的方法流程图;图5示出了根据本专利技术实施例的一种UDP数据包的传输系统的结构示意图;图6示出了根据本专利技术的实施例的电子设备连接结构示意图。具体实施方式为了使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术作进一步地详细描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本专利技术保护的范围。在本专利技术实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本专利技术。在本专利技术实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。应当理解,尽管在本专利技术实施例中可能采用术语第一、第二、第三等来描述……,但这些……不应限于这些术语。这些术语仅用来将……区分开。例如,在不脱离本专利技术实施例范围的情况下,第一……也可以被称为第二……,类似地,第二……也可以被称为第一……。取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者装置中还存在另外的相同要素。下面结合附图详细说明本专利技术的可选实施例。实施例1本专利技术实施例提供一种UDP数据包的传输方法,该方法的执行主体为服务端,所述方法不仅可以应用于服务端的内核层,也可以应用于本文档来自技高网...

【技术保护点】
1.一种UDP数据包的传输方法,其特征在于,包括:接收网卡驱动发送的UDP数据包;通过注册在内核层的钩子函数判别所述UDP数据包是否为特定数据包;当所述UDP数据包为特定数据包时,读取所述特定数据包的网络连接特征值;对所述网络连接特征值进行哈希运算,生成一哈希值;在当前已存储的哈希表中查找与所述哈希值存在映射关系的结构体qcs_entry;其中,所述结构体qcs_entry中存储有所述网络连接特征值及对应的目标套接字;当查找到与所述哈希值存在映射关系的结构体qcs_entry时,对当前所述UDP数据包进行调度,包括:指定当前所述UDP数据包中的套接字为所述结构体qcs_entry中的目标套接字,以使Nginx服务器中监听所述目标套接字的进程处理所述UDP数据包。

【技术特征摘要】
1.一种UDP数据包的传输方法,其特征在于,包括:接收网卡驱动发送的UDP数据包;通过注册在内核层的钩子函数判别所述UDP数据包是否为特定数据包;当所述UDP数据包为特定数据包时,读取所述特定数据包的网络连接特征值;对所述网络连接特征值进行哈希运算,生成一哈希值;在当前已存储的哈希表中查找与所述哈希值存在映射关系的结构体qcs_entry;其中,所述结构体qcs_entry中存储有所述网络连接特征值及对应的目标套接字;当查找到与所述哈希值存在映射关系的结构体qcs_entry时,对当前所述UDP数据包进行调度,包括:指定当前所述UDP数据包中的套接字为所述结构体qcs_entry中的目标套接字,以使Nginx服务器中监听所述目标套接字的进程处理所述UDP数据包。2.根据权利要求1所述的方法,其特征在于,当所述特定数据包为QUIC数据包时,所述网络连接特征值为连接ID。3.根据权利要求1所述的方法,其特征在于,当所述特定数据包为DNS数据包时,所述网络连接特征值为转换ID。4.根据权利要求1所述的方法,其特征在于,所述通过注册在内核层的钩子函数判别所述UDP数据包是否为特定数据包,包括:读取所述UDP数据包的包头字段和包内容;判别所述包内容的第一个字节是否为特定字节;当所述包内容的第一个字节为特定字节时,则确定所述UDP数据包为特定数据包。5.根据权利要求1所述的方法,其特征在于,进一步包括,定期清理所述哈希表中的所述结构体qcs_entry。6.根据权利要求5所述的方法,其特征在于,所述定期清理所述哈希表中的结构体qcs_entry的方式,包括:在所述结构体qcs_entry中创建一设置有超时时间的超时器,当所述超时器到达设置的超时时间且当前网络连接未接收到新的UDP数据包时,删除所述结构体qcs_entry。7.根据权利要求1所述的方法,其特征在于,当在所述当前已存储的哈希表中未查找到与所述哈希值存在映射关系的结构体qcs_entry时...

【专利技术属性】
技术研发人员:肖逸凯曹志华
申请(专利权)人:北京字节跳动网络技术有限公司
类型:发明
国别省市:北京,11

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

1