一种追踪协议栈状态机切换的方法

文档序号:7648609阅读:223来源:国知局
专利名称:一种追踪协议栈状态机切换的方法
技术领域
本发明涉及网络通信领域,尤其涉及的是,一种协议自动机全息追踪的方法。
背景技术
在网络通信的协议栈(Protocol Stack)中,各层都用状态机来控制对等实体之间的通信。协议状态机为确定有穷自动机。一个确定有限状态自动机(DFA)M是由下述元素构成的五元组(Q,∑,δ,q0,F)1)有穷状态集合Q;2)有穷输入集合∑;3)转移函数δQ×∑→Q,用于描述系统中每个状态转换到其它状态的可能性,只要该事件发生,就会发生转换;4)初始状态q0;5)终结状态集合F,F包含于Q。
自动机从初始状态q0起,逐一处理输入事件,根据当前状态、输入事件和转移函数δ决定自动机的下一步状态。协议栈状态机的输入事件包括收到协议上下层原语消息,收到来自对等实体的信令和状态机内部的定时器消息。
如图1和图2所示,现有技术协议栈状态机的切换特点是在源状态X下,被事件a触发发生状态变换时,只有唯一的目的状态Z;反之不成立,如果是事件a导致状态机进入了目的状态Z,则源状态并不能确定为X,可能还有其他状态,例如Y;并且在源状态X下,还可以被事件b触发发生状态变换时,只有唯一的目的状态Z。
因此,当状态机停止于某一异常状态导致系统服务中止时,其前状态序列和输入事件集存在不确定性。在定位状态机异常时,通常使用协议栈保存于内存中的各种统计计数信息,再结合后台网管的日志来进行。这种记录方法的弊端在于1)统计计数信息只能用于定量,无法定时定性。
2)日志记录信息虽然全面,但在系统运行较长时间后,可能会记录大量重复的状态切换信息,占用过多存储空间,检索很不方便。有些嵌入式设备由于自身规格和实际使用环境限制,也不可能提供完整的日志。
当使用了网络协议栈的嵌入式产品在外场大规模应用时,需要有某种机制准确追踪从前一可服务状态切换到故障状态的状态序列和切换原因,从而进行快速故障定位。同时由于嵌入式产品的特点,这种追踪手段的处理器和存储开销都必须控制在可接受的范围内。但是,现有技术由于存在上述弊端,无法实现这些功能。
因此,现有技术存在缺陷,需要改进。

发明内容
本发明的目的在于提供一种追踪协议栈状态机切换的方法,不依赖日志,可以进行快速故障定位,提高系统效率。
本发明的技术方案如下一种追踪协议栈状态机切换的方法,其包括步骤A1、构造存储矩阵,将所述状态机的全部状态映射到所述存储矩阵的行上,并且映射到所述存储矩阵的列上;A2、当系统启动时,加载所述存储矩阵;A3、在所述状态机每次发生状态切换时,根据切换前状态和切换后状态在所述存储矩阵中所对应的矩阵单元,记录所述状态切换信息;A4、发生故障时,调用所述存储矩阵所记录的信息,对所述状态机故障直接进行定位。
所述的方法,其中,所述步骤A4中,用户登录到前台调用所述存储矩阵所记录的信息。
所述的方法,其中,所述步骤A3之前还包括步骤为触发所述状态机发生状态切换的事件进行编码。
所述的方法,其中,所述步骤A1中,所述存储矩阵的行设置所述状态机切换前全部状态;所述存储矩阵的列设置所述状态机切换后全部状态。
所述的方法,其中,所述步骤A1中,所述存储矩阵的行设置所述状态机切换后全部状态;所述存储矩阵的列设置所述状态机切换前全部状态。
所述的方法,其中,所述步骤A1中,所述存储矩阵设置为二维数组结构,所述矩阵单元分别维护一个切换原因链表,所述链表的节点设置触发事件编码、最近触发时间、累计触发次数,用于记录所述状态机从切换前状态切换到切换后状态的信息。
所述的方法,其中,所述步骤A1中,所述存储矩阵采用十字链表结构实现,所述矩阵单元为所述十字链表的节点,设置触发事件编码、最近触发时间、累计触发次数,用于记录所述状态机从切换前状态切换到切换后状态的信息。
所述的方法,其中,所述存储矩阵占用的存储空间由状态机状态数、两个状态之间存在的切换原因共同决定,为有限存储空间。
所述的方法,其中,所述链表的插入方式为增量插入。
所述的方法,其中,步骤A4还包括根据所述最近触发时间的顺序,调用连续的状态切换序列,对所述状态机故障进行定位。
采用上述方案,本发明通过在嵌入式产品前台对协议栈状态机的切换过程进行全息追踪,将每次状态机切换信息记录在一张存储空间固定的内存表格中,使得直接远程登录到前台时,能定时定性地统计计数信息,可以对状态机故障进行快速定位,无需依赖后台网管平台和日志,从而提高了系统效率。


