231 lines
7.1 KiB
TeX
231 lines
7.1 KiB
TeX
\chapter{\label{results}Results}
|
|
%** Results.tex: What were the results achieved including an evaluation
|
|
%
|
|
This section describes the achieved results and compares the P4 based
|
|
implementation with real world software solutions.
|
|
|
|
We distinguish the software implementation of P4 (BMV2) and the
|
|
hardware implementation (NetFPGA) due to significant differences in
|
|
deployment and development. We present benchmarks for the existing
|
|
software solutions as well as for our hardware implementation. As the
|
|
objective of this thesis was to demonstrate the high speed
|
|
capabilities of NAT64 in hardware, no benchmarks were performed on the
|
|
P4 software implementation.
|
|
% ----------------------------------------------------------------------
|
|
\section{\label{results:p4}NAT64 Overview}
|
|
We successfully implemented P4 code to realise
|
|
NAT64\cite{schottelius:thesisrepo}. It contains parsers
|
|
for all related protocols (ipv6, ipv4, udp, tcp, icmp, icmp6, ndp,
|
|
arp), supports EAMT as defined by RFC7757 \cite{rfc7757} and is
|
|
feature equivalent to the two compared software solutions
|
|
tayga\cite{lutchansky:_tayga_simpl_nat64_linux} and
|
|
jool\cite{mexico:_jool_open_sourc_siit_nat64_linux}.
|
|
Due to limitations in the P4 environment of the
|
|
NetFPGA\cite{conclusion:netfpga} environment, the BMV2 implementation
|
|
is more feature rich. Table \ref{tab:benchmark} summarises the
|
|
achieved bandwidths of the NAT64 solutions.
|
|
|
|
\begin{table}[htbp]
|
|
\begin{center}\begin{minipage}{\textwidth}
|
|
\begin{tabular}{| c | c | c | c |}
|
|
\hline
|
|
Solution & \multicolumn{3}{|c|}{Parallel connections} \\
|
|
& 1 & 20 & 3 \\
|
|
\hline
|
|
Tayga & 3.02 & 3.28 & 2.85\\
|
|
\hline
|
|
Jool & 6.67 & 16.8 ?? & 20.5 udp?\\
|
|
\hline
|
|
P4 / NetPFGA & 9.28 & 9.29 & 9.29\\
|
|
\hline
|
|
\end{tabular}
|
|
\end{minipage}
|
|
\caption{NAT64 Benchmark (IPv6 initiating), all results in Gbit/sec (\%loss)}
|
|
\label{tab:benchmarkv6}
|
|
\end{center}
|
|
\end{table}
|
|
|
|
During the benchmarks the client
|
|
|
|
\begin{table}[htbp]
|
|
\begin{center}\begin{minipage}{\textwidth}
|
|
\begin{tabular}{| c | c | c | c |}
|
|
\hline
|
|
Solution & \multicolumn{3}{|c|}{Parallel connections} \\
|
|
& 1 & 20 & 3 \\
|
|
\hline
|
|
Tayga & 3.36 & 3.29 & 3.11 \\
|
|
\hline
|
|
Jool & 8.24 & 8.26 & 8.29\\
|
|
\hline
|
|
P4 / NetPFGA & 8.43 & 9.29 & 9.29\\
|
|
\hline
|
|
\end{tabular}
|
|
\end{minipage}
|
|
\caption{NAT64 Benchmark (IPv4 initiating), all results in Gbit/sec (\%loss)}
|
|
\label{tab:benchmarkv4}
|
|
\end{center}
|
|
\end{table}
|
|
|
|
|
|
% ----------------------------------------------------------------------
|
|
\section{\label{Results:BMV2}BMV2}
|
|
The software implementation of P4 features most features, which is
|
|
mostly due to available externs that can checksum the payload: Acting
|
|
as a ``proper'' participant in NDP, requires the host to calculate
|
|
checksums over the payload.
|
|
|
|
Responds to icmp, icmp6
|
|
ndp \cite{rfc4861}
|
|
arp
|
|
|
|
test framework openvswitch
|
|
|
|
Fully functional host
|
|
Can compute checksums on its own.
|
|
|
|
focus on typical use cases of icmp, icmp6, the software implementation
|
|
supports translating echo request and echo reply messages, but does
|
|
not support all ICMP/ICMP6 translations that are defined in
|
|
RFC6145\cite{rfc6145}.
|
|
|
|
Stateful : no automatic removal
|
|
|
|
% ----------------------------------------------------------------------
|
|
\section{\label{results:tayga}Tayga}
|
|
cpu bound, single thread
|
|
|
|
% ----------------------------------------------------------------------
|
|
|
|
\section{\label{results:jool}Jool}
|
|
|
|
|
|
% ----------------------------------------------------------------------
|
|
\section{\label{Results:NetPFGA}NetFPGA}
|
|
\subsection{\label{results:netpfga:checksum}Checksum computation}
|
|
\subsection{\label{results:netpfga:general}to be named}
|
|
|
|
|
|
Trace files
|
|
\begin{verbatim}
|
|
create mode 100644 pcap/tcp-udp-delta-2019-07-17-1555-h1.pcap
|
|
create mode 100644 pcap/tcp-udp-delta-2019-07-17-1555-h3.pcap
|
|
create mode 100644 pcap/tcp-udp-delta-2019-07-17-1557-h1.pcap
|
|
create mode 100644 pcap/tcp-udp-delta-2019-07-17-1558-h3.pcap
|
|
|
|
|
|
\end{verbatim}
|
|
|
|
\begin{verbatim}
|
|
*** DONE 2019-07-21: Proof of v6->v4 working delta based
|
|
CLOSED: [2019-07-21 Sun 12:30]
|
|
#+BEGIN_CENTER
|
|
pcap/tcp-udp-delta-from-v6-2019-07-21-0853-h1.pcap | Bin 0 -> 4252 bytes
|
|
pcap/tcp-udp-delta-from-v6-2019-07-21-0853-h3.pcap | Bin 0 -> 2544 bytes
|
|
#+END_CENTER
|
|
|
|
\end{verbatim}
|
|
|
|
\begin{verbatim}
|
|
**** DONE Testing v4->v6 tcp: ok (version 10.0)
|
|
CLOSED: [2019-08-04 Sun 09:15]
|
|
#+BEGIN_CENTER
|
|
nico@ESPRIMO-P956:~/master-thesis/bin$ ./socat-connect-tcp-v4
|
|
+ echo from-v4-ok
|
|
+ socat - TCP:10.0.0.66:2345
|
|
TCPv6-ok
|
|
nico@ESPRIMO-P956:~/master-thesis/bin$ ./socat-listen-tcp-v6
|
|
from-v4-ok
|
|
|
|
#+END_CENTER
|
|
|
|
trace:
|
|
netfpga-nat64-2019-08-04-0907-enp2s0f0.pcap
|
|
netfpga-nat64-2019-08-04-0907-enp2s0f1.pcap
|
|
|
|
**** DONE Testing v4->v6 udp: ok (version 10.1)
|
|
trace:
|
|
create mode 100644 pcap/netfpga-nat64-udp-2019-08-04-0913-enp2s0f0.pcap
|
|
create mode 100644 pcap/netfpga-nat64-udp-2019-08-04-0913-enp2s0f1.pcap
|
|
|
|
\end{verbatim}
|
|
|
|
\begin{verbatim}
|
|
*** DONE 2019-08-04: version 10.1/10.2: new maxpacketregion: v4->v6 works
|
|
CLOSED: [2019-08-04 Sun 19:42]
|
|
#+BEGIN_CENTER
|
|
nico@ESPRIMO-P956:~/master-thesis/bin$ ./init_ipv4_esprimo.sh
|
|
nico@ESPRIMO-P956:~/master-thesis/bin$ ./set_ipv4_neighbor.sh
|
|
|
|
#+END_CENTER
|
|
|
|
Test 20 first:
|
|
|
|
- Does't work -> missed to add table entries
|
|
- Does work after setting table entries
|
|
- 300 works
|
|
- 1450 works
|
|
- 1500 does not work
|
|
|
|
Proof:
|
|
|
|
create mode 100644 pcap/netfpga-10.2-maxpacket-2019-08-04-1931-enp2s0f0.pcap
|
|
create mode 100644 pcap/netfpga-10.2-maxpacket-2019-08-04-1931-enp2s0f1.pcap
|
|
|
|
\end{verbatim}
|
|
|
|
\begin{verbatim}
|
|
*** DONE 2019-08-04: test v6 -> v4: works for 1420
|
|
CLOSED: [2019-08-04 Sun 20:30]
|
|
|
|
Proof:
|
|
#+BEGIN_CENTER
|
|
create mode 100644 pcap/netfpga-10.2-fromv6tov4-2019-08-04-1943-enp2s0f0.pcap
|
|
create mode 100644 pcap/netfpga-10.2-fromv6tov4-2019-08-04-1943-enp2s0f1.pcap
|
|
|
|
|
|
\end{verbatim}
|
|
|
|
General result: limited NAT64 is working, however
|
|
|
|
No Payload
|
|
checksumming - requires controller
|
|
|
|
Hash funktion in Arbeit
|
|
|
|
No NDP, no ARP - focused on key factors of NAT64 translation,
|
|
other features can be supported by controller
|
|
|
|
\section{\label{results:softwarenat64}NAT64 in Software}
|
|
Tayga, Jool
|
|
|
|
tayga: Single threaded
|
|
fork:
|
|
|
|
\begin{verbatim}
|
|
| What? | Description | State in P4 | References |
|
|
|---------------------+------------------------------------------+-------------------+---------------------------------------------------------------------------------|
|
|
|
|
| Jool EAMT | Mapping with tables, multiple entries | Supported | https://www.jool.mx/en/eamt.html, https://www.jool.mx/en/run-eam.html, RFC 7757 |
|
|
| Jool SIIT | Mapping IPv6 to range of IPv4, one entry | Supported by EAMT | |
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
\section{\label{results:features}Feature comparison}
|
|
|
|
speed - sessions - eamt
|
|
can act as host
|
|
lpm tables
|
|
ping
|
|
ping6 support
|
|
ndp
|
|
controller support
|
|
|
|
\section{todo - FIXME: remove}
|
|
|
|
\begin{verbatim}
|
|
***** Dorth eher detailiertes Drawing
|
|
***** Längste Section!
|
|
|
|
\end{verbatim}
|