一种基于DPDK的ALG实现方法和系统技术方案

技术编号:28429609 阅读:31 留言:0更新日期:2021-05-11 18:39
本发明专利技术涉及一种基于DPDK的ALG实现方法和系统,方法包括在用户态Nginx程序配置一条控制反向代理,代理到服务端;将所述控制反向代理作为静态控制连接侦听地址,并通过客户端访问静态控制连接侦听地址;用户态Nginx程序与客户端断开连接,与服务端建立连接,用户态Nginx程序用于转发客户端与服务端之间的控制连接数据包;用户态Nginx程序基于DPDK+FreeBSD+Nginx架构,对所述控制连接数据包做协议解析改写以及相关控制动作;服务端推流至用户态Nginx程序动态媒体连接侦听地址,用户态Nginx程序使用本地媒体端口发送流媒体给客户端。本发明专利技术能够实现基于DPDK用户态协议栈层面的ALG功能,打通多通道协议的业务,满足ALG高并发大吞吐应用场景。

【技术实现步骤摘要】
一种基于DPDK的ALG实现方法和系统
本专利技术涉及互联网通信
,尤其涉及一种基于DPDK的ALG实现方法和系统。
技术介绍
普通NAT实现了对TCP或UDP报文头中的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多SIP、RTSP、FTP等,TCP/UDP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能导致业务不通。而NATALG技术能对应用层报文中的地址进行转换处理,从而保证应用层通信的正确性。传统的Linux内核ALG可以解决SIP、RTSP、FTP等协议经过nat设备时对其控制连接数据包中地址做ALG转换,但由于其基于Linux内核模块实现的,因此用户态程序无法对控制连接数据包做解析,进而做设备认证,访问控制等更丰富的功能。Linux内核中断处理、数据包经过协议栈处理时多次内存拷贝、以及锁的开销限制了设备并发吞吐。
技术实现思路
本专利技术为解决现有基于Linux内核ALG在进行处理时访问控制功能单一并且在数据包处理时其吞吐量受限的问题提供了一种基于DPDK的ALG实现方法和系统,运用基于DPDK+FreeBSD用户态协议栈+Nginx程序技术来实现ALG功能,Nginx程序作为反向代理终结连接,对控制连接数据包进行解析,继而实现ALG改写,设备认证,访问控制等功能,打通多通道协议业务,同时DPDK使用无锁技术、大页内存减少,cache-miss多核结合网卡多队列等方面优化,因此结合用户态协议栈可以满足ALG高并发大吞吐应用场景。一方面,本专利技术提供了一种基于DPDK的ALG实现方法,所述方法包括以下步骤:步骤1:用户态Nginx程序配置一条控制反向代理,代理到服务端;步骤2:将所述控制反向代理作为静态控制连接侦听地址,并通过客户端访问静态控制连接侦听地址;步骤3:用户态Nginx程序与客户端断开连接,与服务端建立连接,用户态Nginx程序用于转发客户端与服务端之间的控制连接数据包;步骤4:用户态Nginx程序基于DPDK+FreeBSD+Nginx架构,对所述控制连接数据包做协议解析改写以及相关控制动作;步骤5:服务端推流至用户态Nginx程序动态媒体连接侦听地址,用户态Nginx程序使用本地媒体端口发送流媒体给客户端。进一步地,所述方法还包括配置阶段:用户态Nginx程序接收客户端发送服务端的SETUP指令时,用户态Nginx程序将控制连接数据包中的媒体接收端口改写为动态媒体连接侦听端口,同时用户态Nginx程序下发动态媒体反向代理配置;用户态Nginx程序收到服务端发给客户端的关于所述SETUP指令的Reply指令时,用户态Nginx程序将控制连接数据包中的媒体发送端口改写为动态媒体连接的本地端口,同时用户态Nginx程序下发动态媒体反向代理配置。进一步地,步骤4所述DPDK+FreeBSD+Nginx架构包括用户态Nginx程序、FreeBSD用户态协议栈、多个CPU核心以及多个网卡,每个所述网卡包括多个网卡队列;所述用户态Nginx程序的一个worker进程对应绑定一个CPU核心,并负责处理所有网卡的对应网卡队列上的控制连接数据包;所述FreeBSD用户态协议栈通过协议栈路由转发从网卡队列上取出的控制连接数据包,并传输至用户态Nginx程序。进一步地,所述步骤2具体包括:步骤2.1:所述客户端发送控制连接数据包到达其中一个所述网卡队列后,从所述网卡队列上得到控制连接数据包,并传输至FreeBSD用户态协议栈进行处理;步骤2.2:判断所述控制连接数据包的目的地址是否为用户态Nginx程序侦听的地址;步骤2.3:若所述控制连接数据包的目的地址为用户态Nginx程序侦听的地址,用户态Nginx程序对控制连接数据包进行协议解析,并作为代理转发控制连接数据包给服务端。进一步地,所述方法还包括通信阶段:所述客户端连接服务端,客户端发送一个OPTIONS命令至服务端,并在收到服务端的回应后,客户端发送DESCRIBE命令查询媒体文件的SDP信息;所述服务端通过一个SDP描述回应客户端,所述SDP描述至少包括流数量、媒体类型信息;客户端对所述SDP描述进行分析,并对会话中的每一个流发送一个SETUP指令进行端口配置,完成客户端与服务端之间的流媒体连接建立;客户端发送一个PLAY命令,服务端开始传送流媒体数据,在播放过程中,客户端可向服务端发送PAUSE命令以控制流媒体的播放;客户端发送TERADOWN命令结束流媒体会话。进一步地,所述用户态Nginx程序支持对SIP、RTSP、FTP任意一种或几种协议类型的控制连接数据包进行解析并做ALG改写处理。进一步地,步骤4所述相关控制动作包括访问控制、格式校验以及客户端身份认证中的任意一种或几种。另一方面,本专利技术实施例提供一种基于DPDK的ALG实现系统,包括:客户端、DPDK网关以及服务端;所述客户端,用于访问所述服务端,并获取流媒体;所述DPDK网关基于DPDK+FreeBSD+Nginx架构,DPDK网关包括用户态Nginx程序,所述用户态Nginx程序用于配置一条控制反向代理,代理到服务端,将所述控制反向代理作为静态控制连接侦听地址,并通过客户端访问静态控制连接侦听地址,用户态Nginx程序与客户端断开连接,与服务端建立连接,用户态Nginx程序用于转发客户端与服务端之间的控制连接数据包,用户态Nginx程序基于DPDK+FreeBSD+Nginx架构,对所述控制连接数据包做协议解析改写以及相关控制动作,用户态Nginx程序使用本地媒体端口发送流媒体给客户端;所述服务端用于推流给用户态Nginx程序动态媒体连接侦听地址。进一步地,所述DPDK+FreeBSD+Nginx架构包括用户态Nginx程序、FreeBSD用户态协议栈、多个CPU核心以及多个网卡,每个所述网卡包括多个网卡队列;所述用户态Nginx程序的一个worker进程对应绑定一个CPU核心,并负责处理所有网卡的对应网卡队列上的控制连接数据包;所述FreeBSD用户态协议栈用于通过协议栈路由转发从网卡队列上取出的控制连接数据包,并传输至用户态Nginx程序,所述客户端发送控制连接数据包到达一个所述网卡队列后,从网卡队列上得到控制连接数据包,并传输至FreeBSD用户态协议栈进行处理,判断所述控制连接数据包的目的地址是否为用户态Nginx程序侦听的地址,若所述控制连接数据包的目的地址为用户态Nginx程序侦听的地址,用户态Nginx程序对控制连接数据包进行协议解析,并作为代理转发控制连接数据包给服务端。进一步地,所述用户态Nginx程序收到客户端发给服务端的SETUP指令时,改写控制连接数据包中的媒体接收端口为动态媒体连接侦听端口,同时用户态Nginx程序下发动态媒体反向代理配置;用户态Nginx本文档来自技高网...

