一、实验目的
1.熟悉AB协议,并能用PROMELA语言正确描述
2.掌握用SPIN验证协议的方法
二、实验原理
对于给定的一个使用PROMELA描述的协议系统,SPIN可以对其执行任意的模拟,也可以生成一个C代码程序,然后对该系统的正确性进行有效检验,并报告系统中出现的死锁,无效的循环,未定义的接受和标记不完全等情况。
三、实验仪器
PC机
四、实验内容
请根据下图写出著名的 AB 协议的 PROMELA 描述,并验证“A 获取的每一个报文至少有一次是正确的, 而 B 接收的每一个报文至多有一次是正确的 (Every message fetched by A is received error-free at least once and accepted at most once by B)”
五、实验步骤及结果
1.熟悉AB协议
AB(Alternating Bit)协议是最早的端到端通信协议之一。在AB协议系统中,包含有发送端和接收端两个实体。发送端协议实体从发送方获取一个报文,将序号寄存器值赋给报文,然后向接收端实体发出报文,发送方发出报文之后启动超时计时器,等待确认报文。如果在给定的时间内没有收到确认报文,则重发该报文。如果收到确认报文,其序号与发出报文序号相同,则序号寄存器的内容加l模2,然后发送端实体从发送方用户获取下一个报文;如果收到否定的确认报文,则重发该报文;接收端协议实体在收到报文后,如果确认报文无错误,并且序号和序号寄存器的值相等,则向发送端实体发送确认报文(认可报文的序号值等于接收报文的序号值),然后将报文递交给接收方用户,序号寄存器的内容加l模2。如果接收的报文有错误,或者序号不正确,则发送否定确认报文。
在本次实验中,题目所给的AB协议状态转换图中没有miss状态,只有收发报文和err,可以确定的是题文中所给的协议是信道有误码、无丢失下的AB协议。
发送方初始状态处于S5状态,此时发送端发送报文a0,继而处于S4等待应答。AB协议只有两种序号的报文,回送报文b0和b1分别是接收方对报文对a0和a1的确认。
当接收方处于 S4 并接收到报文, 如果是 a0或者是 a1则转向 S1 状态, 并发送报文 b1且转到 S2 状态;如果是 Err则转向 S5 状态,并发送报文 b0且转到 S4 状态。
发送方处于等待状态S4收到回送报文b0或者b1后,则转向S1状态,并发送报文a1且转到S2状态。
接收方在S2状态下,如果是 a0则转向S3,如果是 a1则转向 S1 状态, 并发送报文 b1且转到 S2 状态;如果是 Err0则转向 S5 状态, 并发送报文b0且转到 S4 状态。如果接收方收到的是报文b0,说明发送方刚刚发给接收方的报文a1接收方没有能够收到,接收方会再次重传报文a1,如果接收方收到回应报文b1后,则会重复这样的过程(一直给接收方发送报文a1),直到出现意外情况打破这种平衡:收到的回应报文错误的消息,回到初始状态S5。
2.用PROMELA语言描述协议
1 #define MAXSEQ 5
2 #define timeout 1
3 #define a 1
4 #define b 2
5 chan AtoB = [1] of {byte,byte}
6 chan BtoA = [1] of {byte,byte}
7 chan guard
8 /a=1,b=2/
9 proctype TA()
10 {
11 S1: if
12 ::AtoB!a,1->
13 goto S2;
14 fi;
15 S2: if
16 ::BtoA? a,0->
17 goto S5;
18 ::BtoA? a,1->
19 goto S5;
20 ::BtoA? b,0->
21 goto S3;
22 ::BtoA? b,1->
23 goto S1;
24 fi;
25 S3: if
26 ::BtoA?a,1->
27 goto S2;
28 fi;
29 S4: if
30 ::BtoA?b,1->
31 goto S1;
32 ::BtoA?b,0->
33 goto S1;
34 ::BtoA?a,0
35 goto S5;
36 ::BtoA?a,1->
37 goto S5;
38 fi;
39 S5: if
40 ::AtoB!a,0->
41 goto S4;
42 fi;
43 }
44 proctype TB()
45 {
46 S1: if
47 ::BtoA!b,1->
48 goto S2;
49 fi;
50 S2: if
51 ::AtoB?b,0->
52 goto S5;
53 ::AtoB?b,1->
54 goto S5;
55 ::AtoB?a,0->
56 goto S3;
57 ::AtoB?a,1->
58 goto S1;
59 fi;
60 S3: if
61 ::AtoB?b,1->
62 goto S2;
63 fi;
64 S4: if
65 ::AtoB?a,0->
66 goto S1;
67 ::AtoB?a,1->
68 goto S1;
69 ::AtoB?b,0->
70 goto S5;
71 ::AtoB?b,1->
72 goto S5;
73 fi;
74 S5: if
75 ::BtoA!b,0->
76 goto S4;
77 fi;
78 }
79 init
80 {
81 atomic
82 {
83 run TA();run TB();
84 }
85 }
3.用SPIN对协议进行验证
我们在上述的分析中,已经提及AB协议只会两种序号的报文,回送报文b0和b1分别是接收方对报文对a0和a1的确认。我们可以从下面的时序图中更加清楚地看到这一结论。
验证结果如下:
由上图可以看出,该协议无一般性错误,经过了一般性验证。
由下图可以看到,发送端TA和接收端TB都是循环执行。
无进展循环验证结果如下:
综上所述,“A 获取的每一个报文至少有一次是正确的, 而 B 接收的每一个报文至多有一次是正确的”。
《网络协议分析与设计》实验报告书 实验二
最新推荐文章于 2023-02-26 09:25:32 发布