3.5
Protocol Verification
Realistic protocols and the programs
that implement them are often quite complicated. Consequently, much research
has been done trying to find formal, mathematical techniques for specifying and
verifying protocols. In the following sections we will look at some models and
techniques. Although we are looking at them in the context of the data link
layer, they are also applicable to other layers.
A key concept used in many protocol
models is the finite state machine. With this technique, each protocol machine
(i.e., sender or receiver) is always in a specific state at every instant of
time. Its state consists of all the values of its variables, including the
program counter.
In most cases, a large number of
states can be grouped for purposes of analysis. For example, considering the
receiver in protocol 3, we could abstract out from all the possible states two
important ones: waiting for frame 0 or waiting for frame 1. All other states
can be thought of as transient, just steps on the way to one of the main
states. Typically, the states are chosen to be those instants that the protocol
machine is waiting for the next event to happen [i.e., executing the procedure
call wait(event) in our examples]. At this point the state of the protocol
machine is completely determined by the states of its variables. The number of
states is then 2n, where n is the number of bits needed to represent
all the variables combined.
The state of the complete system is
the combination of all the states of the two protocol machines and the channel.
The state of the channel is determined by its contents. Using protocol 3 again
as an example, the channel has four possible states: a 0 frame or a 1 frame
moving from sender to receiver, an acknowledgement frame going the other way,
or an empty channel. If we model the sender and receiver as each having two
states, the complete system has 16 distinct states.
A word about the channel state is in
order. The concept of a frame being ''on the channel'' is an abstraction, of
course. What we really mean is that a frame has possibly been received, but not
yet processed at the destination. A frame remains ''on the channel'' until the
protocol machine executes FromPhysicalLayer and processes it.
From each state, there are zero or
more possible transitions to other states. Transitions occur when some event
happens. For a protocol machine, a transition might occur when a frame is sent,
when a frame arrives, when a timer expires, when an interrupt occurs, etc. For
the channel, typical events are insertion of a new frame onto the channel by a
protocol machine, delivery of a frame to a protocol machine, or loss of a frame
due to noise. Given a complete description of the protocol machines and the
channel characteristics, it is possible to draw a directed graph showing all
the states as nodes and all the transitions as directed arcs.
One particular state is designated
as the initial state. This state corresponds to the description of the system
when it starts running, or at some convenient starting place shortly
thereafter. From the initial state, some, perhaps all, of the other states can
be reached by a sequence of transitions. Using well-known techniques from graph
theory (e.g., computing the transitive closure of a graph), it is possible to
determine which states are reachable and which are not. This technique is
called reachability analysis (Lin et al., 1987). This analysis can be helpful
in determining whether a protocol is correct.
Formally, a finite state machine
model of a protocol can be regarded as a quadruple (S, M, I, T), where:
S is the set of states the processes
and channel can be in.
M is the set of frames that can be
exchanged over the channel.
I is the set of initial states of
the processes.
T is the set of transitions between
states.
At the beginning of time, all
processes are in their initial states. Then events begin to happen, such as
frames becoming available for transmission or timers going off. Each event may
cause one of the processes or the channel to take an action and switch to a new
state. By carefully enumerating each possible successor to each state, one can
build the reachability graph and analyze the protocol.
Reachability analysis can be used to
detect a variety of errors in the protocol specification. For example, if it is
possible for a certain frame to occur in a certain state and the finite state
machine does not say what action should be taken, the specification is in error
(incompleteness). If there exists a set of states from which no exit can be
made and from which no progress can be made (i.e., no correct frames can be
received any more), we have another error (deadlock). A less serious error is
protocol specification that tells how to handle an event in a state in which
the event cannot occur (extraneous transition). Other errors can also be
detected.
As an example of a finite state
machine model, consider Fig. 3-21(a). This graph corresponds to protocol
3 as described above: each protocol machine has two states and the channel has
four states. A total of 16 states exist, not all of them reachable from the
initial one. The unreachable ones are not shown in the figure. Checksum errors
are also ignored here for simplicity.
Each state is labeled by three
characters, SRC, where S is 0 or 1, corresponding to the frame the sender is
trying to send; R is also 0 or 1, corresponding to the frame the receiver
expects, and C is 0, 1, A, or empty (–), corresponding to the state of the
channel. In this example the initial state has been chosen as (000). In other
words, the sender has just sent frame 0, the receiver expects frame 0, and
frame 0 is currently on the channel.
Nine kinds of transitions are shown
in Fig. 3-21. Transition 0 consists of the channel
losing its contents. Transition 1 consists of the channel correctly delivering
packet 0 to the receiver, with the receiver then changing its state to expect
frame 1 and emitting an acknowledgement. Transition 1 also corresponds to the
receiver delivering packet 0 to the network layer. The other transitions are
listed in Fig. 3-21(b). The arrival of a frame with a
checksum error has not been shown because it does not change the state (in
protocol 3).
During normal operation, transitions
1, 2, 3, and 4 are repeated in order over and over. In each cycle, two packets
are delivered, bringing the sender back to the initial state of trying to send
a new frame with sequence number 0. If the channel loses frame 0, it makes a
transition from state (000) to state (00–). Eventually, the sender times out
(transition 7) and the system moves back to (000). The loss of an
acknowledgement is more complicated, requiring two transitions, 7 and 5, or 8
and 6, to repair the damage.
One of the properties that a
protocol with a 1-bit sequence number must have is that no matter what sequence
of events happens, the receiver never delivers two odd packets without an
intervening even packet, and vice versa. From the graph of Fig. 3-21 we see that this requirement can be
stated more formally as ''there must not exist any paths from the initial state
on which two occurrences of transition 1 occur without an occurrence of
transition 3 between them, or vice versa.'' From the figure it can be seen that
the protocol is correct in this respect.
A similar requirement is that there
not exist any paths on which the sender changes state twice (e.g., from 0 to 1
and back to 0) while the receiver state remains constant. Were such a path to
exist, then in the corresponding sequence of events, two frames would be
irretrievably lost without the receiver noticing. The packet sequence delivered
would have an undetected gap of two packets in it.
Yet another important property of a
protocol is the absence of deadlocks. A deadlock is a situation in which the
protocol can make no more forward progress (i.e., deliver packets to the
network layer) no matter what sequence of events happens. In terms of the graph
model, a deadlock is characterized by the existence of a subset of states that
is reachable from the initial state and that has two properties:
- There is no transition out of the subset.
- There are no transitions in the subset that cause forward progress.
Once in the deadlock situation, the
protocol remains there forever. Again, it is easy to see from the graph that
protocol 3 does not suffer from deadlocks.
The finite state machine is not the
only technique for formally specifying protocols. In this section we will
describe a completely different technique, the Petri net (Danthine, 1980). A
Petri net has four basic elements: places, transitions, arcs, and tokens. A place
represents a state which (part of) the system may be in. Figure 3-22 shows a Petri net with two places, A
and B, both shown as circles. The system is currently in state A, indicated by
the token (heavy dot) in place A. A transition is indicated by a horizontal or
vertical bar. Each transition has zero or more input arcs coming from its input
places, and zero or more output arcs, going to its output places.
A transition is enabled if there is
at least one input token in each of its input places. Any enabled transition
may fire at will, removing one token from each input place and depositing a
token in each output place. If the number of input arcs and output arcs
differs, tokens will not be conserved. If two or more transitions are enabled,
any one of them may fire. The choice of a transition to fire is indeterminate,
which is why Petri nets are useful for modeling protocols. The Petri net of Fig. 3-22 is deterministic and can be used to
model any two-phase process (e.g., the behavior of a baby: eat, sleep, eat,
sleep, and so on). As with all modeling tools, unnecessary detail is
suppressed.
Figure 3-23 gives the Petri net model of Fig. 3-12. Unlike the finite state machine model,
there are no composite states here; the sender's state, channel state, and
receiver's state are represented separately. Transitions 1 and 2 correspond to
transmission of frame 0 by the sender, normally, and on a timeout respectively.
Transitions 3 and 4 are analogous for frame 1. Transitions 5, 6, and 7
correspond to the loss of frame 0, an acknowledgement, and frame 1,
respectively. Transitions 8 and 9 occur when a data frame with the wrong
sequence number arrives at the receiver. Transitions 10 and 11 represent the
arrival at the receiver of the next frame in sequence and its delivery to the
network layer.
Petri nets can be used to detect
protocol failures in a way similar to the use of finite state machines. For
example, if some firing sequence included transition 10 twice without
transition 11 intervening, the protocol would be incorrect. The concept of a
deadlock in a Petri net is similar to its finite state machine counterpart.
Petri nets can be represented in
convenient algebraic form resembling a grammar. Each transition contributes one
rule to the grammar. Each rule specifies the input and output places of the
transition. Since Fig. 3-23 has 11 transitions, its grammar has 11
rules, numbered 1–11, each one corresponding to the transition with the same
number. The grammar for the Petri net of Fig. 3-23 is as follows:
It is interesting to note how we
have managed to reduce a complex protocol to 11 simple grammar rules that can
easily be manipulated by a computer program.
The current state of the Petri net
is represented as an unordered collection of places, each place represented in
the collection as many times as it has tokens. Any rule, all of whose left-hand
side places are present can be fired, removing those places from the current
state, and adding its output places to the current state. The marking of Fig. 3-23 is ACG, (i.e., A, C, and G each have
one token). Consequently, rules 2, 5, and 10 are all enabled and any of them
can be applied, leading to a new state (possibly with the same marking as the
original one). In contrast, rule 3 ( AD BE ) cannot be applied because D is not
marked.
No comments:
Post a Comment
silahkan membaca dan berkomentar