图1为现有技术的状态机切换的第一个实例;图2为现有技术的状态机切换的第二个实例;图3为本发明方法的流程图;图4为本发明方法对状态机切换过程进行追踪的流程图;图5为本发明方法的SCTP协议在协议栈中的位置示意图。
具体实施例方式
以下对本发明的较佳实施例加以详细说明。
如图3所示,本发明提供了一种追踪协议栈状态机切换的方法,其包括以下步骤。
A1、构造存储矩阵,将所述状态机的全部状态映射到所述存储矩阵的行上,并且映射到所述存储矩阵的列上。矩阵只是一个逻辑概念,具体用哪种数据结构存储不属于本专利的关注重点,同样的,矩阵的内容以何种形式保存到存储介质中,也不属于本专利的关注重点,加载和保存到数据库、二进制文件或文本文件均可;构造存储数据库时,所述存储数据库的全部存储单元分别映射所述状态机的全部状态的二维组合即可。用矩阵来表达状态之间的跃迁关系属于现有技术,在此不作赘述,本发明的重点在于矩阵元素的设计和切换过程的记录、使用方式。
其中,可以将所述存储矩阵的行映射设置为所述状态机切换前全部状态,此时将所述存储矩阵的列映射设置为所述状态机切换后全部状态;也可以将所述存储矩阵的行映射设置为所述状态机切换后全部状态,此时将所述存储矩阵的列映射设置为所述状态机切换前全部状态,本发明对此并无额外限制。
并且,所述存储矩阵可以构造设置为一个链表结构或数组结构;例如,存储矩阵采用二维数组或者十字链表实现,更好的是用二维数组,便于定位矩阵单元。本专利的重点在于,每个矩阵单元维护有一个单链表,这个单链表用于记录切换原因。因为任两个状态之间的切换原因是有限的,所以这个单链表长度是有限的。即所述存储矩阵设置为二维数组结构,所述矩阵单元分别维护一个切换原因链表,所述链表的节点设置触发事件编码、最近触发时间、累计触发次数,用于记录所述状态机从切换前状态切换到切换后状态的信息。也可以不设置累计触发次数;但是对于覆盖式更新来说,累计触发次数是必要信息,如果没有的话信息缺失比较严重。
存储矩阵是链表结构时,所述矩阵单元为链表节点,在链表节点上设置触发事件编码、最近触发时间等数据结构,用于记录所述状态机从切换前状态切换到切换后状态的信息。为了便于统计,还可以设置累计触发次数等数据结构。例如,也可以采用十字链表来存储矩阵,每个行由一个链表组成,每个列也是一个链表。行、列链表的表元为复合节点,其成员为{行号,列号,右节点指针,下节点指针,切换原因链表}。行号可映射到切换前状态、列号可映射到切换后状态。每个复合节点的右节点指针指向同行的相邻下一个复合节点,下节点指针指向同列的相邻下一个复合节点。即所述存储矩阵可以采用十字链表结构实现,所述矩阵单元为所述十字链表的节点,设置触发事件编码、最近触发时间、累计触发次数,用于记录所述状态机从切换前状态切换到切换后状态的信息。
本发明中,所述存储矩阵占用的存储空间由状态机状态数、两个状态之间存在的切换原因共同决定,为有限存储空间。即所述存储矩阵占用固定的存储空间;所述链表的插入方式为增量插入,即插入前先遍历链表,未找到触发事件相同的节点时执行插入操作;发现存在重复的表节点时,只更新其触发时间,递增触发次数,不再增加新的表节点。这样,可以实现以有限的存储空间记录全面的切换信息,以静态的存储结构记录动态的切换过程。该存储矩阵为静态全局结构变量,在前台启动后其在内存中的位置是固定不变的,变化的是其内容,可以每次切换均刷新其内容。
A2、当系统启动时,加载所述存储矩阵;可以采取用户加载的方式,更好的时,系统自行加载所述存储矩阵。
A3、在所述状态机每次发生状态切换时,根据切换前状态和切换后状态在所述存储矩阵中所对应的矩阵单元,记录所述状态切换信息;即在状态机每次状态切换时,根据切换前一状态和后一状态寻找在矩阵中的对应位置,记录下状态切换信息。
在所述步骤A3之前还可以包括步骤为触发所述状态机发生状态切换的事件进行编码,这样可以缩小所述存储矩阵所占用的存储空间,提高系统性能。触发事件可以包括收到协议上下层原语消息,收到来自对等实体的信令和定时器消息等等。
A4、发生故障时,调用所述存储矩阵所记录的信息,对所述状态机故障直接进行定位。发生故障时,用户可以登录到前台,包括远程登录,根据状态机追踪矩阵所记录信息,用调试命令调出所需信息进行定位。
步骤A4还可以包括根据所述最近触发时间的顺序,调用连续的状态切换序列,对所述状态机故障进行定位。由于矩阵单元的切换原因链表中记录有每次切换时间,则可根据时间先后顺序,用调试命令打印出连续的状态切换序列进行定位。
通过以上方案的描述可知,当发生断链或其他异常时,直接登录到前台查看该追踪表,即前述的存储矩阵,通过对比状态机切换时间和当前系统时间,即可从当前状态连续向前回溯状态切换过程,并能确定每次切换的原因。
同时这种对切换原因的增量覆盖式记录方式可以保证,在程序的运行过程中,任何异常切换一旦发生就会记录下切换原因。由于每个切换原因在矩阵单元的切换原因链表里拥有唯一条目,因此,其后即便反复发生同样的状态切换,只要原因不相同,前一条目就不会被覆盖掉。
由于追踪矩阵的行、列值为常量,矩阵单元中切换原因链表的最大长度为切换原因编码的总个数,因此整个矩阵占用的存储空间是固定的,不会随程序运行而无限制增加。同时通过记录切换时间来将前后切换过程联系起来,实现了以有限的存储空间记录全面的切换信息,以静态的存储结构记录动态的切换过程。
下面以流控制传输协议(stream control transmission protocol,SCTP)为例对本发明所述方法进行进一步的描述。应当理解的是,这仅仅是本发明的一个简单范例,但本发明的保护范围并不局限于此,本发明的保护范围应以权利要求的保护范围为准。
SCTP协议在协议栈中的位置示意图如图5所示,在OSI的七层协议体系结构中,SCTP协议位于传输层,是一种数据报传输协议,可在诸如UDP或IP之类不可靠的数据报服务之上提供可靠的服务。SCTP支持偶联(Association)和流(Stream)。SCTP协议通过在两个SCTP端点A和B间的建立的偶联来为两个SCTP用户之间提供可靠的消息传送业务。在SCTP偶联的存活期内SCTP端点的偶联控制块从一个状态转移到另一状态以响应不同的事件。
如图4所示,是SCTP偶联在网络协议栈中的示意图。
为了对SCTP状态机切换过程进行追踪,首先需要对所有能引起协议状态机切换的原因进行编码,对协议可能存在的所有状态进行编码。
状态机切换的原因分为三类1、SCTP用户原语呼叫如[ASSOCIATE],[SHUTDOWN],[ABORT];2、收到INIT,COOKIE ECHO,ABORT,SHUTDOWN等信令;3、一些定时器超时事件。
例如,SCTP偶联的每端有8种状态,对应状态编码为CLOSED、C-WAIT、C-ECHO、ESTAB、SD-PND、SD-SND、SD-RCV、SA-SND。
启动后,加载状态切换追踪矩阵,即所述存储矩阵;当发生状态切换时,根据切换前后状态,定位矩阵单元;判断该切换原因是否已在链表中存在?是则更新该链表节点对应的矩阵单元(即表元)的时间和计数值,否则在链表尾添加表元,并且初始化时间和计数值;至此完成。
采用如下所示的表格来实现存储矩阵。表格的每一行对应一次切换的切换前状态,每一列对应一次切换的切换后状态,表元由链表构成,记录着状态机从对应行状态切换到对应列状态的切换原因。每个链表节点包含三类信息切换原因编码,最近切换时间,累计切换次数,分别对应下面表元中的三行。

