一种基于F-Stack和Nginx实现动态代理的方法和系统技术方案

技术编号:29208036 阅读:14 留言:0更新日期:2021-07-10 00:44
本发明专利技术提供一种基于F

【技术实现步骤摘要】
一种基于F

Stack和Nginx实现动态代理的方法和系统


[0001]本专利技术涉及互联网通信
,尤其涉及一种基于F

Stack和Nginx实现动态代理的方法和系统。

技术介绍

[0002]传统Linux 内核ALG方式支持SIP、FTP、RTSP协议代理,但由于kernel本身实现机制的锁\中断\上下文切换等导致性能低下,不适合大并发、高吞吐应用场景。
[0003]DPDK采用大页、ring无锁队列、轮询方式数据包处理,以及网卡多队列结合多核等提升数据包转发性能,但其没有对TCP/IP协议栈提供支持。而开源的F

Stack集成了DPDK和用户态协议栈FreeBSD以及Nginx等,方便用户实现自身业务逻辑。另外SIP、FTP、RTSP协议的共同点是由信令协议和数据协议组成,信令中协商数据传输使用IP+Port,数据传输时使用信令中协商的IP+Port通信。基于上述,亟需一种新的代理方案,以实现SIP、FTP、RTSP等协议的代理功能,且能满足大并发、高吞吐应用场景。

技术实现思路

[0004]针对传统Linux 内核ALG方式不适合大并发、高吞吐应用场景的问题,本专利技术提供一种基于F

Stack和Nginx实现动态代理的方法和系统。
[0005]一方面,本专利技术提供一种基于F

Stack和Nginx实现动态代理的方法,包括:步骤1:接收数据包,将所述数据包放到网卡的对应队列上;所述数据包包括来自客户端的请求数据包和来自服务端的响应数据包;步骤2:针对队列上的每个数据包,使所述数据包先经过ipfw机制的hook函数处理,根据所述数据包中五元组信息查找是否存在连接跟踪表:如果存在所述连接跟踪表,则按照代理规则改写所述数据包中的源地址和目的地址;如果不存在所述连接跟踪表,则按照代理规则新建连接跟踪表,以使处理后续数据包查找连接跟踪表时所用;步骤3:将改写源地址和目的地址成功的数据包交由FreeBSD协议栈处理;并进一步判断数据包是否交由Nginx处理,具体为:将匹配到Nginx侦听地址vip+vport的数据包交由Nginx处理,Nginx处理完毕后的数据包再次交由FreeBSD协议栈转发;对于数据协议的数据包,无需交由Nginx处理,直接由FreeBSD协议栈做路由查找转发处理。
[0006]进一步地,在步骤2之前还包括:采用共享内存方式将所述代理规则下发给所有worker进程;对应的worker进程收到客户端或服务端的数据协议的数据包时,按照所述代理规则改写所述数据包中源地址和目的地址后再交由FreeBSD协议栈做转发处理。
[0007]进一步地,还包括:步骤A1:预设服务端查看视频时的视频查看信令数据包携带的媒体接收地址为serip+recv_media_port;步骤A2:Nginx改写服务端发送的视频查看信令数据包中媒体接收地址为vip+
recv_media_vport,并将其转发给客户端;步骤A3:客户端响应200

OK信令中携带客户端的推流地址cip+push_media_port;步骤A4:Nginx改写客户端响应200

OK信令中媒体推流地址为lip+push_media_lport,同时采用共享内存方式下发代理规则给所有worker进程。
[0008]进一步地,所述步骤A4下发的代理规则中,媒体侦听地址为:vip+recv_media_vport,客户端的推流地址为:cip+push_media_port,代理推流地址为:lip+push_media_lport,服务端的媒体接收地址为:serip+recv_media_port。
[0009]进一步地,推流地址push_media_lport的选择满足以下条件:RSS(cip+push_media_port

>vip+recv_media_vport)=RSS(cip+push_media_port

>serip+recv_media_port)。
[0010]进一步地,还包括:步骤B1:客户端推送视频流,且请求数据包中的源地址和目的地址为cip+push_media_port

