++graphs ++:oc
This commit is contained in:
parent
61b65341aa
commit
41703f19e0
6 changed files with 100 additions and 32 deletions
|
@ -29,15 +29,21 @@ are discussed in section \ref{conclusion:P4}.
|
|||
As opposed to general purpose programming languages, P4 lacks some
|
||||
features, most notably loops. However within its constraints, P4 can guarantee
|
||||
operation at line speed, which general purpose programming languages
|
||||
cannot guarantee in general and also fail to achieve in reality
|
||||
cannot guarantee and also fail to achieve in reality
|
||||
(see section \ref{results:softwarenat64} for details).
|
||||
|
||||
% ----------------------------------------------------------------------
|
||||
\section{\label{background:ipv6}IPv6}
|
||||
The first IPv6 RFC \cite{rfc2460} was published in 1998.
|
||||
\section{\label{background:ip}IPv6, IPv4 and Ethernet}
|
||||
The first IPv6 RFC was published in 1998\cite{rfc2460}. Both IPv4 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
|
||||
the higher level protocol identifier (0x0800 for IPv4 \cite{rfc894}
|
||||
and 0x86DD for IPv6 \cite{rfc2464}. This is important, because
|
||||
Ethernet can only carry either of the two protocols.
|
||||
The figures \ref{fig:ipv4header} and \ref{fig:ipv6header} show the
|
||||
packet headers of IPv4 and IPv6. The most notable differences between
|
||||
the two protocols for this project are:
|
||||
the two protocols for this thesis are:
|
||||
\begin{itemize}
|
||||
\item Different address lengths (32 vs 128 bit)
|
||||
\item Lack of checksum in IPv6
|
||||
|
@ -96,35 +102,71 @@ the two protocols for this project are:
|
|||
\caption{IPv4 Header, \cite{rfc791}}
|
||||
\label{fig:ipv4header}
|
||||
\end{figure}
|
||||
|
||||
++content!
|
||||
|
||||
% ----------------------------------------------------------------------
|
||||
\section{\label{background:transition}IPv6 Transition Mechanisms}
|
||||
While in this thesis the focus was in NAT64 as a transition mechanism,
|
||||
\section{\label{background:transition}IPv6 Translation Mechanisms}
|
||||
While in this thesis the focus was in NAT64 as a translation mechanism,
|
||||
there are a variety of different approaches, some of which we would
|
||||
like to portray here.
|
||||
% ----------------------------------------------------------------------
|
||||
\subsection{\label{background:transition:staticnat64}Static NAT64}
|
||||
Static NAT64 describes static mappings between IPv6 and IPv4
|
||||
addresses. This can be based on longest prefix matchings (LPM),
|
||||
ranges, bitmasks or individual entries.
|
||||
|
||||
proxying
|
||||
translations
|
||||
NAT64 translations as described in this thesis modify multiple layers
|
||||
in the translation process:
|
||||
|
||||
\begin{itemize}
|
||||
\item Ethernet (changing the type field)
|
||||
\item IPv4 / IPv6 (changing the protocol, changing the fields)
|
||||
\item TCP/UDP/ICMP/ICMP6 checksums
|
||||
\end{itemize}
|
||||
|
||||
% ----------------------------------------------------------------------
|
||||
\subsection{\label{background:transition:nat64}Static NAT64}
|
||||
1:1 mappings
|
||||
\subsection{\label{background:transition:statefulnat64}Stateful NAT64}
|
||||
Stateful NAT64 as defined in RFC6146\cite{rfc6146} defines how to
|
||||
cretate 1:n mappings between IPv6 and IPv4 hosts. The motivation for
|
||||
stateful NAT64 is similar to stateful NAT44\cite{/rfc3022}: it allows
|
||||
translating many IPv6 addresses to one IPv4 address. While the
|
||||
opposite translation is also technically possible, the differences in
|
||||
address space don't justify its use in general.
|
||||
|
||||
% ----------------------------------------------------------------------
|
||||
\subsection{\label{background:transition:nat64}Dynamic NAT64}
|
||||
1:n mappings, requesting temporary ID for connection, used for
|
||||
outgoing NAT64
|
||||
Stateful NAT64 in particular uses information in higher level
|
||||
protocols to multiplex connections: Given one IPv4 address and the tcp
|
||||
protocol, outgoing connections from IPv6 hosts can dynamically mapped
|
||||
to the range of possible tcp ports. After a session is closed, the
|
||||
port can be reused again.
|
||||
\begin{figure}[h]
|
||||
\includegraphics[scale=0.7]{statefulnat64}
|
||||
\centering
|
||||
\caption{Stateful NAT64}
|
||||
\label{fig:statefulnat64}
|
||||
\end{figure}
|
||||
The selection of mapped ports is usually based on the availability on
|
||||
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 usually NAT64 uses information found in protocols at layer 4
|
||||
like TCP \cite{rfc793} or UDP \cite{rfc768}. However it can also
|
||||
support ICMP \cite{rfc792} or ICMP6 \cite{rfc4443}.
|
||||
% ----------------------------------------------------------------------
|
||||
\subsection{\label{background:transition:Protocol dependent}Protocol
|
||||
dependent translation}
|
||||
http,
|
||||
https,
|
||||
TLS sni
|
||||
TLS1.3 SNI might be unreadable
|
||||
Disadvantage
|
||||
\subsection{\label{background:transition:Protocol dependent}Higher
|
||||
layer Protocol Dependent Translation}
|
||||
Further translation can be achieved by using information in higher
|
||||
level protocols like HTTP \cite{rfc2616} or TLS
|
||||
\cite{rfc4366}. Application proxies like nginx
|
||||
\cite{nginx:_nginx_high_perfor_load_balan} use layer 7 protocol
|
||||
information to proxy towards backends. Within this proxying method,
|
||||
the underlying IP protocol can be changed from IPv6 to IPv4 and vice
|
||||
versa. However the requested hostname that is usually used for
|
||||
selecting the backend is encrypted in TLS 1.3 \cite{rfc8446}, which
|
||||
poses a challenge for 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 translation
|
||||
|
||||
% ----------------------------------------------------------------------
|
||||
\subsection{\label{background:transition:Port based}Port based
|
||||
|
|
|
@ -74,7 +74,6 @@ extra device in the network, our proposed method is transparent to the
|
|||
user. This way neither the operator nor the end user has to configure
|
||||
extra devices. Figures \ref{fig:v6v4standard} shows the standard NAT64
|
||||
approach and \ref{fig:v6v4innetwork} shows our solution.
|
||||
|
||||
\begin{figure}[h]
|
||||
\includegraphics[scale=0.7]{v6-v4-innetwork}
|
||||
\centering
|
||||
|
@ -88,12 +87,17 @@ approach and \ref{fig:v6v4innetwork} shows our solution.
|
|||
\caption{Standard NAT64 translation}
|
||||
\label{fig:v6v4standard}
|
||||
\end{figure}
|
||||
|
||||
HERE: development difference
|
||||
Currently network operators have to focus on two network stacks when
|
||||
designing networks: IPv6 and IPv4. As To simplify network setups
|
||||
|
||||
|
||||
designing networks: IPv6 and IPv4. While in a small scale setup this
|
||||
might not introduce significant complexity, however figure
|
||||
\ref{fig:v6v4mixed} shows how the complexity quickly grows
|
||||
quickly with the number of nodes.
|
||||
\begin{figure}[h]
|
||||
\includegraphics[scale=0.4]{v6-v4-mixed}
|
||||
\centering
|
||||
\caption{Differenent network design with in network NAT64 translation}
|
||||
\label{fig:v6v4mixed}
|
||||
\end{figure}
|
||||
The in network solution does not only ease the installation and
|
||||
deployment of IPv6, but it also allows line speed translation, because
|
||||
it is compiled into target dependent low level code that can run in
|
||||
|
|
|
@ -9,7 +9,7 @@ to reproduce the test results. All compilations were made on Ubuntu
|
|||
\item 4.15.0-55-generic (Desktop with NetFPGA
|
||||
\end{itemize}
|
||||
|
||||
\section{\label{chapterminus1:thesis}Master Thesis}
|
||||
\section{\label{chapterminus1:thesis:general}Master Thesis}
|
||||
The master thesis including all self developed source code is
|
||||
available by git via
|
||||
|
||||
|
@ -19,7 +19,7 @@ git clone git@gitlab.ethz.ch:nicosc/master-thesis.git
|
|||
|
||||
It can be browsed online on \url{https://gitlab.ethz.ch/nicosc/master-thesis}.
|
||||
% ----------------------------------------------------------------------
|
||||
\section{\label{chapterminus1:thesis}Xilinx Toolchain}
|
||||
\section{\label{chapterminus1:thesis:xilinx}Xilinx Toolchain}
|
||||
A prerequisite for building the NetFGPA source code is the
|
||||
installation of
|
||||
\begin{itemize}
|
||||
|
@ -1542,6 +1542,7 @@ Describe your task.
|
|||
|
||||
\abbrev{ASIC}{Application-specific integrated circuit}
|
||||
\abbrev{FGPA}{Field-programmable gate array}
|
||||
\abbrev{LPM}{Longes prefix matching}
|
||||
\abbrev{NAT}{Network Address Translation}
|
||||
\abbrev{NAT64}{Network Address Translation from / to IPv6 to / from IPv4}
|
||||
\abbrev{RIR}{Regional Internet Registry}
|
||||
|
|
16
doc/graphviz/statefulnat64.dot
Normal file
16
doc/graphviz/statefulnat64.dot
Normal file
|
@ -0,0 +1,16 @@
|
|||
graph G {
|
||||
node [ shape="box"];
|
||||
|
||||
|
||||
v6host1 [ label="IPv6/TCP: [2001:db8::1]:2323"];
|
||||
v6host2 [ label="IPv6/TCP: [2001:db8::17]:4242"];
|
||||
|
||||
v4host [ label="IPv4/TCP: 198.51.100.2:4323, 198.51.100.2:3345"];
|
||||
|
||||
nat64gw [ label="NAT64 translator", rank=max ];
|
||||
|
||||
v6host1--nat64gw;
|
||||
v6host2--nat64gw;
|
||||
|
||||
nat64gw--v4host;
|
||||
}
|
BIN
doc/graphviz/statefulnat64.png
Normal file
BIN
doc/graphviz/statefulnat64.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
|
@ -78,3 +78,8 @@
|
|||
author = {ungleich},
|
||||
title = {Die IPv4, die!},
|
||||
howpublished = {\url{https://ungleich.ch/en-us/cms/blog/2019/01/09/die-ipv4-die/}}}
|
||||
|
||||
@Misc{nginx:_nginx_high_perfor_load_balan,
|
||||
author = {NGINX},
|
||||
title = {NGINX | High Performance Load Balancer, Web Server, & Reverse Proxy},
|
||||
howpublished = {\url{https://www.nginx.com/}}}
|
||||
|
|
Loading…
Reference in a new issue