为显示和追溯方便考虑,上述追踪表只将每个切换点切换原因链表中最近更新的节点打印出来。通过其他命令可以查看完整的表元信息和时间序列。比如ShowSctpAtmnTblCellInfo命令查看某个表元信息,ShowSctpAtmnSwitchSeq查看连续的切换序列等。
从CLOSED状态出发,根据表元第一行记录的切换时间点,我们可以根据状态追踪表复现从建链到断链的完整状态切换序列

从上表得知,偶联建链后在2B40A这个时间点,由于收到对端的Abort信令而导致断链。
通过调试命令,也可以查看某个表元的完整切换原因链表。例如打印ESTAB→CLOSED表元的链表成员如下

从上表我们可以知道,偶联共断链过5次,其中有1次是收到对端的Abort信令导致,3次是重传超过最大上限导致,1次是收到了高层的ABORT命令。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
权利要求
1.一种追踪协议栈状态机切换的方法,其包括步骤A1、构造存储矩阵,将所述状态机的全部状态映射到所述存储矩阵的行上,并且映射到所述存储矩阵的列上;A2、当系统启动时,加载所述存储矩阵;A3、在所述状态机每次发生状态切换时,根据切换前状态和切换后状态在所述存储矩阵中所对应的矩阵单元,记录所述状态切换信息;A4、发生故障时,调用所述存储矩阵所记录的信息,对所述状态机故障直接进行定位。
2.根据权利要求1所述的方法,其特征在于,所述步骤A4中,用户登录到前台调用所述存储矩阵所记录的信息。
3.根据权利要求1所述的方法,其特征在于,所述步骤A3之前还包括步骤为触发所述状态机发生状态切换的事件进行编码。
4.根据权利要求3所述的方法,其特征在于,所述步骤A1中,所述存储矩阵的行设置所述状态机切换前全部状态;所述存储矩阵的列设置所述状态机切换后全部状态。
5.根据权利要求3所述的方法,其特征在于,所述步骤A1中,所述存储矩阵的行设置所述状态机切换后全部状态;所述存储矩阵的列设置所述状态机切换前全部状态。
6.根据权利要求3所述的方法,其特征在于,所述步骤A1中,所述存储矩阵设置为二维数组结构,所述矩阵单元分别维护一个切换原因链表,所述链表的节点设置触发事件编码、最近触发时间、累计触发次数,用于记录所述状态机从切换前状态切换到切换后状态的信息。
7.根据权利要求3所述的方法,其特征在于,所述步骤A1中,所述存储矩阵采用十字链表结构实现,所述矩阵单元为所述十字链表的节点,设置触发事件编码、最近触发时间、累计触发次数,用于记录所述状态机从切换前状态切换到切换后状态的信息。
8.根据权利要求6或7所述的方法,其特征在于,所述存储矩阵占用的存储空间由状态机状态数、两个状态之间存在的切换原因共同决定,为有限存储空间。
9.根据权利要求6或7所述的方法,其特征在于,所述链表的插入方式为增量插入。
10.根据权利要求6或7所述的方法,其特征在于,步骤A4还包括根据所述最近触发时间的顺序,调用连续的状态切换序列,对所述状态机故障进行定位。
全文摘要
本发明提供了一种追踪协议栈状态机切换的方法,其包括步骤A1.构造存储矩阵,将状态机的全部状态映射到存储矩阵的行上,并且映射到存储矩阵的列上;A2.当系统启动时,加载存储矩阵;A3.在状态机每次发生状态切换时,根据切换前状态和切换后状态在存储矩阵中所对应的矩阵单元,记录状态切换信息;A4.发生故障时,调用存储矩阵所记录的信息,对状态机故障直接进行定位。通过在嵌入式产品前台对协议栈状态机的切换过程进行全息追踪,将每次状态机切换信息记录在一张存储空间固定的内存表格中,使得直接远程登录到前台时,能定时定性地统计计数信息,可以对状态机故障进行快速定位,无需依赖后台网管平台和日志,从而提高了系统效率。
文档编号H04L12/24GK101068244SQ20071007500
公开日2007年11月7日 申请日期2007年6月7日 优先权日2007年6月7日
发明者周建波 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1