CN103259880B - 一种netfilter框架下连接跟踪的优化方法 - Google Patents
一种netfilter框架下连接跟踪的优化方法 Download PDFInfo
- Publication number
- CN103259880B CN103259880B CN201310141745.5A CN201310141745A CN103259880B CN 103259880 B CN103259880 B CN 103259880B CN 201310141745 A CN201310141745 A CN 201310141745A CN 103259880 B CN103259880 B CN 103259880B
- Authority
- CN
- China
- Prior art keywords
- tracks
- connection
- followed
- follow
- connect
- 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
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种netfilter框架下连接跟踪的优化方法,包括:定义并初始化当前连接跟踪数M、最大连接跟踪数Mmax、当前已申请的连接跟踪数N、最大申请的连接跟踪数Nmax,Nmax>Mmax;在新申请连接跟踪时,N加1,判断M>Mmax,如果是,则进行老化处理后创建新的连接跟踪;如果否,则判断N>Nmax,若是则返回错误,若否则创建新的连接跟踪;在新申请的连接跟踪确认后,M加1,并将其加入已确认连接跟踪链表。本发明实施例保证了有效连接跟踪的数量;优化了异常处理;明确了连接跟踪在alloc初始化与confirm确认两个阶段的责任;保证了正常的上网,下载时速率好的资源也会很好的保留。
Description
技术领域
本发明涉及网络通信技术领域,特别是涉及一种netfilter框架下连接跟踪的优化方法。
背景技术
目前国内多数网络CPE(用户终端设备)的代码架构都是基于Linux,而netfilter也是与其标配的网络核心处理层。但是随着当前用户对网络的速度与质量要求的提高,netfilter本身代码开始显现问题,针对连接跟踪方面,主要表现为:
1)多用户BT下载时,用户无法正常上网;
2)多用户BT下载时,用户使用语音视频等业务质量明显下降或断开;
3)多用户BT下载时,用户或局方无法正常通过网络方式管理CPE;
4)网络CPE开发用户在netfilter架构下比较难处理大量发起新连接的异常问题。
连接跟踪用来跟踪和记录连接状态,是netfilter的一部分,也是通过在hook点(回调点)上注册相应的结构来工作的。
无论是发送、接收还是转发的数据包,都要经过两个conntrack(连接跟踪)点:
1)NF_IP_PRI_CONNTRACK(申请连接跟踪)
NF_IP_PRI_CONNTRACKconntrack点的优先级是最高的,所有数据包进入netfilter后都会首先被它处理,其作用是创建ip_conntrack结构;
2)NF_IP_PRI_CONNTRACK_CONFIRM(确认连接跟踪)
NF_IP_PRI_CONNTRACK_CONFIRMconntrack点的优先级最低,总是在数据包离开netfilter之前做最后的处理,它的作用之一是将该数据包的连接跟踪结构添加到***的连接跟踪链表中。
具体地,当前连接跟踪方式主要存在以下两方面的问题:
(一)nf_conntrack_count(当前连接跟踪数)的统计方式
nf_conntrack_count在alloc(申请)连接跟踪时添加,这将会减少有效连接跟踪的数量。如图1所示,因为有些已经申请了连接跟踪的数据包最后会被netfilter在处理流程中丢弃或遗忘,这将导致有效的连接跟踪数要小于nf_conntrack_max(最大连接跟踪数)限制,这也是为什么多数人反馈说“nf_conntrack_count的值不为0,但在/proc/net/nf_conntrack下看不到任何连接跟踪”的原因。
(二)nf_conntrack_count超过nf_conntrack_max限制时的老化机制
nf_conntrack_count超过nf_conntrack_max限制时的老化机制采用内核标准的early_drop方式,即对非IPS_ASSURED_BIT状态(即非确认状态)下的连接跟踪随机选择释放,具体方法如图2所示。这种随机选择释放方式已经不适应当前BT下载越来越普遍的实际环境,尤其是多网合一的推进,主要表现为:①通过网络管理网关的手段无法正常运行;②音频视频等实时流出现信号质量差、断流的情况;③正常的上网无法回应,下载时速率好的资源没有很好的保留。
发明内容
本发明的目的在于提供一种netfilter框架下连接跟踪的优化方法,通过优化连接跟踪数的统计方式,增大有效连接跟踪的数量。
本发明的目的是通过以下技术方案实现的。
一种netfilter框架下连接跟踪的优化方法,包括:
定义并初始化当前连接跟踪数M、最大连接跟踪数Mmax、当前已申请的连接跟踪数N、最大申请的连接跟踪数Nmax,Nmax>Mmax;
在新申请连接跟踪时,将当前已申请的连接跟踪数N的值加1,之后判断是否M>Mmax,如果是,则从已确认的连接跟踪中选择连接跟踪进行老化处理后为当前数据流创建新的连接跟踪;如果否,则判断是否N>Nmax,若是则不为当前数据流创建连接跟踪并返回错误,若否则为当前数据流创建新的连接跟踪并返回成功;
对于新申请的连接跟踪,判断其是否满足确认条件,若满足确认条件则将当前连接跟踪数M的值加1,并将该确认的连接跟踪加入已确认连接跟踪链表,对已确认连接跟踪链表中的连接跟踪依次进行协议栈后继处理。
上述方法中,在初始化阶段还包括:预设需保留的连接跟踪类型,并保留指定数量的空余连接跟踪用以属于需保留的连接跟踪类型的连接跟踪的创建;创建LRU链表,该LRU链表包含了满足所述确认条件且不属于需保留的连接跟踪类型的连接跟踪;
所述老化处理的步骤包括:
A、判断当前申请的连接跟踪是否属于需保留的连接跟踪类型,若是,则继续判断当前已申请的且属于需保留连接跟踪类型的连接跟踪数量是否超过指定数量,未超过时为当前数据流创建新的连接跟踪并返回成功,超过时执行步骤B;若否,执行步骤B;
B、判断LRU链表是否为空,若为空,则返回失败;若不为空,则选择其中一连接跟踪进行释放,之后为当前数据流创建新的连接跟踪并返回成功。
上述方法中,所述需保留的连接跟踪类型包括:与Linux本地交互数据流交互建立的连接跟踪、为RTSP、H323、SIP、组播类型的语音与视频建立的连接跟踪。
上述方法中,判断LRU链表的填充方法为:将新创建的确认过的连接跟踪作为节点依次加在LRU链表的尾部;
后续过程中,若LRU链表中连接跟踪有数据包传输,则该节点移至尾部。
上述方法中,所述步骤B中,选择LRU链表中第一个不为空的节点对应的连接跟踪进行释放。
上述方法中还包括释放连接跟踪的步骤,该步骤包括:
在释放连接跟踪时,将当前已申请的连接跟踪数N的值减1;如果当前释放的连接跟踪为已确认状态,将当前连接跟踪数M的值减1。
上述方法中,保留的空余连接跟踪的指定数量设置为100。
上述方法中,最大申请的连接跟踪数Nmax=最大连接跟踪数Mmax×2。
与现有技术相比,本发明实施例具有以下有益效果:
本发明实施例同时对优化连接跟踪数的统计方式和老化机制分别进行了优化,保证了有效连接跟踪的数量;优化了在内存方面连接跟踪的异常处理;明确了连接跟踪在alloc初始化与confirm确认两个阶段的责任,防止开发人员使用的混淆;保证了已有本地交互、视频音频连接跟踪不被挤出;保证了新创建的用于本地交互、视频音频的连接跟踪的优先性;保证了正常的上网,下载时速率好的资源也会很好的保留。
附图说明
图1是现有技术采用的对于当前连接跟踪数的统计方法流程图。
图2是现有技术采用的early_drop方式的老化处理流程图。
图3是本发明实施例提供的对于当前连接跟踪数的统计方法流程图。
图4是本发明实施例提供的base+LRU+reserve方式的老化处理流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
(一)当前连接跟踪数nf_conntrack_count统计方式的优化与改进:
如下表1所示,“nf_conntrack_count的增加统计从申请连接跟踪回调点改为申请连接跟踪回调点,并增加已申请数量限制”。
表1
连接跟踪数nf_conntrack_count统计方式 | 统计的改变 |
标准内核方式 | 申请连接跟踪回调点增加 |
改进与优化 | 申请连接跟踪回调点增加,并增加已申请数量限制 |
“已申请数量限制”处理的加入是为了防止内核本身对连接跟踪处理异常时(比如受到syn等网络攻击,比如IMQ队列的QOS应用带来的有效连接跟踪漏洞,比如大量连接跟踪的并发处理等)带来异常的内存消耗。
定义nf_conntrack_alloc_count为当前已申请的连接跟踪数、nf_conntrack_alloc_max为最大申请的连接跟踪数、nf_conntrack_count为当前连接跟踪数、nf_conntrack_max为最大连接跟踪数,nf_conntrack_alloc_max值的范围为>nf_conntrack_max,建议其值为(2*nf_conntrack_max),具体统计方法如图3所示,包括步骤:
301、有新的连接跟踪申请时,将nf_conntrack_alloc_count加1,之后比较nf_conntrack_count与nf_conntrack_max、nf_conntrack_alloc_count与nf_conntrack_alloc_max的大小关系并作相应处理。
该步骤中,具体处理方法为:
当nf_conntrack_count大于nf_conntrack_max时,从已确认的连接跟踪中选择连接跟踪进行老化处理后为当前数据流创建新的连接跟踪(具体如后文所述);
当nf_conntrack_count不大于nf_conntrack_max时:若nf_conntrack_alloc_count大于nf_conntrack_alloc_max,则不为当前数据流创建连接跟踪并返回错误;若nf_conntrack_alloc_count不大于nf_conntrack_alloc_max,为当前数据流创建新的连接跟踪并返回成功。
302、将当前申请的连接跟踪经过中间很多hooks点处理,该处理过程可能导致申请的连接跟踪丢弃或遗忘。
303、确认连接跟踪后,将nf_conntrack_count加1,并将该确认的连接跟踪加入连接跟踪链表,proc/net/nf_conntrack反映该链表的所有连接跟踪。
本实施例中,在释放连接跟踪时还需进行以下处理:
对于nf_conntrack_count:如果当前连接跟踪为confirm状态,将nf_conntrack_count减1;
对于nf_conntrack_alloc_count:将nf_conntrack_alloc_count减1。
与现有技术相比,本实施例提供的当前连接跟踪数的统计方式具有以下优点:
保证了有效连接跟踪的数量;优化了在内存方面连接跟踪的异常处理;明确了连接跟踪在alloc申请初始化与confirm确认两个阶段的责任,防止开发人员使用的混淆。
(二)nf_conntrack_count超过nf_conntrack_max限制时的老化机制的优化与改进:
如下表2所示,“nf_conntrack_count超过nf_conntrack_max限制时的老化机制从采用early_drop方式到采用base+LRU+reserve方式,以查找可以老化的连接跟踪进行释放”。
表2
连接跟踪数超过nf_conntrack_max限制老化机制 | 实现方式的改变 |
标准内核方式 | early_drop方式 |
改进与优化 | base+LRU+reserve方式 |
本实施例中,base+LRU+reserve方式包括:
(1)base:
因为总有一些连接跟踪是我们必须要保留下来让其正常老化的,所以本实施例中,将这一类连接跟踪定义为base类型的连接跟踪,主要包括以下几类:
①与Linux本地交互数据流交互建立的连接跟踪,主要为“知名端口+Linux本地业务拓展的服务端口+本地先发起”的连接跟踪;
②为RTSP、H323、SIP、组播等类型的语音与视频建立的连接跟踪。
(2)LRU(最近最少使用算法):
为了让连接跟踪为资源好的数据流服务,采用LRU方式查找可以老化的连接跟踪,这需要一个单独的链表来组织当前不属于base类型的那些连接跟踪,本实施例中定义该链表为LRU链表。
LRU链表的填充方法具体为:将新创建的confirm过的连接跟踪作为节点加在LRU链表尾部;后续对应的连接跟踪如果有数据包传输,则将对应节点移至LRU链表尾部。
待老化连接跟踪在LRU链表的查找方法为:查找当前LRU链表的第一个不为空的节点对应的连接跟踪。
(3)reserve:
本实施例中将保留指定数量(即reserve值)的空余连接跟踪用于base类型连接跟踪的创建,该值建议为100。
如图4所示,本实施例采用base+LRU+reserve方式实现的老化处理过程为:
401、判断nf_conntrack_count是否超过nf_conntrack_max,若否,则创建新的连接跟踪并返回成功;若是,则执行下一步。
402、判断nf_conntrack_alloc_count是否超过nf_conntrack_alloc_max,若是,则返回失败;若否,则执行下一步。
403、判断当前待申请的连接跟踪是否属于base类型连接跟踪,若是,则执行步骤404;若否,则执行步骤405.
404、判断当前待申请的连接跟踪数量是否超过reserve值,若是,则执行步骤405;若否,则创建新的连接跟踪并返回成功。
405、判断LRU链表是否为空,若为空,则返回失败;若不为空,则选择其中第一个不为空的节点对应的连接跟踪进行释放,之后创建新的连接跟踪并返回成功。
与现有的early_drop方式相比,本实施例中老化机制具有以下优点:
在连接跟踪已超限制的情况下,
1)保证了已有本地交互、视频音频连接跟踪不被挤出;
2)保证了新创建的用于本地交互、视频音频的连接跟踪的优先性;
3)保证了正常的上网,下载时速率好的资源也会很好的保留。
综上,本实施例采用的新的nf_conntrack_count统计方式和老化机制已解决了现有技术所存在的技术缺陷,但是对于一个速率被限制的设备,如果用户所请求的流量大于总速率,还需要与QOS等功能配合才能满足以上需求,由于本发明只涉及连接跟踪优化,这里不再累述。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种netfilter框架下连接跟踪的优化方法,其特征在于,该方法包括:定义并初始化当前连接跟踪数M、最大连接跟踪数Mmax、当前已申请的连接跟踪数N、最大申请的连接跟踪数Nmax,Nmax>Mmax;在新申请连接跟踪时,将当前已申请的连接跟踪数N的值加1,之后判断是否M>Mmax,如果是,则从已确认的连接跟踪中选择连接跟踪进行老化处理后为当前数据流创建新的连接跟踪;如果否,则判断是否N>Nmax,若是则不为当前数据流创建连接跟踪并返回错误,若否则为当前数据流创建新的连接跟踪并返回成功;对于新申请的连接跟踪,判断其是否满足确认条件,若满足确认条件则将当前连接跟踪数M的值加1,并将该确认的连接跟踪加入已确认连接跟踪链表,对已确认连接跟踪链表中的连接跟踪依次进行协议栈后继处理;该方法中在初始化阶段还包括:预设需保留的连接跟踪类型,并保留指定数量的空余连接跟踪用以属于需保留的连接跟踪类型的连接跟踪的创建;创建LRU链表,该LRU链表包含了满足所述确认条件且不属于需保留的连接跟踪类型的连接跟踪;所述老化处理的步骤包括:
A、判断当前申请的连接跟踪是否属于需保留的连接跟踪类型,若是,则继续判断当前已申请的且属于需保留连接跟踪类型的连接跟踪数量是否超过指定数量,未超过时为当前数据流创建新的连接跟踪并返回成功,超过时执行步骤B;若否,执行步骤B;
B、判断LRU链表是否为空,若为空,则返回失败;若不为空,则选择其中一连接跟踪进行释放,之后为当前数据流创建新的连接跟踪并返回成功。
2.如权利要求1所述netfilter框架下连接跟踪的优化方法,其特征在于,所述需保留的连接跟踪类型包括:与Linux本地交互数据流交互建立的连接跟踪、为RTSP、H323、SIP、组播类型的语音与视频建立的连接跟踪。
3.如权利要求1所述netfilter框架下连接跟踪的优化方法,其特征在于,判断LRU链表的填充方法为:将新创建的确认过的连接跟踪作为节点依次加在LRU链表的尾部;后续过程中,若LRU链表中连接跟踪有数据包传输,则该节点移至尾部。
4.如权利要求3所述netfilter框架下连接跟踪的优化方法,其特征在于,所述步骤B中,选择LRU链表中第一个不为空的节点对应的连接跟踪进行释放。
5.如权利要求1所述netfilter框架下连接跟踪的优化方法,其特征在于,该方法中还包括释放连接跟踪的步骤,该步骤包括:在释放连接跟踪时,将当前已申请的连接跟踪数N的值减1;如果当前释放的连接跟踪为已确认状态,将当前连接跟踪数M的值减1。
6.如权利要求3所述netfilter框架下连接跟踪的优化方法,其特征在于,该方法中,保留的空余连接跟踪的指定数量设置为100。
7.如权利要求1所述netfilter框架下连接跟踪的优化方法,其特征在于,最大申请的连接跟踪数Nmax=最大连接跟踪数Mmax×2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310141745.5A CN103259880B (zh) | 2013-04-23 | 2013-04-23 | 一种netfilter框架下连接跟踪的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310141745.5A CN103259880B (zh) | 2013-04-23 | 2013-04-23 | 一种netfilter框架下连接跟踪的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103259880A CN103259880A (zh) | 2013-08-21 |
CN103259880B true CN103259880B (zh) | 2016-05-11 |
Family
ID=48963569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310141745.5A Active CN103259880B (zh) | 2013-04-23 | 2013-04-23 | 一种netfilter框架下连接跟踪的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103259880B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106161551B (zh) * | 2015-04-16 | 2019-11-15 | 腾讯科技(深圳)有限公司 | 一种控制虚拟机连接数的方法及装置 |
CN106027419B (zh) * | 2016-05-20 | 2019-06-04 | 曙光云计算技术(日照)有限公司 | 一种数据结构的管理方法和装置 |
CN109729059B (zh) | 2017-10-31 | 2020-08-14 | 华为技术有限公司 | 数据处理方法、装置及计算机 |
CN112769973B (zh) * | 2020-12-25 | 2021-11-16 | 清华大学 | 一种网络地址与网络地址转换规则的匹配方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001093517A1 (en) * | 2000-05-30 | 2001-12-06 | Anyusernet Corporation | Telephone number assigning method of internet phone |
CN101635639A (zh) * | 2008-11-28 | 2010-01-27 | 北京网康科技有限公司 | 一种网络连接跟踪方法及其*** |
CN102368769A (zh) * | 2011-10-17 | 2012-03-07 | 深圳市共进电子股份有限公司 | 一种Linux网络架构下的网络应用服务质量保障方法 |
-
2013
- 2013-04-23 CN CN201310141745.5A patent/CN103259880B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001093517A1 (en) * | 2000-05-30 | 2001-12-06 | Anyusernet Corporation | Telephone number assigning method of internet phone |
CN101635639A (zh) * | 2008-11-28 | 2010-01-27 | 北京网康科技有限公司 | 一种网络连接跟踪方法及其*** |
CN102368769A (zh) * | 2011-10-17 | 2012-03-07 | 深圳市共进电子股份有限公司 | 一种Linux网络架构下的网络应用服务质量保障方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103259880A (zh) | 2013-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110166356B (zh) | 发送报文的方法和网络设备 | |
US9414113B2 (en) | Distributed resource management for a plurality of local media gateways to provide video conferencing | |
CN101350817B (zh) | 网络业务的智能负载平衡和故障转移的方法和装置 | |
CN103259880B (zh) | 一种netfilter框架下连接跟踪的优化方法 | |
CN102075343B (zh) | 一种实现带外管理的方法、***和带外管理交换机 | |
CN102315970B (zh) | 数据中心桥接参数配置方法、***及网络设备 | |
CN104539558A (zh) | 可扩容ip电话交换机刀片机构架及自动扩容方法 | |
CN101304387B (zh) | 一种实现二层隧道协议隧道转换的方法 | |
CN106716975A (zh) | 传输链路的续传方法、装置和*** | |
US20190215347A1 (en) | Apparatus for call management and method thereof | |
CN103475595A (zh) | 一种ParlayX网关的过载控制***和方法 | |
CN104468656A (zh) | 一种移动数据的下载上传方法和*** | |
US20080291861A1 (en) | Equipment and method for providing broadcast/multicast service in mobile communications | |
US20060140198A1 (en) | Method and system for determining media gateway loading | |
CN101164299B (zh) | 一种ip网络资源配置方法及ip网络 | |
CN106789317A (zh) | 一种服务器切换方法及其装置 | |
CN102820992A (zh) | 数据包的处理方法和装置 | |
CN105450431A (zh) | 一种多节点容灾方法及ngcc节点 | |
US7925787B2 (en) | Arrangement and method for delayed re-allocation of addresses | |
US20180352009A1 (en) | Apparatus for setting up conference call and method thereof | |
JP2008199395A (ja) | 移動通信システムの無線端末呼び出し方法、ゲートウェイ装置、および移動通信システム | |
CN101114929B (zh) | 避免网络管理端与设备间通信异常的建立链接的方法 | |
CN104702602A (zh) | 基于sip实现集群网关动态创建通道和扩容的***和方法 | |
CN108833434B (zh) | 一种基于ip双向网络机顶盒的跨网视频通话***的实现方法 | |
CN107911301B (zh) | 一种报文转发方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |