5 协议验证技术 (ok)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
E1 C 21 C n1
C E
12 2
C
源自文库
n2
C C
2n En
1n
这里E1,E2„,En,为n层协议的几个协议实体的局部状态, Cij为协议实体i到协议实体j的通道的状态。当所有通道可处 理成空通道时,协议状态可用数组[E1,E2,„,En]表示(因为 空通道只有一种状态)。
第五章 协议验证技术
5 . 2 . 2 非穷尽可达性分析 将算法5 . 1 的语句for each successor state s of q 改为 for some successor state s of q, 其它语句不变,我们就得到非穷尽可达性 分析算法
算法5 . 2 : start() { W={initial state}; A={}; analyze(); } analyze() { If (W==empty) return; q =element from W; add q to A; find all successors s of q; if (q == error_state) report_error(); else { for some successor state s of q if (s is not in A or W) { add s to W analyze(); } Delete q from W } }
(1)....S (0) : A(1) ? m (2)....S (1) : a(0)! m
第五章 协议验证技术
现在,我们就很容易判定初始状态下,事件(l ) 可执行,而事件(5 )、(9 )和(12 )不会执行, 这是因为初始化后,作用点状态分别是:A =l , b =0 , a =0 , b =0 .利用作用点状态判定在协议状态q 之下, 哪些事件会被执行,那么我们就可以找出q 的所有后 继状态
第五章 协议验证技术
协议分析包括许多方法,例如, (1)可达性分析(reachability analysis) (2)不变性分析(invariance analysis) (3)等价性分析(equivalence analysis) (4)符号执行(symbol execution)、模拟(simulation)等等。 这些分析工作可以手动完成。 协议有多种表达形式,这包括:用自然语言描述的非形式化协议文本; 用形式描述语言(ESTELLE,LOTOS,SDL等)描述的协议规范;用协议 模型技术(FSM,Petrinet,CCS等)表达的协议模型;以及用程序设计语 言(C,Pascal等)描述的协议代码。协议分析可在任何一种表达形式上进 行,一般地说,上述所有方法都可在这几种表达形式上进行(手工或软件 工具)。然而,除符号执行之外,人们都在协议模型上进行协议分析(简 单,容易形成确定算法)。 本章讨论三种分析方法,它们是可达性分析、不变性分析和等价分析。
0 0
0 0
b?ack (4)
0 1
0 0
第五章 协议验证技术
A S a?ack 0 A?m b?ack 0 a!ack
b?m
B
C
1
21
R 0
b!ack,B!m
2
a!m
a 1 a?m 0 drop b!m 1
drop 1
C
12
timeout
图5-1 AB协议系统
第五章 协议验证技术
第五章 协议验证技术
5.2.1 穷尽可达性分析 穷尽(exhaustive)可达性分析产生和检查 所有协议状态。算法5.1描述了穷尽可达性分析 的基本算法,该算法假定计算机的存储空间足 够大,计算速度足够高。
第五章 协议验证技术
算法5.1:exhaustive reachability analysis start() { W={initial state};//工作集;将被分析的状态 A={};//被分析过的状态 analyze();//穷尽分析 } analyze() { if (W= =empty) return; q=last element from W; add q to A; find all successors s of q; if (q= =error_state) report_error(); else { for each successor state s of q if (s is not in A or W) { add s to W; analyze(); } delete q from W; } }
第五章 协议验证技术
2 .协议实体优先选择法 如果事件t1,t2……tn是由多个不同协议实体执行的,那么被选择 的后继状态应该是优先级别高的协议实体所执行的事件产生 的.协议实体的优先级别的赋值方法可以是: (1) 静态赋值 按照一定原则(发方高于收方,响应方高于发起 方,… ,等等)赋给各个 协议实体优先数值,可达性分析进行 过程,数值不改变. (2) 动态赋值 方法之一 按照执行事件的多少或最后一次执行事 件的时间动态改变协议实体的优先数值.例如.事件执行多的 协议实体优先级别数降低,很长时间未执行任何事件的协议实 体的优先级别数提高等等. 动态赋值方法之二 按照事件的相关特性动态调整协议实体的优 先级别数值.例如当协议实体A 执行完发送事件之后,那么执 行该事件的协同事件的协议实体的优先数值就立即提高等等.
第五章 协议验证技术
5.2 可达性分析 可达性分析(基于FSM模型技术)试图产生和检查协议所有 或部分可达状态。所谓可达状态指协议从初始状态开始经历 有限次转换之后可达到的状态,所有可达状态构成可达图 (reachability graph).可达性分析的最重要工作是产生和检 查可达图,判定是否存在死锁,活锁等协议错误。可达性分 析涉及三个重要技术: (1)怎样找到所有可达状态,构成可达图; (2)怎样检测死锁、活锁等协议错误; (3)怎样解决状态爆炸问题。
第五章 协议验证技术
(1) 静态赋值 可达性分析进行之前,按照 一定原则(发送事件优先于接收事件,协 同事件高于内部事件等等)对所有事件赋 于静态优先数值,可达性分析过程中,这 些数值不改变. (2) 动态赋值 可达性分析执行之前,所有 事件赋于相同的优先数值(也可以不同), 可达性分析过程中,事件每执行一次,其 优先数减1 。这种方法可均衡各个事件的 执行次数,使本来很少有机会执行的事件 能尽快的执行一次。
第五章 协议验证(分析)技术
5.1 概述 对协议本身的逻辑正确性进行校验的过程称之为协议验证 (protocol verification). 协议验证有两种途径: (1)协议分析(protocol analysis) (2)协议综合(protocol synthesis) 通常所说的协议验证指的是前者。协议综合(将在第六章 讨论)将协议设计过程和协议验证(分析)过程融合在一起,它通 过一组能确保所设计的协议是正确的规则,从一些基本协议模 块中(这些基本模块已证明是正确的)产生所希望的目标协议。 协议分析的目的是:对已设计的协议进行分析和校验(这 些已设计的协议大都是采用非形式化设计方法产生的 )
第五章 协议验证技术
2.怎样找到所有可达的后继状态 不考虑报文顺序号,AB协议系统如图5.1所示,其中C12是S到R的通道, C21是R到S的通道,协议状态由二维矩阵组成。初始状态有四个后继状态:
0 0 0 0
A?m (1)
1 0
0 0
0 0 0 0
第五章 协议验证技术
(7)R(1):b(0)!ack (8) R(1):B(0)!m (3)....S (2) : timeout (9)C12(0):a(1)?m (10)C12(1):drop (4)....S (2) : a(1) ? ack (11)C12(1):b(0)!m (5)....R (0) : b(1) ? m (12)C21(0):b(1)?ack (6)....R (1) : drop (13)C21(1):a(0)!ack
为了解决这个问题,我们按下述格式定义交互事件: entity(state):action-point(state)?/!message 这里,entity(state)表示协议实体处于状态state中, action -point(state)表示作用点处于状态state中,!表 示发送,?表示接收。作用点的状态定义为“0”或 “1”。发送(!)结束后,状态为“1”;接收(?) 结束后,状态为“0”。AB协议系统有四个作用点,它 们是用户和S之间接口A,用户和R之间接口B,S和通 道之间接口a以及R和通道之间接口b。利用上述的事 件表达格式,图5.1的事件表述如下:
0 0 0 0
a?m (2)
b?m (3)
0 1 0 0
0 0 0 1
很显然,状态(2),(3)和(4)不是可达 状态(因为初始状态中AB内部没有任何数据需 要传输,所以(2),(3),(4)状态是不 可能出现的,即不可达的)。
那么怎样判定(1)是可达状态,而(2), (3)和(4)不是可达状态呢?
第五章 协议验证技术
现在问题是,怎样从q 的所有后继状态中选取某些(some) 状态进行分析,当然,被选取的状态应该是最有价值的, 最有分析意义的,能最大可能检测协议错误的状态. 1 .事件优先选择法 事件t1,t2……tn使状态q 产生n 个后继状态(图5 . 2 ) ,如果 给这些事件赋于一定优先级别 数值,那么被选择的后继状态 (一般只选择一个),应该是 优先级别数高的事件产生 的.优先级别数值的赋值方法 可以是:
第五章 协议验证技术
4 .搜索方法 算法5 . 1 的搜索方法取决于W 队列性质.如果 W 为FIFO (先进先出)队列,搜索是按宽度优先 (breadth –first)进行的,如果W 为FILO (先进后 出)队列,搜索是按深度优先(depth –first)进行 的.深度优先搜索方法占用存贮空间小.这是最大 优点之一。假定每个状态有两个后继状态,算法执 行m 步之后,对于深度优先搜索方法,W 的长度为 m ,但对于宽度优先搜索,W 的长度为2m。
集合W包含未被分析的协议状态,A包含已分析和正在分析中的协议状态, 算法执行之前,W包含initial state, A为空,算法执行完毕之后,W为空,A包含 协议的所有可达状态。该算法简单明了,然而要将它付诸实施时,我们还必须 解决以下一些问题。
第五章 协议验证技术
1.状态表示方法 协议状态用状态矩阵表示为:
第五章 协议验证技术
5 状态爆炸和错误检测 第三章在讨论FSM 简化时提到了什么是状态爆炸问 题.随着协议机制复杂性的提高和队列通道边界值的增 大,状态爆炸问题使穷尽可达性分析变得无法实行。 5.2.2讨论的非穷尽可达性分析技术力图解决这个问题. 算法5.1 中的语句:if(q= =error_state)report_error(),其 内容非常丰富,实现比较困难。5 . 2 . 3 讨论各种协议 错误的检侧方法。
第五章 协议验证技术
3 .改进方法 去掉内部作用状态,而根据通道状态来判定哪些事件会 被执行,将使算法变得简洁.用这种方法时,外部作用点保 留,通道内的事件隐藏起来.AB 协议系统的事件简化为: (1)S(0):A(1)?m (5) R(0):C12(1)?m (2) S(1):C12(0)!m (6) R(1):drop (3) S(2):timeout (7) R(1):C21(0)!ack (4) S(2):C21(1)?ack (8) R(1):B(0)!m 通道内的事件无需表示出来,通道C12 的drop 事件叠加 到事件(6 )中.
第五章 协议验证技术
如果通道为队列通道,它的状态定义就 会变得复杂,状态数也会激剧增加,事件的 表述方法也变得复杂。例如,对于边界为n 的队列通道,事件表述形式可能为: entity(state):channel(state<n)!message. 就是说,当通道队列长度小于n 时,协 议实体entity 才会执行报文发送事件。
C E
12 2
C
源自文库
n2
C C
2n En
1n
这里E1,E2„,En,为n层协议的几个协议实体的局部状态, Cij为协议实体i到协议实体j的通道的状态。当所有通道可处 理成空通道时,协议状态可用数组[E1,E2,„,En]表示(因为 空通道只有一种状态)。
第五章 协议验证技术
5 . 2 . 2 非穷尽可达性分析 将算法5 . 1 的语句for each successor state s of q 改为 for some successor state s of q, 其它语句不变,我们就得到非穷尽可达性 分析算法
算法5 . 2 : start() { W={initial state}; A={}; analyze(); } analyze() { If (W==empty) return; q =element from W; add q to A; find all successors s of q; if (q == error_state) report_error(); else { for some successor state s of q if (s is not in A or W) { add s to W analyze(); } Delete q from W } }
(1)....S (0) : A(1) ? m (2)....S (1) : a(0)! m
第五章 协议验证技术
现在,我们就很容易判定初始状态下,事件(l ) 可执行,而事件(5 )、(9 )和(12 )不会执行, 这是因为初始化后,作用点状态分别是:A =l , b =0 , a =0 , b =0 .利用作用点状态判定在协议状态q 之下, 哪些事件会被执行,那么我们就可以找出q 的所有后 继状态
第五章 协议验证技术
协议分析包括许多方法,例如, (1)可达性分析(reachability analysis) (2)不变性分析(invariance analysis) (3)等价性分析(equivalence analysis) (4)符号执行(symbol execution)、模拟(simulation)等等。 这些分析工作可以手动完成。 协议有多种表达形式,这包括:用自然语言描述的非形式化协议文本; 用形式描述语言(ESTELLE,LOTOS,SDL等)描述的协议规范;用协议 模型技术(FSM,Petrinet,CCS等)表达的协议模型;以及用程序设计语 言(C,Pascal等)描述的协议代码。协议分析可在任何一种表达形式上进 行,一般地说,上述所有方法都可在这几种表达形式上进行(手工或软件 工具)。然而,除符号执行之外,人们都在协议模型上进行协议分析(简 单,容易形成确定算法)。 本章讨论三种分析方法,它们是可达性分析、不变性分析和等价分析。
0 0
0 0
b?ack (4)
0 1
0 0
第五章 协议验证技术
A S a?ack 0 A?m b?ack 0 a!ack
b?m
B
C
1
21
R 0
b!ack,B!m
2
a!m
a 1 a?m 0 drop b!m 1
drop 1
C
12
timeout
图5-1 AB协议系统
第五章 协议验证技术
第五章 协议验证技术
5.2.1 穷尽可达性分析 穷尽(exhaustive)可达性分析产生和检查 所有协议状态。算法5.1描述了穷尽可达性分析 的基本算法,该算法假定计算机的存储空间足 够大,计算速度足够高。
第五章 协议验证技术
算法5.1:exhaustive reachability analysis start() { W={initial state};//工作集;将被分析的状态 A={};//被分析过的状态 analyze();//穷尽分析 } analyze() { if (W= =empty) return; q=last element from W; add q to A; find all successors s of q; if (q= =error_state) report_error(); else { for each successor state s of q if (s is not in A or W) { add s to W; analyze(); } delete q from W; } }
第五章 协议验证技术
2 .协议实体优先选择法 如果事件t1,t2……tn是由多个不同协议实体执行的,那么被选择 的后继状态应该是优先级别高的协议实体所执行的事件产生 的.协议实体的优先级别的赋值方法可以是: (1) 静态赋值 按照一定原则(发方高于收方,响应方高于发起 方,… ,等等)赋给各个 协议实体优先数值,可达性分析进行 过程,数值不改变. (2) 动态赋值 方法之一 按照执行事件的多少或最后一次执行事 件的时间动态改变协议实体的优先数值.例如.事件执行多的 协议实体优先级别数降低,很长时间未执行任何事件的协议实 体的优先级别数提高等等. 动态赋值方法之二 按照事件的相关特性动态调整协议实体的优 先级别数值.例如当协议实体A 执行完发送事件之后,那么执 行该事件的协同事件的协议实体的优先数值就立即提高等等.
第五章 协议验证技术
5.2 可达性分析 可达性分析(基于FSM模型技术)试图产生和检查协议所有 或部分可达状态。所谓可达状态指协议从初始状态开始经历 有限次转换之后可达到的状态,所有可达状态构成可达图 (reachability graph).可达性分析的最重要工作是产生和检 查可达图,判定是否存在死锁,活锁等协议错误。可达性分 析涉及三个重要技术: (1)怎样找到所有可达状态,构成可达图; (2)怎样检测死锁、活锁等协议错误; (3)怎样解决状态爆炸问题。
第五章 协议验证技术
(1) 静态赋值 可达性分析进行之前,按照 一定原则(发送事件优先于接收事件,协 同事件高于内部事件等等)对所有事件赋 于静态优先数值,可达性分析过程中,这 些数值不改变. (2) 动态赋值 可达性分析执行之前,所有 事件赋于相同的优先数值(也可以不同), 可达性分析过程中,事件每执行一次,其 优先数减1 。这种方法可均衡各个事件的 执行次数,使本来很少有机会执行的事件 能尽快的执行一次。
第五章 协议验证(分析)技术
5.1 概述 对协议本身的逻辑正确性进行校验的过程称之为协议验证 (protocol verification). 协议验证有两种途径: (1)协议分析(protocol analysis) (2)协议综合(protocol synthesis) 通常所说的协议验证指的是前者。协议综合(将在第六章 讨论)将协议设计过程和协议验证(分析)过程融合在一起,它通 过一组能确保所设计的协议是正确的规则,从一些基本协议模 块中(这些基本模块已证明是正确的)产生所希望的目标协议。 协议分析的目的是:对已设计的协议进行分析和校验(这 些已设计的协议大都是采用非形式化设计方法产生的 )
第五章 协议验证技术
2.怎样找到所有可达的后继状态 不考虑报文顺序号,AB协议系统如图5.1所示,其中C12是S到R的通道, C21是R到S的通道,协议状态由二维矩阵组成。初始状态有四个后继状态:
0 0 0 0
A?m (1)
1 0
0 0
0 0 0 0
第五章 协议验证技术
(7)R(1):b(0)!ack (8) R(1):B(0)!m (3)....S (2) : timeout (9)C12(0):a(1)?m (10)C12(1):drop (4)....S (2) : a(1) ? ack (11)C12(1):b(0)!m (5)....R (0) : b(1) ? m (12)C21(0):b(1)?ack (6)....R (1) : drop (13)C21(1):a(0)!ack
为了解决这个问题,我们按下述格式定义交互事件: entity(state):action-point(state)?/!message 这里,entity(state)表示协议实体处于状态state中, action -point(state)表示作用点处于状态state中,!表 示发送,?表示接收。作用点的状态定义为“0”或 “1”。发送(!)结束后,状态为“1”;接收(?) 结束后,状态为“0”。AB协议系统有四个作用点,它 们是用户和S之间接口A,用户和R之间接口B,S和通 道之间接口a以及R和通道之间接口b。利用上述的事 件表达格式,图5.1的事件表述如下:
0 0 0 0
a?m (2)
b?m (3)
0 1 0 0
0 0 0 1
很显然,状态(2),(3)和(4)不是可达 状态(因为初始状态中AB内部没有任何数据需 要传输,所以(2),(3),(4)状态是不 可能出现的,即不可达的)。
那么怎样判定(1)是可达状态,而(2), (3)和(4)不是可达状态呢?
第五章 协议验证技术
现在问题是,怎样从q 的所有后继状态中选取某些(some) 状态进行分析,当然,被选取的状态应该是最有价值的, 最有分析意义的,能最大可能检测协议错误的状态. 1 .事件优先选择法 事件t1,t2……tn使状态q 产生n 个后继状态(图5 . 2 ) ,如果 给这些事件赋于一定优先级别 数值,那么被选择的后继状态 (一般只选择一个),应该是 优先级别数高的事件产生 的.优先级别数值的赋值方法 可以是:
第五章 协议验证技术
4 .搜索方法 算法5 . 1 的搜索方法取决于W 队列性质.如果 W 为FIFO (先进先出)队列,搜索是按宽度优先 (breadth –first)进行的,如果W 为FILO (先进后 出)队列,搜索是按深度优先(depth –first)进行 的.深度优先搜索方法占用存贮空间小.这是最大 优点之一。假定每个状态有两个后继状态,算法执 行m 步之后,对于深度优先搜索方法,W 的长度为 m ,但对于宽度优先搜索,W 的长度为2m。
集合W包含未被分析的协议状态,A包含已分析和正在分析中的协议状态, 算法执行之前,W包含initial state, A为空,算法执行完毕之后,W为空,A包含 协议的所有可达状态。该算法简单明了,然而要将它付诸实施时,我们还必须 解决以下一些问题。
第五章 协议验证技术
1.状态表示方法 协议状态用状态矩阵表示为:
第五章 协议验证技术
5 状态爆炸和错误检测 第三章在讨论FSM 简化时提到了什么是状态爆炸问 题.随着协议机制复杂性的提高和队列通道边界值的增 大,状态爆炸问题使穷尽可达性分析变得无法实行。 5.2.2讨论的非穷尽可达性分析技术力图解决这个问题. 算法5.1 中的语句:if(q= =error_state)report_error(),其 内容非常丰富,实现比较困难。5 . 2 . 3 讨论各种协议 错误的检侧方法。
第五章 协议验证技术
3 .改进方法 去掉内部作用状态,而根据通道状态来判定哪些事件会 被执行,将使算法变得简洁.用这种方法时,外部作用点保 留,通道内的事件隐藏起来.AB 协议系统的事件简化为: (1)S(0):A(1)?m (5) R(0):C12(1)?m (2) S(1):C12(0)!m (6) R(1):drop (3) S(2):timeout (7) R(1):C21(0)!ack (4) S(2):C21(1)?ack (8) R(1):B(0)!m 通道内的事件无需表示出来,通道C12 的drop 事件叠加 到事件(6 )中.
第五章 协议验证技术
如果通道为队列通道,它的状态定义就 会变得复杂,状态数也会激剧增加,事件的 表述方法也变得复杂。例如,对于边界为n 的队列通道,事件表述形式可能为: entity(state):channel(state<n)!message. 就是说,当通道队列长度小于n 时,协 议实体entity 才会执行报文发送事件。