@@ -44,8 +44,9 @@ the messages \textsc{service\_accept}, \textsc{ua\_accept},
Connection layer we only use messages for channel management and the
terminal functionality. Finally, because we will only explore
protocol behaviour after SSH versions have been exchanged, we exclude
these messages for exchaning version numbers. \marginpar{\tiny Erik: I
rephrased all this to make it simpler. Is it still ok?}
these messages for exchanging version numbers.
%\marginpar{\tiny Erik: I
%rephrased all this to make it simpler. Is it still ok?}
The resulting lists of inputs for the three protocol layers are given
in tables~\ref{trans-alphabet}-\ref{conn-alphabet}. In some
...
...
@@ -169,26 +170,24 @@ keys. Receipt of the \textsc{newkeys} response from the {\dsut} will
make the {\dmapper} use the new keys earlier negotiated in place of
the older ones, if such existed.
The {\dmapper} contains two other
state variables,
one is a buffer for storing open channels. It is initially empty and
is increased/decreased on \textsc{ch\_open} and \textsc{ch\_close}
inputs respectively. The other is initially set to 0, and stores the
sequence number of the last received message. This is then used when
constructing \textsc{unimpl} inputs. \marginpar{\tiny Erik: I don't get this
bit}
The {\dmapper} contains a buffer for storing channels opened, which is initially empty.
On a \textsc{ch\_open} from the learner, the {\dmapper} adds a channel to the buffer
with a randomly generated channel identifier, on a \textsc{ch\_close}, it removes the channel
(if there was any). The buffer size, or the maximum number of opened channels, is limited to one. Initially,
the buffer is empty.
Lastly, the {\dmapper} also stores the sequence number of the last received message from the {\dsut}.
This number is then used when constructing \textsc{unimpl} inputs.
In the following cases, inputs are answered by the {\dmapper} directly
instead of being sent to the {\dsut}fo find out its response:
instead of being sent to the {\dsut}to find out its response:
\begin{enumerate}
\item on receiving a \textsc{ch\_open} input and the buffer has reached the size limit, the {\dmapper} directly responds with \textsc{ch\_max};
\item on receiving any input operating on a channel (all Connection layer inputs other than \textsc{ch\_open}) when the buffer is empty, the
{\dmapper} directly responds with \textsc{ch\_none};
\item if connection with the {\dsut} was terminated, the {\dmapper}
responds with a \textsc{no\_conn} message, as sending furtheer
responds with a \textsc{no\_conn} message, as sending further
messages to the {\dsut} is pointless in that case;
\item if no channel has been opened (the buffer variable is empty) or the maximum number of channels was reached (in our experiments 1), cases which prompt the {\dmapper}
to respond with \textsc{ch\_none}, or \textsc{ch\_max} respectively
\marginpar{\tiny Erik: i don't get this 2nd bullet; something is
missing?}
\end{enumerate}
Overall, we notice that in many ways, the {\dmapper} acts similarly to an SSH client. Hence it is unsurprising that it was built off an existing
...
...
@@ -236,7 +235,7 @@ a warning, which then needs to be manually investigated.
An added benefit of this cache is that is allows the {\dmapper} to
supply answer to some inputs without actually sending them to the
{\dsut}. This speeded up learning a lot when we had to restart
{\dsut}. This sped up learning a lot when we had to restart
experiments: any new experiment on the same {\dsut} could start where
the previous experiment left of, without re-running all inputs. This
was an important benefit, as experiments could take several days.
...
...
@@ -263,7 +262,7 @@ output \textsc{buffered}.
Secondly, buffering happens when opening and closing channels, since a
{\dsut} can close only as many channels as have previously been opened.
Learning this behaviour would lead to an infinite state machine, as we
Learning this behavior would lead to an infinite state machine, as we
would need a state `there are $n$ channels open' for every number $n$.
For this reason, we restrict the number of simultaneously open
channels to one. The {\dmapper} returns a custom response