In order to be allow learnlib to learn the TCP model it was necessary to have a
deterministic model.  We accomplished this by modifying the adapter so it can
reach a \texttt{ERROR} or \texttt{CLOSED} state. In these states all inputs are
discarded and a default output is returned.  In the case of a state where an
input results in a non-deterministic output we jump to the \texttt{ERROR} which will give the \emph{ERR} output for any input. 
When the connection is successfully closed
using a \texttt{FIN} packet we move the adapter to the \texttt{CLOSED} state.

We divided the input alphabet into three sets, this way we can control the size
of the model learned by learnlib.

\begin{table}[H]
	\begin{tabular}{cl}
		\toprule
		Alphabet & Inputs \\
		\midrule
		small & \texttt{SYN}, \texttt{ACK} \\
		partial & \texttt{SYN}, \texttt{ACK}, \texttt{DATA} \\
		full & \texttt{SYN}, \texttt{ACK}, \texttt{DATA}, \texttt{RST},
			\texttt{FIN} \\
		\bottomrule
	\end{tabular}
	\caption{Different input alphabets used during learning.}
\end{table}

Just as in our previous assignment the \texttt{DATA} packet is actually a
\texttt{ACK} with an user data payload and the \emph{push} flag set.  These
input alphabets will influence the size of the model produced. \emph{small}
will result in a 2 state model, \emph{partial} will be the full model without
the \texttt{CLOSED} state and \emph{full} should result in the full model as
used in the previous assignment.

\begin{figure}[H]
	\centering
	\includegraphics[scale=0.75]{model.small.LStar.rand.eps}
	\vspace{5mm}
	\caption{Model learned with small input alphabet}
\end{figure}

\begin{figure}[H]
	\centering
	\includegraphics[width=\textwidth]{model.partial.LStar.rand.eps}
	\vspace{5mm}
	\caption{Model learned with partial input alphabet}
\end{figure}

\begin{figure}[H]
	\centering
	\includegraphics[width=1.2\textwidth]{model.full.LStar.rand.eps}
	\vspace{5mm}
	\caption{Model learned with full input alphabet}
\end{figure}
