事件跟踪图+状态图
- 格式:ppt
- 大小:2.32 MB
- 文档页数:36
VoronoiDiagram——维诺图Voronoi图定义任意两点p 和q 之间的欧⽒距离,记作 dist(p, q) 。
就平⾯情况⽽⾔,我们有dist(p, q) = (px-qx)2+ (py-qy)2设P := {p1, …, pn}为平⾯上任意 n 个互异的点;这些点也就是基点。
按照我们的定义,所谓P对应的Voronoi图,就是平⾯的⼀个⼦区域划分——整个平⾯因此被划分为n 个单元(cell ),它们具有这样的性质:任⼀点q位于点pi 所对应的单元中,当且仅当对于任何的pj∈Pj, j≠i,都有dist(q, pi)<dist(q, pj)。
我们将与P对应的Voronoi图记作Vor(P)。
“Vor(P) ”或者“Voronoi图”所指⽰的仅仅只是组成该⼦区域划分的边和顶点。
在Vor(P)中,与基点pi 相对应的单元记作V (pi)——称作与pi 相对应的Voronoi单元(Voronoi cell)。
上图是Voronoi图,下图的蓝⾊点围成的区域(凸包)是它对应的Delaunay三⾓剖分。
任给平⾯上两点p 和q ,所谓 p 和q 的平分线(bisector),就是线段 pq的垂直平分线。
该平分线将平⾯划分为两张半平⾯(half-plane)。
点 p 所在的那张开半平⾯记作 h(p, q) ,点 q 所在的那张开半平⾯记作 h(q, p) 。
请注意,r ∈ h(p, q) 当且仅当 dist(r, p) < dist(r, q) 。
据此,可以得出如下观察结论:V (pi) = ∩ h(pi, pj) , 1≤j≤n, j≠ i也就是说,V (pi)是(n-1)张半平⾯的公共交集;它也是⼀个(不见得有界的)开的凸多边形(convex polygon)⼦区域.很显然,Voronoi顶点到相邻的三个site距离相等;Voronoi边上任意⼀点到相邻的两个site距离相等;对于任何点q,我们将以q为中⼼、内部不含P中任何基点的最⼤圆,称作q关于P的最⼤空圆(largest empty circle ),记作Cp(q)。
三次握手图四次握手图三次握手Three-way Handshake一个虚拟连接的建立是通过三次握手来实现的1. (B) --> [SYN] --> (A)假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包,告诉A请求建立连接.注意: 一个SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。
因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动建立连接。
2. (B) <-- [SYN/ACK] <--(A)接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作.注意: SYN/ACK包是仅SYN 和ACK 标记为1的包.3. (B) --> [ACK] --> (A)B收到SYN/ACK 包,B发一个确认包(ACK),通知A连接已建立。
至此,三次握手完成,一个TCP连接完成Note: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位这就是为何连接跟踪很重要的原因了. 没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接.一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个好主意). 而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包四次握手Four-way Handshake四次握手用来关闭已建立的TCP连接1. (B) --> ACK/FIN --> (A)2. (B) <-- ACK <-- (A)3. (B) <-- ACK/FIN <-- (A)4. (B) --> ACK --> (A)注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。
就是状态转移图。
举个最简单的例子。
人有三个状态健康,感冒,康复中。
触发的条件有淋雨(t1),吃药(t2),打针(t3),休息(t4)。
所以状态机就是健康-(t3)-〉健康;健康-(t1)-〉感冒;感冒-(t3)->健康;感冒-(t2)-〉康复中;康复中-(t4)-〉健康。
等等。
就是这样状态在不同的条件下跳转到自己或不同状态的图。
状态机综述关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。
状态机通过响应一系列事件而“运行”。
每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。
函数返回“下一个”(也许是同一个)节点。
这些节点中至少有一个必须是终态。
当到达终态,状态机停止。
包含:一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号、当前状态到下一状态的转换函数(transition function)的计算模型。
当输入符号串,模型随即进入起始状态。
它要改变到新的状态,依赖于转换函数。
在有限状态机中,会有有许多变量,例如,状态机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态,等等。
传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。
很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。
“命令行实用程序”是这种传统应用程序的典型例子。
另一类应用程序由外部发生的事件来驱动——换言之,事件在应用程序之外生成,无法由应用程序或程序员来控制。
具体需要执行的代码取决于接收到的事件,或者它相对于其他事件的抵达时间。
所以,控制流程既不能是顺序的,也不能是事先设定好的,因为它要依赖于外部事件。
事件驱动的GUI应用程序是这种应用程序的典型例子,它们由命令和选择(也就是用户造成的事件)来驱动。