CN104639525A - 一种用于数据处理通道缓冲匹配的属性标识方法 - Google Patents
一种用于数据处理通道缓冲匹配的属性标识方法 Download PDFInfo
- Publication number
- CN104639525A CN104639525A CN201410305599.XA CN201410305599A CN104639525A CN 104639525 A CN104639525 A CN 104639525A CN 201410305599 A CN201410305599 A CN 201410305599A CN 104639525 A CN104639525 A CN 104639525A
- Authority
- CN
- China
- Prior art keywords
- attribute
- application data
- data bag
- cache attribute
- described cache
- 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.)
- Pending
Links
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Abstract
一种用于数据处理通道缓冲匹配的属性标识方法,包括如下步骤:在应用数据包流经处理通道时,定义缓存属性;在输入或输出缓冲区中设定当前应用数据包的所述缓存属性;采用当前应用数据包的所述缓存属性与缓冲区中的在前或在后应用数据包的所述缓存属性进行匹配;若匹配成功,则通过在前或在后应用数据包的所述缓存属性调用所述缓冲区中的在前或在后应用数据包作为缓存输出;若匹配失败,则将当前应用数据包新增到所述缓冲区中,并采用当前应用数据包作为缓存输出。通过本发明采用在线动态联接的方法建立处理通道。通过本发明增加了数据处理的精准度,实现模块间的灵活组合。可有效减少内存读写操作,提高应用层数据包在流经各模块时处理的效率。
Description
技术领域
本发明涉及计算机软件应用层协议处理加速的技术领域,尤其是涉及一种用于数据处理通道缓冲匹配的属性标识方法。
背景技术
目前许多应用系统、网络安全系统的建设,必须深入分析、处理TCP/IP层之上的应用层协议。而应用层协议一般来说都比较复杂。在目前现有的技术架构下,在进行应用层协议处理时,需要先后使用多个各自独立的模块。这些模块之间的联接复杂,从而大大降低了系统的灵活性,并且各个模块对缓冲区的操作具有盲目性,当数据流经各个模块时,模块间的缓冲区匹配(我们把为实现模块连接而进行的缓冲区操作成为模块间的缓冲区匹配)需要进行大量的内存复制,这无形中增加了系统处理时间,进而加剧了网络安全系统处理能力不足与网络流量迅速增加的矛盾。
现在缓冲区优化工作主要集中在TCP/IP等底层协议上,优化对象包括1)减少协议处理中数据的复制;2)提高缓存区处理灵活性和效率;3)多协议的高效处理。针对减少协议处理中数据复制的问题,现在通常使用的方法为零拷贝技术,零拷贝技术通过减少或消除关键通信路径影响速率的操作,降低数据传输的操作系统开销和协议处理开销,从而有效提高通信性能,实现高速数据传输。针对提高缓存区处理灵活性和效率的问题,可以通过fast buffer的方法进行处理,fast buffer可以有效地实现数据在各个保护域间的流动,fastbuffer主要强调了缓冲区自身的流动性、可组合性。为实现多层协议的高效处理,可采用ILP(Integrated Layer Processing)方法,通过将协议栈扁平化,有效减少了内存访问操作,可以有效地实现数据在多个保护域间的流动,提高了访问效率。
上述的技术方案优化缓冲区操作可以大大提高协议处理性能,但这些技术方案将更多的注意力放在TCP这样较为简单的底层协议上,不适合现有框架下的应用层协议处理,且现有技术中内存访问操作频繁,采用顺序查询的方式,缓存访问的效率低下。故此急需一种针对相对复杂的应用层协议,适合现有框架下的应用层协议处理,就可以完全在用户控件实现的技术方案。
发明内容
本发明的目的在于设计一种用于数据处理通道缓冲匹配的属性标识方法,解决上述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种用于数据处理通道缓冲匹配的属性标识方法,包括如下步骤:
在应用数据包流经处理通道时,定义缓存属性;
在输入或输出缓冲区中设定当前应用数据包的所述缓存属性;
采用当前应用数据包的所述缓存属性与缓冲区中的在前或在后应用数据包的所述缓存属性进行匹配;
若匹配成功,则通过在前或在后应用数据包的所述缓存属性调用所述缓冲区中的在前或在后应用数据包作为缓存输出;
若匹配失败,则将当前应用数据包新增到所述缓冲区中,并采用当前应用数据包作为缓存输出。
优选的,所述缓存属性包括可写属性、可读属性、释放缓存属性、内存分配属性、缓冲时间属性、缓冲路径属性、缓冲区有效空间属性和缓冲区剩余空间属性中的一种或多种。
优选的,所述处理通道为采用在线动态链接建立的处理通道。
优选的,采用当前应用数据包的所述缓存属性与缓冲区中的在前或在后应用数据包的所述缓存属性进行匹配的具体方法为:
将当前应用数据包的所述缓存属性与在前或在后应用数据包的所述缓存属性进行对比;
若当前应用数据包的所述缓存属性与在前或在后应用数据包的所述缓存属性一致,则将不同的所述缓存属性存放到所述缓冲区中;
若当前应用数据包的所述缓存属性与在前或在后应用数据包的所述缓存属性不一致,则不进行处理。
优选的,将当前应用数据包的所述缓存属性与在前或在后应用数据包的所述缓存属性进行对比的具体方法为:
判断当前应用数据包的所述缓存属性与所述缓冲区中的所述缓存属性是否一致;
若一致时,则判断为当前应用数据包的所述缓存属性对输入到所述缓冲区中的所述缓存属性不进行修改;
若不一致时,则判断为当前应用数据包的所述缓存属性对输入到所述缓冲区中的所述缓存属性进行修改;
对所述缓存属性进行修改时,判断是否在所述缓冲区中新增所述缓存属性;
若当前应用数据包的所述缓存属性包括所述缓冲区中的所述缓存属性时,则不进行新增所述缓存属性;
若当前应用数据包的所述缓存属性包括所述缓冲区中不存在的所述缓存属性时,则判断新增所述缓存属性。
本发明的有益效果可以总结如下:
通过本发明采用在线动态联接的方法建立处理通道。这样在分析应用层协议时,可以根据每个具体数据流的协议及其选项,在线为数据流建立最适当的处理通路,有效地提高了系统的灵活性,而又不增加额外的开销。通过本发明增加了数据处理的精准度,进而实现模块间的灵活组合。通过本发明可有效减少内存读写操作,提高应用层数据包在流经各模块时处理的效率。
附图说明
图1为本发明具体示例中HTTP协议的处理通道结构示意图;
图2为本发明中用于数据处理通道缓冲匹配的属性标识方法的流程示意图;
图3为本发明中输入输出缓冲属性进行缓冲区操作的流程示意图;
图4为本发明中输入输出缓冲属性进行缓冲区操作的改进示意图。
具体实施方式
为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
应用层协议数据要先后使用多个基本独立的模块进行处理,为标识某个具体应用协议数据流的处理过程,我们将这个过程中所使用的模块及其联接方式,称为该应用层数据流的处理通道。由于协议及其选项的不同,每一种应用层协议的每一次具体联接都可能使用不同的处理通道。在协议处理过程中,数据将依次流经通道中的各个模块。当数据从一个模块进入到下一个模块时,为了从前一个模块的输出缓冲区得到满足后一个模块需要的输入缓冲区,需要进行缓冲区匹配。以HTTP协议的某个具体连接为例,它需要使用gzip解码、HTTP格式分析,字符串转换、规则匹配等处理模块,它的处理通道如图1所示,HTTP协议的联接所使用的功能模块及其联接方式称为一个通道。在这个通道中,HTTP数据包需要经历gzip、HTTP格式分析、字符集转换、规则匹配等4个处理模块,从数据包从gzip模块的输出缓冲区进入到HTTP格式分析模块的输入缓冲区的过程中,需要进行缓冲区匹配;同样数据包从HTTP格式分析模块的输出缓冲区进入到字符集转换模块的输入缓冲区,以及字符集转换模块的输出缓冲区进入到规则匹配模块的输入缓冲区时,同样都需要进行缓冲区匹配。在实际系统中,由于功能模块众多,其相应的处理通道也非常多,为了降低复杂度,通常的做法是简化缓冲区操作,即不考虑各个模块对输入输出缓冲区的需求,只是按自己方便的方式操作缓冲区,在数据输入输出模块时,使用内存复制等方法进行缓冲区匹配。这种方法没有从根本上提高系统的灵活性,仍然使用硬编码方式(指将可变变量用一个固定值来代替的方法)确定模块的连接方法。并且这种方法对缓冲区操作具有盲目性,极大地增加了数据复制量。由于网络速速与DRAM(Dynamic Random Access Memory,即动态随机存取存储器,最为常见的系统内存)访问速度逐渐接近,以及DRAM与CPU(中央处理器)速度差距逐步增大,这些内存复制的方式大大降低了系统的处理效率。
如图2所示一种用于数据处理通道缓冲匹配的属性标识方法,包括如下步骤:
在应用数据包流经处理通道时,定义缓存属性;缓存属性包括可写属性、可读属性、释放缓存属性、内存分配属性、缓冲时间属性、缓冲路径属性、缓冲区有效空间属性和缓冲区剩余空间属性中的一种或多种;处理通道为在线动态链接建立的处理通道;
在输入或输出缓冲区中设定当前应用数据包的所述缓存属性;
采用当前应用数据包的所述缓存属性与缓冲区中的在前或在后应用数据包的所述缓存属性进行匹配;
若匹配成功,则通过在前或在后应用数据包的所述缓存属性调用所述缓冲区中的在前或在后应用数据包作为缓存输出;
若匹配失败,则将当前应用数据包新增到所述缓冲区中,并采用当前应用数据包作为缓存输出。
采用当前应用数据包的缓存属性与缓冲区中的在前或在后应用数据包的缓存属性进行匹配的具体方法为:
将当前应用数据包的缓存属性与在前或在后应用数据包的缓存属性进行对比;
若当前应用数据包的缓存属性与在前或在后应用数据包的缓存属性一致,则将不同的缓存属性存放到缓冲区中;
若当前应用数据包的缓存属性与在前或在后应用数据包的缓存属性不一致,则不进行处理。
优选的,将当前应用数据包的缓存属性与在前或在后应用数据包的缓存属性进行对比的具体方法为:
判断当前应用数据包的缓存属性与缓冲区中的缓存属性是否一致;
若一致时,则判断为当前应用数据包的缓存属性对输入到缓冲区中的缓存属性不进行修改;
若不一致时,则判断为当前应用数据包的缓存属性对输入到缓冲区中的缓存属性进行修改;
对缓存属性进行修改时,判断是否在缓冲区中新增缓存属性;
若当前应用数据包的缓存属性包括缓冲区中的缓存属性时,则不进行新增缓存属性;
若当前应用数据包的缓存属性包括缓冲区中不存在的缓存属性时,则判断新增缓存属性。
本发明在充分考虑了每个模块对输入输出缓冲区的需求,减少了操作的盲目性。本发明在每个模块间流动的缓冲区定义了一组属性,利用这组属性标记了可以对该缓冲区进行的操作及操作的方法。具体的属性及其含义可根据系统而异,在本发明中,我们为缓冲区定义了“是否可写,“是否可读”、“是否需要释放”、“内存分配大小”、“缓冲时间”、“缓冲路径”、“缓冲区在有效数据前的空白字节数”、“缓冲区在有效数据后的空白字节数”等8个属性。各个模块通过设定输入输出缓冲区需要满足的属性值,提示在前后模块之间进行有效的匹配,增加数据处理的精准度,进而实现模块间的灵活组合。本发明中的缓冲区属性与零拷贝和fast buffer等方法中的访问属性是有区别的。首先,由于处理应用层协议的各个模块位于相同地址空间,他们是可以被完全“信任”的,因此没有强制各模块遵守属性定义的缓冲区操作方式,这简化了实现,提高了效率。其次,本发明的方法在更广泛的层次上来说是一个框架,它并不限制属性的多少、值的类型和使用方法,而现有方法中的属性,更注重于对缓冲区操作的读写权限。缓冲区属性的传递,对于某些模块,以及其使用的缓冲区的属性而言,输入缓冲区的属性值会被传递到输出缓冲区中,这种性质,我们称之为模块对缓冲区特定属性的传递性。缓冲区属性是否具有传递性,对缓冲区优化算法的设计会产生一定的影响,缓冲区属性传递发生的条件一般是:模块的输入缓冲区和输出缓冲区相同,并且模块不对缓冲区进行较大的修改。通常,这种传递性可以在模块设计时就被确定。
如图3所示缓冲属性通过各个处理模块提供的输入输出缓冲属性进行缓冲区操作。它主要考虑了以下两种情况:
(1)模块需要对输入缓冲区进行较大修改或使用新缓冲区输出;
(2)模块不需要对输入缓冲区进行大的修改。
在第(1)种情况下,一个模块(以下简称模块A)在产生输出数据前(这通常意味着移动已有缓冲区中的数据或填充新分配的缓冲区),按如下步骤决定输出数据缓冲区的属性:
(1)询问后续模块B,了解B及其后续模块对输入缓冲区每个属性的要求;
(2)根据已有缓冲区的属性,综合询问得到的属性值,设置成分配具有优
化属性值的输出缓冲区。
在决定了输出缓冲区属性后,模块A将输出数据写入缓冲区,然后交给后续模块B。值得注意的是,如果模块对缓冲区属性的需求会随着程序执行改变,那么在每次输出数据时,都需要重复这个步骤。
在第(2)种情况下,模块A可以直接修改输入缓冲区,并把它交给后续模块B。模块B将检查该缓冲区的属性是否满足自己对输入的要求,如果满足,直接将这个缓冲区作为自己的输入缓冲区;如果不满足,模块B使用内存复制产生满足需要的输入(确定新缓冲区属性的方法同第(1)种情况)。
上述方法中有一个问题值得考虑,这就是当模块A询问模块B某个属性的取值时,模块B是否需要继续询问后续模块,容易看出,如果模块B对该属性没有传递性,它马上可以根据自身的状态决定属性取值;如果模块B对该属性具有传递性,则它应该继续询问自己的后续模块C;然后再综合起来确定属性的取值。
图3中的方法本质上是贪心算法(一种对某些求最优解问题的更简单、更迅速的设计技术),它每次对缓冲区进行大的修改时,都让新缓冲区符合后面尽可能多的模块的需求。但这样做也会带来一些问题,主要是确定具有传递性属性的取值需要大量计算。为了降低计算值,我们采用了近似方法估算属性值。以属性“有效数据前的空白字节数”为例,确定它取值的方法是“严格限制询问的次数为1,然后对得到的属性值进行修正,估计出最终的属性值。利用上面的符号,就是若A询问B,则B将不再询问C,而是利用B中的信息估计取值(这个过程见图4)。我们采用的估计策略是静态的事前统计法,也就是事先通过统计的方法确定修正补偿值,在程序的执行过程中不改变这个补偿值。我们通过对运行数据的统计发现,只要模块B中的空白字节数加4,就可以达到足够的估计精度。
提高模块间组合的灵活性。从上面的描述可以看到,整个缓冲区优化算法的操作过程是比较复杂的,但它可以抽象成几种通用的缓冲区操作,这些操作在功能上主要分为模块属性设置、后续属性查询、新缓冲区生成、建立/释放处理通道等。在这种抽象的基础上,我们实现了一组适于应用层协议处理的缓冲区操作API(Application Programming Interface,应用程序编程接口)。利用这组API,可以改变系统原有的模块连接方法,不再使用硬编码方式,而是采用在线动态联接的方法建立处理通道。这样在分析应用层协议时,可以根据每个具体数据流的协议及其选项,在线为这个数据流建立最适当的处理通路,有效地提高了系统的灵活性,而又不增加额外的开销。
该技术通过匹配优化工作,提示在前后模块之间进行有效的匹配,通过这种方式,增加了数据处理的精准度,进而实现模块间的灵活组合。通过该技术可有效减少内存读写操作,提高应用层数据包在流经各模块时处理的效率。
以上通过具体的和优选的实施例详细的描述了本发明,但本领域技术人员应该明白,本发明并不局限于以上所述实施例,凡在本发明的精神和原则之内,所作的任何修改、等同替换等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种用于数据处理通道缓冲匹配的属性标识方法,其特征在于,包括如下步骤:
在应用数据包流经处理通道时,定义缓存属性;
在输入或输出缓冲区中设定当前应用数据包的所述缓存属性;
采用当前应用数据包的所述缓存属性与缓冲区中的在前或在后应用数据包的所述缓存属性进行匹配;
若匹配成功,则通过在前或在后应用数据包的所述缓存属性调用所述缓冲区中的在前或在后应用数据包作为缓存输出;
若匹配失败,则将当前应用数据包新增到所述缓冲区中,并采用当前应用数据包作为缓存输出。
2.根据权利要求1所述的用于数据处理通道缓冲匹配的属性标识方法,其特征在于:所述缓存属性包括可写属性、可读属性、释放缓存属性、内存分配属性、缓冲时间属性、缓冲路径属性、缓冲区有效空间属性和缓冲区剩余空间属性中的一种或多种。
3.根据权利要求1所述的用于数据处理通道缓冲匹配的属性标识方法,其特征在于:所述处理通道为采用在线动态链接建立的处理通道。
4.根据权利要求1所述的用于数据处理通道缓冲匹配的属性标识方法,其特征在于:采用当前应用数据包的所述缓存属性与缓冲区中的在前或在后应用数据包的所述缓存属性进行匹配的具体方法为:
将当前应用数据包的所述缓存属性与在前或在后应用数据包的所述缓存属性进行对比;
若当前应用数据包的所述缓存属性与在前或在后应用数据包的所述缓存属性一致,则将不同的所述缓存属性存放到所述缓冲区中;
若当前应用数据包的所述缓存属性与在前或在后应用数据包的所述缓存属性不一致,则不进行处理。
5.根据权利要求4所述的用于数据处理通道缓冲匹配的属性标识方法,其特征在于:将当前应用数据包的所述缓存属性与在前或在后应用数据包的所述缓存属性进行对比的具体方法为:
判断当前应用数据包的所述缓存属性与所述缓冲区中的所述缓存属性是否一致;
若一致时,则判断为当前应用数据包的所述缓存属性对输入到所述缓冲区中的所述缓存属性不进行修改;
若不一致时,则判断为当前应用数据包的所述缓存属性对输入到所述缓冲区中的所述缓存属性进行修改;
对所述缓存属性进行修改时,判断是否在所述缓冲区中新增所述缓存属性;
若当前应用数据包的所述缓存属性包括所述缓冲区中的所述缓存属性时,则不进行新增所述缓存属性;
若当前应用数据包的所述缓存属性包括所述缓冲区中不存在的所述缓存属性时,则判断新增所述缓存属性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410305599.XA CN104639525A (zh) | 2014-06-30 | 2014-06-30 | 一种用于数据处理通道缓冲匹配的属性标识方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410305599.XA CN104639525A (zh) | 2014-06-30 | 2014-06-30 | 一种用于数据处理通道缓冲匹配的属性标识方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104639525A true CN104639525A (zh) | 2015-05-20 |
Family
ID=53217841
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410305599.XA Pending CN104639525A (zh) | 2014-06-30 | 2014-06-30 | 一种用于数据处理通道缓冲匹配的属性标识方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104639525A (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060015651A1 (en) * | 2004-07-14 | 2006-01-19 | International Business Machines Corporation | Apparatus and method for supporting memory management in an offload of network protocol processing |
CN102761489A (zh) * | 2012-07-17 | 2012-10-31 | 中国科学技术大学苏州研究院 | 基于流水线模式的数据包零拷贝的核间通信方法 |
-
2014
- 2014-06-30 CN CN201410305599.XA patent/CN104639525A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060015651A1 (en) * | 2004-07-14 | 2006-01-19 | International Business Machines Corporation | Apparatus and method for supporting memory management in an offload of network protocol processing |
CN102761489A (zh) * | 2012-07-17 | 2012-10-31 | 中国科学技术大学苏州研究院 | 基于流水线模式的数据包零拷贝的核间通信方法 |
Non-Patent Citations (1)
Title |
---|
俞晓明等: "TCP/IP协议处理中的缓冲区优化及实现", 《计算机工程》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110247928B (zh) | 一种拟态交换机安全流量控制装置及方法 | |
EP2835938B1 (en) | Message publishing and subscribing method and apparatus | |
CN111416865B (zh) | 一种基于拟态防御的协议代理处理方法及系统 | |
CN110741573A (zh) | 在区块链网络中选择性使用网络编码传播交易的方法和系统 | |
CN102143074A (zh) | 网络负荷的分担方法、系统及网络处理器 | |
CN105939324A (zh) | 转发报文的方法及装置 | |
CN107547346B (zh) | 一种报文传输方法和装置 | |
CN112583715B (zh) | 设备节点连接调整方法及装置 | |
CN104811922A (zh) | 一种相邻节点注册方法和装置、跨节点注册方法和系统 | |
Vishnevsky et al. | Approximate method to study M/G/1-type polling system with adaptive polling mechanism | |
CN105262614A (zh) | 一种基于服务插件的业务处理方法及其系统 | |
CN105207950A (zh) | 一种基于sdn技术的通信数据保护方法 | |
CN115022205A (zh) | 一种应用于海量终端高并发场景的跨网数据传输方法 | |
CN102090039B (zh) | 执行数据中间处理的方法、数据中间处理设备和信息系统 | |
CN104424555A (zh) | 用于发布/订阅系统中的控制方法及设备 | |
CN102263700A (zh) | 一种报文收发方法、装置和系统 | |
CN112543145A (zh) | 发送数据的设备节点通信路径选择方法及装置 | |
CN104639525A (zh) | 一种用于数据处理通道缓冲匹配的属性标识方法 | |
US7548966B2 (en) | Multi-layer user management method for multicasting proxy | |
US10445080B2 (en) | Methods for adaptive placement of applications and devices thereof | |
EP2464139B1 (en) | Route determination method and device | |
CN115858672A (zh) | 电力终端管理方法、装置、电子设备及存储介质 | |
CN114172958A (zh) | 隐私计算节点、系统、方法、装置以及存储介质 | |
Aguado et al. | P systems with replicated rewriting and stream X-machines (Eilenberg machines) | |
CN113259484A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150520 |
|
RJ01 | Rejection of invention patent application after publication |