【技术保护点】
1.一种基于DPDK的ALG实现方法,其特征在于,所述方法包括以下步骤:/n步骤1:用户态Nginx程序配置一条控制反向代理,代理到服务端;/n步骤2:将所述控制反向代理作为静态控制连接侦听地址,并通过客户端访问静态控制连接侦听地址;/n步骤3:用户态Nginx程序与客户端断开连接,与服务端建立连接,用户态Nginx程序用于转发客户端与服务端之间的控制连接数据包;/n步骤4:用户态Nginx程序基于DPDK+FreeBSD+Nginx架构,对所述控制连接数据包做协议解析改写以及相关控制动作;/n步骤5:服务端推流至用户态Nginx程序动态媒体连接侦听地址,用户态Nginx程序使用本地媒体端口发送流媒体给客户端。/n

【技术特征摘要】
1.一种基于DPDK的ALG实现方法,其特征在于,所述方法包括以下步骤:
步骤1:用户态Nginx程序配置一条控制反向代理,代理到服务端;
步骤2:将所述控制反向代理作为静态控制连接侦听地址,并通过客户端访问静态控制连接侦听地址;
步骤3:用户态Nginx程序与客户端断开连接,与服务端建立连接,用户态Nginx程序用于转发客户端与服务端之间的控制连接数据包;
步骤4:用户态Nginx程序基于DPDK+FreeBSD+Nginx架构,对所述控制连接数据包做协议解析改写以及相关控制动作;
步骤5:服务端推流至用户态Nginx程序动态媒体连接侦听地址,用户态Nginx程序使用本地媒体端口发送流媒体给客户端。


