|
|
|
@ -31,14 +31,14 @@ are discussed in section \ref{results:p4}.
|
|
|
|
|
As opposed to general purpose programming languages, P4 lacks some |
|
|
|
|
features. Most notably loops, floating point operations and |
|
|
|
|
modulo operations. |
|
|
|
|
However within its constraints, P4 can guarantee |
|
|
|
|
However, within its constraints, P4 can guarantee |
|
|
|
|
operation at line speed, which general purpose programming languages |
|
|
|
|
cannot guarantee and also fail to achieve in reality |
|
|
|
|
(see section \ref{results:softwarenat64} for details). |
|
|
|
|
% ok |
|
|
|
|
% ---------------------------------------------------------------------- |
|
|
|
|
\section{\label{background:ip}IPv6, IPv4 and Ethernet} |
|
|
|
|
The first IPv6 RFC was published in 1998~\cite{rfc2460}. Both IPv4 and |
|
|
|
|
The first IPv6 RFC was published in 1998~\cite{rfc2460}. Both IPv6 and |
|
|
|
|
IPv4 operate on layer 3 of the OSI model. In this thesis we only |
|
|
|
|
consider transmission via Ethernet, which operates at |
|
|
|
|
layer 2. Inside the Ethernet frame a field named ``type'' specifies |
|
|
|
@ -78,7 +78,7 @@ Figure \ref{fig:arpndp} illustrates a typical address resolution process.
|
|
|
|
|
\caption{ARP and NDP} |
|
|
|
|
\label{fig:arpndp} |
|
|
|
|
\end{figure} |
|
|
|
|
The major difference between ARP and NDP in relation to P4 are |
|
|
|
|
The major differences between ARP and NDP in relation to P4 are |
|
|
|
|
\begin{itemize} |
|
|
|
|
\item ARP is a separate protocol on the same layer as IPv6 and IPv4, |
|
|
|
|
\item NDP operates below ICMP6 which operates below IPv6, |
|
|
|
@ -87,7 +87,7 @@ The major difference between ARP and NDP in relation to P4 are
|
|
|
|
|
(specifically: ICMP6 link layer address option). |
|
|
|
|
\end{itemize} |
|
|
|
|
ARP is required to be a separate protocol, because IPv4 hosts don't |
|
|
|
|
know how to communicate with each other yet, because they don't have a |
|
|
|
|
know how to communicate with each other yet, as they don't have a |
|
|
|
|
way to communicate to the target IPv4 address (``The chicken and the |
|
|
|
|
egg problem''). |
|
|
|
|
NDP on the other hand already works within IPv6, as every IPv6 host is |
|
|
|
@ -228,10 +228,10 @@ port can be reused again.
|
|
|
|
|
\caption{Stateful NAT64} |
|
|
|
|
\label{fig:statefulnat64} |
|
|
|
|
\end{figure} |
|
|
|
|
The selection of mapped ports is usually based on the availability on |
|
|
|
|
The selection of mapped ports is usually based on the availability of |
|
|
|
|
the IPv4 side and not related to the original port. To support |
|
|
|
|
stateful NAT64, the translator needs to store the mapping in a table and |
|
|
|
|
purge entries regularly. |
|
|
|
|
stateful NAT64, the translator needs to store the mapping |
|
|
|
|
in a table and purge entries regularly. |
|
|
|
|
|
|
|
|
|
Stateful NAT64 usually uses information found in protocols at layer 4 |
|
|
|
|
like TCP~\cite{rfc793} or UDP~\cite{rfc768}. However, it can also |
|
|
|
@ -255,7 +255,7 @@ implementations.
|
|
|
|
|
While protocol dependent translation has the highest amount of |
|
|
|
|
information to choose from for translation, complex parsers or even |
|
|
|
|
cryptographic methods are required for it. That reduces the |
|
|
|
|
opportunities of protocol dependent translations to run on devices |
|
|
|
|
opportunities for) protocol dependent translations to run on devices |
|
|
|
|
with less sophisticated devices. |
|
|
|
|
% ---------------------------------------------------------------------- |
|
|
|
|
\subsection{\label{background:transition:prefixnat}Mapping IPv4 |
|
|
|
@ -340,7 +340,7 @@ The DNS64 DNS server will query the authoritative DNS server for an AAAA
|
|
|
|
|
record. However as the host \textit{ipv4onlyhost.example.com} is only |
|
|
|
|
reachable by IPv4, it also only has an A entry. After receiving the |
|
|
|
|
answer that there is no AAAA record, the DNS64 server will ask for an |
|
|
|
|
A record and gets an answer that the name |
|
|
|
|
A record and will get an answer that the name |
|
|
|
|
\textit{ipv4onlyhost.example.com} resolves to the IPv4 address |
|
|
|
|
\textit{192.0.2.0}. The DNS64 server then embeds the IPv4 address in |
|
|
|
|
the configured IPv6 prefix (\textit{64:ff9b::/96} in this case) and |
|
|
|
@ -388,10 +388,10 @@ defined in RFC768 and RFC793 and are shown in \ref{fig:ipv4pseudoheader}.
|
|
|
|
|
\label{fig:ipv6pseudoheader} |
|
|
|
|
\end{figure} |
|
|
|
|
When translating, the checksum fields in the higher protocols need to be |
|
|
|
|
adjusted. The checksums for TCP and UDP is calculated not only over the pseudo |
|
|
|
|
adjusted. The checksums for TCP and UDP are calculated not only over the pseudo |
|
|
|
|
headers, but also contain the payload of the packet. This is |
|
|
|
|
important because some targets (like the NetFPGA) do not allow to |
|
|
|
|
access the payload (see section \ref{design:netpfga}). |
|
|
|
|
important because some targets (like the NetFPGA) do not allow |
|
|
|
|
accessing the payload (see section \ref{design:netpfga}). |
|
|
|
|
\begin{figure}[h] |
|
|
|
|
\begin{verbatim} |
|
|
|
|
0 7 8 15 16 23 24 31 |
|
|
|
@ -419,12 +419,6 @@ Its calculation can be summarised as follows:
|
|
|
|
|
|
|
|
|
|
% ---------------------------------------------------------------------- |
|
|
|
|
\section{\label{background:networkdesign}Network Designs} |
|
|
|
|
%% \begin{figure}[h] |
|
|
|
|
%% \includegraphics[scale=0.5]{v4only} |
|
|
|
|
%% \centering |
|
|
|
|
%% \caption{IPv4 only network} |
|
|
|
|
%% \label{fig:v4onlynet} |
|
|
|
|
%% \end{figure} |
|
|
|
|
In relation to IPv6 and IPv4, there are in general three different |
|
|
|
|
network designs possible: |
|
|
|
|
The oldest form are IPv4 only networks. |
|
|
|
@ -433,12 +427,6 @@ hosts that are either not configured for IPv6 or are even technically
|
|
|
|
|
incapable of enabling the IPv6 protocol. These nodes are connected to |
|
|
|
|
an IPv4 router that is connected to the Internet. That router might be |
|
|
|
|
capable of translating IPv4 to IPv6 and vice versa. |
|
|
|
|
%% \begin{figure}[h] |
|
|
|
|
%% \includegraphics[scale=0.5]{dualstack} |
|
|
|
|
%% \centering |
|
|
|
|
%% \caption{Dualstack network} |
|
|
|
|
%% \label{fig:dualstacknet} |
|
|
|
|
%% \end{figure} |
|
|
|
|
|
|
|
|
|
With the introduction of IPv6, hosts can have a separate IP stack |
|
|
|
|
active and in that configuration hosts are called ``dualstack hosts''. |
|
|
|
@ -446,8 +434,8 @@ Dualstack hosts are capable of reaching both IPv6 and IPv4 hosts
|
|
|
|
|
directly without the need of any translation mechanism. |
|
|
|
|
|
|
|
|
|
The last possible network design is based on IPv6 only hosts. |
|
|
|
|
While it is technically easy to disable IPv4, it |
|
|
|
|
seems that completely removing the IPv4 stack in current operating |
|
|
|
|
While it is technically easy to disable IPv4, |
|
|
|
|
completely removing the IPv4 stack in current operating |
|
|
|
|
systems is not an easy task~\cite{ungleich:_ipv4}. |
|
|
|
|
%% \begin{figure}[h] |
|
|
|
|
%% \includegraphics[scale=0.5]{v6only} |
|
|
|
@ -458,7 +446,7 @@ systems is not an easy task~\cite{ungleich:_ipv4}.
|
|
|
|
|
While the three network designs look similar, there are significant |
|
|
|
|
differences in operating them and limitations that are not easy to |
|
|
|
|
circumvent. In the following sections, we describe the limitations and |
|
|
|
|
reason how a translation mechanism like our NAT64 implementation |
|
|
|
|
explain how a translation mechanism like our NAT64 implementation |
|
|
|
|
should be deployed. |
|
|
|
|
% ---------------------------------------------------------------------- |
|
|
|
|
\subsection{\label{background:networkdesign:ipv4}IPv4 only network limitations} |
|
|
|
@ -478,14 +466,14 @@ IPv6 addresses independent of the protocol is not possible.
|
|
|
|
|
maintenance} |
|
|
|
|
While dualstack hosts can address any host in either IPv6 or IPv4 |
|
|
|
|
networks, the deployment of dualstack hosts comes with a major |
|
|
|
|
disadvantage: all network configuration double. The required routing |
|
|
|
|
disadvantage: all network configurations double. The required routing |
|
|
|
|
tables double, the firewall rules roughly double\footnote{The rule sets |
|
|
|
|
even for identical policies in IPv6 and IPv4 networks are not |
|
|
|
|
identical, but similar. For this reason we state that roughly double |
|
|
|
|
the amount of firewall rules are required for the same policy to be |
|
|
|
|
applied.} and the number of network supporting systems, (like DHCPv4, |
|
|
|
|
DHCPv6, router advertisement daemons, etc.) also roughly double. |
|
|
|
|
Additionally services that run on either IPv6 or IPv4 might need to be |
|
|
|
|
Additionally, services that run on either IPv6 or IPv4 might need to be |
|
|
|
|
configured to run in dualstack mode as well and not every software |
|
|
|
|
might be capable of that. |
|
|
|
|
So while there is the instant benefit of not requiring any transition mechanism |
|
|
|
@ -494,7 +482,7 @@ operational cost) of running dual stack networks can be significant.
|
|
|
|
|
% ---------------------------------------------------------------------- |
|
|
|
|
\subsection{\label{background:networkdesign:v6only}IPv6 only networks} |
|
|
|
|
IPv6 only networks are in our opinion the best choice for long term |
|
|
|
|
deployments. The reasons for this are as follows: First of all hosts |
|
|
|
|
deployments. Our reasons for this are the following: First of all hosts |
|
|
|
|
eventually will need to support IPv6 and secondly |
|
|
|
|
IPv6 hosts can address the whole 32 bit IPv4 Internet mapped in |
|
|
|
|
a single /96 IPv6 network. IPv6 only networks also allow the operators |
|
|
|
@ -510,7 +498,7 @@ to focus on one IP stack.
|
|
|
|
|
The NetFPGA~\cite{zilberman:_netfp_sume} |
|
|
|
|
is an FPGA card featuring four 10 Gbit/s SFP+ ports. It |
|
|
|
|
includes the Xilinx Virtex-7 690T FPGA on board, 27 MB of storage, |
|
|
|
|
allowing to save table data, and 8 GB of DDR3 RAM. The NetFPGA can be |
|
|
|
|
to save table data, and 8 GB of DDR3 RAM. The NetFPGA can be |
|
|
|
|
run inside a host (connected by PCI-E, gen 3) or as a standalone |
|
|
|
|
card. |
|
|
|
|
|
|
|
|
|