Report_revised

advertisement
Report for Probabilistic Verification to the GBN Protocol
Zhen Qiu (zq2130), Yuanhui Luo (yl3026), Ziwei Zhang (zz2282), Yih-Nin Lai (yl3030)
1. Protocol description
We define our GBN protocol as follows
(1) Sender will transmit all the messages that have not been transmitted in the 4-size window
immediately.
(2) As soon as the sender receives an ACK, the window base will move to the next message to
the one numbered by this ACK.
(3) If receiver accepts the expected message, it will put a corresponding ACK in the reverse
channel.
(4) Receiver will not put ACK in the channel if this message is not the expected one. It will
discard this message.
(5) It is impossible for sender to receive an ACK with the number smaller than the one it expects.
If it receives a larger one, sender believes that all the messages before are successfully
transmitted.
(6) If there comes a timeout, all the four messages in the window will be transmitted.
(7) The propagation time, of both messages and ACKs, is not specified.
2. Assumptions
(1) The protocol only allows to lose up to 3 packets.
(2) We define this situation a timeout that both the forward channel and reverse channel are
empty.
(3) If there are messages and ACKs in the forward and reverse channel, we assume the first
message and first ACK have equal probability to be received earlier.
(4) We only consider the first elements in both channels. Disregarding the empty channel
occasion, four different states may occur: first message received; first ACK received; first
message lost; first ACK lost. (state means the combination of the sender’s, receiver’s and
two channel’s individual state, in the format of <S,R,FC,RC>)
(5) We take these as stopping point when the first 4 messages are successfully transmitted and
4 packets are lost.
3. Stopping points
As what we mentioned above, when we successfully transmit the first 4 messages or any 4
packets are lost, we believe that it is the right place to stop our program. That is so say, the
furthest message our program can deal with is message 6, when M3 or A3 is lost, while A2 is
received by sender. The window base will move to message 3, then transmit M4~M6
immediately. Since the probability of losing 4 packets is 10-16, which is sufficiently low (which is
also the requirement of the problem), it is reasonable to stop here. On the other hand,
successful transmission of first 4 messages is a typical performance of our protocol. The
following work will just be the repetition of it. So we choose it as another stopping point.
4. Examples
Figure 1 Examples of Next States from Current State
From the figure above, the states <13(34)(12)> and <22(2345)E> are of high probability to occur,
while the other two are of 10-4 to occur.
5. Contribution
Members
Yuanhui Luo
Ziwei Zhang
Yih-Nin Lai
Zhen Qiu
Works
Algorithms, Pseudo code, Programming
Algorithms, Pseudo code, Presentation Slides
Algorithms, Pseudo code, Presentation Slides
Algorithms, Pseudo code, Report
Figure 2 Five cases that could happen on the transition from one state to next
6. Part of table
Table 1 First 3 Steps of the Table
State
Service Seq
initial
0 0 [E] [E]
---------------------------------------------------------------------step: 1
pop: 0 0 [] []
---------------------------------------------------------------------0 0 [0,1,2,3] [] 0 Get 0 1 2 3
---------------------------------------------------------------------step: 2
pop: 0 0 [0,1,2,3] []
---------------------------------------------------------------------0 1 [1,2,3] [0] 0 Get 0 1 2 3 Acpt 0
0 0 [1,2,3] [] 1 Get 0 1 2 3
---------------------------------------------------------------------step: 3
pop: 0 1 [1,2,3] [0]
---------------------------------------------------------------------0 2 [2,3] [0,1] 0 Get 0 1 2 3 Acpt 0 Acpt 1
1 1 [1,2,3,4] [] 0 Get 0 1 2 3 Acpt 0 Get 4
0 0 [1,2,3] [] 1 Get 0 1 2 3
0 1 [2,3] [0] 1 Get 0 1 2 3 Acpt 0
0 1 [1,2,3] [] 1 Get 0 1 2 3 Acpt 0
---------------------------------------------------------------------We use four separate stacks to store states with different probabilities, p=0, p=1, p=2, p=3.
Firstly, we push the initial state <00EE> to stack0 and pop it, then push the next states into the
corresponding stacks. After the sender transmits all the 4 messages in the window [0,1,2,3], it’s
the state <00[0,1,2,3][]> with p=0. We push it into stack0 and pop it. The next states of
<00[0,1,2,3][]> are two states, <01[1,2,3][0]> with p=0 (receiver accepts M1 and puts A1 in the
reverse channel)and <00[1,2,3][]> with p=1 (M1 is lost). So we push them into stack0 and stack1
separately, then pop the one in stack0 (the one with higher probability), so on and so forth.
In terms of the four stacks, we will always pop states in the order of stack0, stack1, stack2,
stack3. That is to say, the state with higher probability should be pop earlier.
7. Pseudo code
Stack <T>;
//define a stack structure
T.Push(initial);
For{
t2=T.pop();
//pop out the data saved in the top of stack
Generate_state(t2);
}
Table T
{
int s, r;
//sender, receiver
int sizef, sizeb;
//size of forward and reverse channel
int[4]=chf,chb;
//define forward channel and reverse channel
int p=0;
//intiate error rate
}
//sender receives ack
Generate_state{
If(t2.sizeb>0)
{
new T.t;
//create new table to save new state
x=chb[0];
//first element in backward channel queue
t.sizef=t2.sizef;
t.sizeb=t2.sizeb-1;
t.chf=t2.chf;
for(i=0, i<t.sizeb,i=++)
{t.chb[i]=t2.chb[i+1];}
t.p=t2.p;
t.r=t2.r
if(t.s<=x)
//if expected ack no larger than recieved ack
t.s=x+1;
for(j=0,j<x-t.s+1,j++)
t.chf[t2.sizef+j] = t.s + j + 4; //moving window base forward
t.sizef ++;
}
}
//sender loses ack
Generate_state{
if(t2.sizeb>0)
{
new T.t;
//create new table to save new state
x=chb[0];
//first element in backward channel queue
t.sizef=t2.sizef
t.sizeb=t2.sizeb-1;
t.chf=t2.chf
for(i=0, i<t.sizeb,i=++) //reorder the acks in the backward channel
{t.chb[i]=t2.chb[i+1];}
t.p=t2.p;
t.r=t2.r;
//The status of receiver and sender will not
t.s=t2.s;
//change
t.p++;
//error rate will increase
}
}
//receiver receive message
Generate_state{
if(t2.sizef>0)
{
new T.t;
//create new table to save new state
x=chf[0];
//first element in forward channel queue
t.sizef=t2.sizef-1;
t.sizeb=t2.sizeb;
t.chb=t2.chb;
for(i=0, i<t.sizef,i=++)
{t.chf[i]=t2.chf[i+1];}
t.p=t2.p;
t.s=t2.s;
t.r=t2.r;
if(t.r=x)
// expect message equal to message channel
t.r++;
//receiver expected number +1
t.chb[t.sizeb+1] = x;
t.sizeb ++;
}
}
//receiver lose message
Generate_state{
if(t2.sizef>0)
{
new T.t
//create new table to save new state
x=chf[0]
// first element in forward channel queue
t.sizef=t2.sizef-1
t.sizeb=t2.sizeb
t.chb=t2.chb
for(i=0, i<t.sizef,i=++)
{t.chf[i]=t2.chf[i+1]}
t.p=t2.p
t.s=t2.s
t.r=r2.r
}
}
if(t2.chf==NULL && t2.chb==NULL)
{
t=t2;
for (i=0, i<4,i=++)
{t1.chf[i]=t2.s+i;}
}
//timeout
We finish our design by using the above pseudo code. We design four functions and timeout for
different cases which would happen in the GBN protocol. The first one is when the sender
correctly receive the ACK which is no less than the expected value. The second one is when the
receiver receives the message. The following two are error statuses, losing the message or ack.
The last one is timeout case when both of forward channel and backward channel are empty.
8. If messages are transmitted on the average of once every second, what is the lower
bound on the average time between protocol failures.
For the last problem of this GBN design requirement, there would have no protocol failure in
our design. In our program, if there’s no stop-points, the program will continue to implement
the whole sequence in GBN protocol. Since there’s no deadlock in this design, protocol failure
would not happen.
Download