>vip+recv_media_vport,将所述请求数据包交由某worker进程负责处理;步骤B2:所述请求数据包先由ipfw机制的hook函数处理,根据所述请求数据包中五元组信息查找是否存在连接跟踪表,如果存在连接跟踪表,则使用所述连接跟踪表中的缓存信息改写所述请求数据包中的源地址和目的地址;步骤B3:判断所述请求数据包的目的地址是否匹配代理规则中的媒体侦听地址,如果匹配,则认为所述请求数据包需执行以下代理规则:媒体侦听地址:vip+recv_media_vport,客户端的推流地址:cip+push_media_port,代理推流地址:lip+push_media_lport,服务端的媒体接收地址:serip+recv_media_port;步骤B4:按照步骤B3中的代理规则改写客户端数据协议请求数据包中的源地址和目的地址,其中,源地址改为:lip+push_media_lport,目的地址改为:serip+recv_media_port,然后通过FreeBSD协议栈将改写后的客户端数据协议请求数据包路由转发给服务端。
[0011]进一步地,在所述步骤B2之后,所述方法还包括:步骤B5:如果不存在连接跟踪表,则新建正向连接跟踪表和反向连接跟踪表,其中,正向连接跟踪表为:key=(cip+push_media_port

>vip+recv_media_vport),正向连接跟踪表的缓存信息为:(lip+push_media_lport,serip+recv_media_port);反向连接跟踪表为:key=(serip+recv_media_port

>lip+push_media_lport),反向连接跟踪表的缓存信息为:(cip+push_media_port,vip+recv_media_vport);步骤B6:客户端继续推送视频流时,ipfw机制的hook函数中,根据请求数据包中五元组信息查找连接跟踪表,当命中正向连接跟踪表时,其缓存的信息为(lip+push_media_lport,serip+recv_media_port),根据缓存的信息改写请求数据包中源地址为:lip+push_media_lport,改写请求数据包中目的地址为:serip+recv_media_port,然后再通过FreeBSD协议栈将请求数据包路由转发给服务端。
[0012]进一步地,在所述步骤B4或步骤B6之后,还包括:步骤B7:服务端接收到请求数据包,根据业务需求回复响应数据包,所述响应数据包中的源地址和目的地址本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于F

Stack和Nginx实现动态代理的方法,其特征在于,包括:步骤1:接收数据包,将所述数据包放到网卡的对应队列上;所述数据包包括来自客户端的请求数据包和来自服务端的响应数据包;步骤2:针对队列上的每个数据包,使所述数据包先经过ipfw机制的hook函数处理,根据所述数据包中五元组信息查找是否存在连接跟踪表:如果存在所述连接跟踪表,则按照代理规则改写所述数据包中的源地址和目的地址;如果不存在所述连接跟踪表,则按照代理规则新建连接跟踪表,以使处理后续数据包查找连接跟踪表时所用;步骤3:将改写源地址和目的地址成功的数据包交由FreeBSD协议栈处理;并进一步判断数据包是否交由Nginx处理,具体为:将匹配到Nginx侦听地址vip+vport的数据包交由Nginx处理,Nginx处理完毕后的数据包再次交由FreeBSD协议栈转发;对于数据协议的数据包,无需交由Nginx处理,直接由FreeBSD协议栈做路由查找转发处理。2.根据权利要求1所述的方法,其特征在于,在步骤2之前还包括:采用共享内存方式将所述代理规则下发给所有worker进程;对应的worker进程收到客户端或服务端的数据协议的数据包时,按照所述代理规则改写所述数据包中源地址和目的地址后再交由FreeBSD协议栈做转发处理。3.根据权利要求1所述的方法,其特征在于,还包括:步骤A1:预设服务端查看视频时的视频查看信令数据包携带的媒体接收地址为serip+recv_media_port;步骤A2:Nginx改写服务端发送的视频查看信令数据包中媒体接收地址为vip+recv_media_vport,并将其转发给客户端;步骤A3:客户端响应200

OK信令中携带客户端的推流地址cip+push_media_port;步骤A4:Nginx改写客户端响应200

OK信令中媒体推流地址为lip+push_media_lport,同时采用共享内存方式下发代理规则给所有worker进程。4.根据权利要求3所述的方法,其特征在于,所述步骤A4下发的代理规则中,媒体侦听地址为:vip+recv_media_vport,客户端的推流地址为:cip+push_media_port,代理推流地址为:lip+push_media_lport,服务端的媒体接收地址为:serip+recv_media_port。5.根据权利要求3所述的方法,其特征在于,推流地址push_media_lport的选择满足以下条件:RSS(cip+push_media_port

>vip+recv_media_vport)=RSS(cip+push_media_port

>serip+recv_media_port)。6.根据权利要求1所述的方法,其特征在于,还包括:步骤B1:客户端推送视频流,且请求数据包中的源地址和目的地址为cip+push_media_port

>vip+recv_media_vport,将所述请求数据包交由某worker进程负责处理;步骤B2:所述请求数据包先由ipfw机制的hook函数处理,根据所述请求数据包中五元组信息查找是否存在连接跟踪表,如果存在连接跟踪表,则使用所述连接跟踪表中的缓存信息改写所述请求数据包中的源地址和目的地址;步骤B3:判断所述请求数据包的目的地址是否匹配代理规则中的媒体侦听地址,如果匹配,则认为所述请求数据包需执行以下代理规则:媒体侦听地址:vip+recv_media_vport,客户端的推流地址:cip+push_media_port,代理推流地址:lip+push_media_lport,
服务端的媒体接收地址:serip+recv_media_port;步骤B4:按照步骤B3中的代理规则改写客户端数据协议请求数据包中的源地址和目的地址,其中,...

【专利技术属性】
技术研发人员:王兵权马骥冀博李昭熹焦小涛
申请(专利权)人:郑州信大捷安信息技术股份有限公司
类型:发明
国别省市:

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

1