2.根据权利要求1所述的一种基于DPDK的ALG实现方法,其特征在于,所述方法还包括配置阶段:
用户态Nginx程序接收客户端发送服务端的SETUP指令时,用户态Nginx程序将控制连接数据包中的媒体接收端口改写为动态媒体连接侦听端口,同时用户态Nginx程序下发动态媒体反向代理配置;
用户态Nginx程序收到服务端发给客户端的关于所述SETUP指令的Reply指令时,用户态Nginx程序将控制连接数据包中的媒体发送端口改写为动态媒体连接的本地端口,同时用户态Nginx程序下发动态媒体反向代理配置。


3.根据权利要求1所述的一种基于DPDK的ALG实现方法,其特征在于,步骤4所述DPDK+FreeBSD+Nginx架构包括用户态Nginx程序、FreeBSD用户态协议栈、多个CPU核心以及多个网卡,每个所述网卡包括多个网卡队列;
所述用户态Nginx程序的一个worker进程对应绑定一个CPU核心,并负责处理所有网卡的对应网卡队列上的控制连接数据包;
所述FreeBSD用户态协议栈通过协议栈路由转发从网卡队列上取出的控制连接数据包,并传输至用户态Nginx程序。


4.根据权利要求3所述的一种基于DPDK的ALG实现方法,其特征在于,所述步骤2具体包括:
步骤2.1:所述客户端发送控制连接数据包到达其中一个所述网卡队列后,从所述网卡队列上得到控制连接数据包,并传输至FreeBSD用户态协议栈进行处理;
步骤2.2:判断所述控制连接数据包的目的地址是否为用户态Nginx程序侦听的地址;
步骤2.3:若所述控制连接数据包的目的地址为用户态Nginx程序侦听的地址,用户态Nginx程序对控制连接数据包进行协议解析,并作为代理转发控制连接数据包给服务端。


5.根据权利要求1所述的一种基于DPDK的ALG实现方法,其特征在于,所述方法还包括通信阶段:
所述客户端连接服务端,客户端发送一个OPTIONS命令至服务端,并在收到服务端的回应后,客户端发送DESCRIBE命令查询媒体文件的SDP信息;
所述服务端通过一个SDP描述回应客户端,所述SDP描述至少包括流数量、媒体类型信息;
客户端对所述SDP描述进行分析,并对会话中的每一个流发送一个SETUP指令进行端口配置,完成客户端与服务...

【专利技术属性】
技术研发人员:雷宇龙王兵权王博珏李昭熹王平王超
申请(专利权)人:郑州信大捷安信息技术股份有限公司
类型:发明
国别省市:河南;41

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

1