%\documentclass[12pt,xcolor=x11names,compress,a4paper]{beamer}
\documentclass[15pt,xcolor=x11names]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
%\usepackage{ucs}
\usepackage[T1]{fontenc}
%\usepackage{amsmath}
%\usepackage{amsfonts}
%\usepackage{amssymb}
%\usepackage{mathtools}
%\usepackage{mathrsfs}

\usepackage{verbatim}
%\usepackage{color}
\usepackage{graphicx}
\usepackage{tikz}
%\usetikzlibrary{decorations.fractals}
\usetikzlibrary{snakes,arrows,shapes}

%% Beamer Layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\useoutertheme[subsection=false,shadow]{miniframes}
%\useoutertheme{infolines}
\useinnertheme{default}
%\usefonttheme{serif}
%\usepackage{palatino}
%\usepackage{inconsolata}

\setbeamerfont{title like}{shape=\scshape}
\setbeamerfont{frametitle}{shape=\scshape}

\setbeamercolor*{lower separation line head}{bg=DeepSkyBlue4} 
\setbeamercolor*{normal text}{fg=black,bg=white} 
\setbeamercolor*{alerted text}{fg=red} 
\setbeamercolor*{example text}{fg=black} 
\setbeamercolor*{structure}{fg=black} 
% 
\setbeamercolor*{palette tertiary}{fg=black,bg=black!10} 
\setbeamercolor*{palette quaternary}{fg=black,bg=black!10} 
%
\definecolor{my-light-blue}{HTML}{D3DCEC}
\definecolor{my-dark-blue}{HTML}{093A7A}
\definecolor{my-dark-blue2}{HTML}{00688B}
\definecolor{my-light-red}{HTML}{FFBABA}
\definecolor{my-dark-red}{HTML}{D51111}
\definecolor{my-light-green}{HTML}{7BEF71}
\definecolor{my-dark-green}{HTML}{00D000}
\definecolor{my-light-grey}{HTML}{E6E6E6}
%
\setbeamertemplate{blocks}[rounded]
\setbeamercolor{block body}{bg=my-light-blue}
\setbeamercolor{block title}{bg=my-dark-blue2,fg=white}
\setbeamercolor{block body alerted}{bg=my-light-red}
\setbeamercolor{block title alerted}{bg=my-dark-red,fg=white}
\setbeamercolor{block body example}{bg=my-light-green}
\setbeamercolor{block title example}{bg=my-dark-green,fg=white}

\setbeamertemplate{navigation symbols}{}
% From /usr/share/texmf-dist/tex/latex/beamer/themes/outer/beamerouterthemeinfolines.sty
\setbeamertemplate{footline}{
\begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex,right]{parent=palette primary}
\scriptsize{
  \vspace*{0.1cm}\insertframenumber/\inserttotalframenumber\hspace*{0.1cm}
}
\end{beamercolorbox}
}

%\renewcommand{\(}{\begin{columns}}
%\renewcommand{\)}{\end{columns}}
%\newcommand{\lcol}{\begin{column}[l]{0.5\textwidth}}
%\newcommand{\rcol}{\begin{column}[r]{0.5\textwidth}}
%\renewcommand{\>}{\end{column}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\sep}{$\; \triangleright \ $}

\title[IPv6]{Introduction à IPv6}

\author[B. Jonglez]{Baptiste Jonglez}

\institute{JDLL 2015}

\date[29/03/2015]{29 mars 2015}

\begin{document}

\begin{frame}
\maketitle
\end{frame}

% Plan : rester abordable.
% - carte d'Internet, comment tout ça tient debout, qu'est qu'IP
% - problèmes liés à IPv4 : exhaustion, complexité & coût qui s'ensuivent (NAT, CGNAT).  Expliquer le NAT (avec des figures plus jolies).  Problème du NAT, expliqué simplement : plusieurs personnes ont le même numéro de téléphone !  Plus précisément, pose problème pour certains protocoles (SIP/VoIP), coût énorme en conception et développement, coût du matériel pour les CGNAT + logs
% - nouveaux besoins : nombreux appareils, connectivité de bout en bout pour P2P/VOIP/etc (ou pas ?), multihoming
% - différences fondamentales : taille de l'espace, auto-configuration
% - format des adresses IPv6
% - c'est compliqué ?  Il y a le DNS !
% - en pratique, qu'est ce que ça change ? → du point de vue utilisateur, pas grand chose !  C'est juste une évolution nécessaire (et douloureuse).  Dual stack (forme de compatibilité)
% - mythes : IPv6 n'est pas sécurisé (pas de NAT), IPv6 ne sert à rien parce que personne ne l'a déployé, etc
% - références : Lothaire Yarding, blog bortzmeyer, RIPE, présentation Ju

% → peut-être trop ambitieux, se limiter à des choses plus pratiques ?

\section*{Introduction}

\begin{frame}
\frametitle{Une carte d'Internet}
%\begin{figure}[h]
%  \centering
%  \includegraphics[scale=0.6]{figures/Ipv4-exhaust.eps}
%  \caption{}
%\end{figure}
\end{frame}

\begin{frame}
\frametitle{Internet Protocol}

\begin{alertblock}{Un protocole commun}
  \textbf{Internet Protocol} (IP) est le protocole commun à toutes les machines d'Internet
\end{alertblock}

\begin{block}{Service fourni}
  \begin{itemize}
  \item Adressage (qui je suis)
  \item Routage (où je suis et comment me joindre)
  \item \ldots{} et c'est à peu près tout
  \end{itemize}
\end{block}
\end{frame}

\begin{frame}
\frametitle{Place dans le modèle TCP/IP}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.3]{figures/couches.eps}
\end{figure}
\end{frame}

\begin{frame}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.6]{figures/Ipv4-exhaust.eps}
  \caption{Espace libre dans le pool d'adresses IPv4. Crédit : CC-BY-SA Mro (Wikimédia) }
\end{figure}
\end{frame}


\section{Remplacer IPv4}

\begin{frame}
\frametitle{Remplacer IPv4, pourquoi ?}

\begin{block}{IPv4 n'est plus adapté}
\begin{itemize}
\item 32 bits : \textbf{4 milliards d'adresses} (moins en
  pratique)
\item Complexité
\item Nouveaux besoins (mobilité, auto-configuration, multi-homing)
\end{itemize}
\end{block}

Réflexion sur un successeur à IPv4 dès 1993 : \textbf{IPng}

\end{frame}



% A partir d'ici, tri à faire



\section{Typologie}

\begin{frame}
\frametitle{Place dans le modèle TCP/IP}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.3]{figures/couches.eps}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{En-tête d'un paquet IPv4}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.6]{figures/IPv4_Header.eps}
  \caption{En-tête de paquet IPv4. Crédit : CC-BY-SA Bruno Wenk (Wikimédia)}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{En-tête d'un paquet IPv6}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.4]{figures/Ipv6_header.eps}
  \caption{En-tête de paquet IPv4. Crédit : CC-BY-SA Mro (Wikimédia)}
\end{figure}
\end{frame}


\begin{frame}
\frametitle{Format de paquet}
RFC 2460
\begin{block}{Particularités}
  \begin{itemize}
  \item Beaucoup plus simple
  \item Plus souple : liste chaînée d'en-têtes optionnels
  \end{itemize}
\end{block}

\begin{block}{Extensibilité}<2->
  Tout est déporté dans le Next Header :
  \begin{itemize}
  \item Fragmentation (uniquement réalisée par l'expéditeur)
  \item Mobilité
  \item Sécurité (IPsec)
  \item \og piggyback\fg{} (informations de routage, \ldots{})
  \end{itemize}
\end{block}
\end{frame}

\begin{frame}
\frametitle{En-tête d'un paquet IPv6}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.4]{figures/Ipv6_header.eps}
  \caption{En-tête de paquet IPv6. Crédit : CC-BY-SA Mro (Wikimédia)}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{Format des en-têtes facultatifs}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.4]{figures/next-header.eps}
  \caption{Exemple d'en-tête facultatif via l'utilisation de \og Next Header\fg{}}
\end{figure}
\end{frame}

\begin{frame}[fragile]
\frametitle{Format des adresses et adressage}
% RFC 4291

\begin{block}{Adresses}
  \begin{itemize}
  \item Adresses sur 128 bits
  \item Notation hexa par bloc de 16 bits \sep \verb+2001:db8:cafe:deca:0:0:0:1+
  \item Compression de zéros \sep \verb+2001:db8:cafe:deca::1+
  \end{itemize}
\end{block}


\begin{block}{Sous-réseaux}<2->
  \begin{itemize}
  \item Deux parties :
    \begin{itemize}
    \item \textbf{préfixe} ou \textbf{identifiant de sous-réseau}
      (subnet ID) : partie gauche de l'adresse
    \item \textbf{identifiant de machine} (host ID) : partie droite
    \end{itemize}
  \item notation CIDR :
    \begin{itemize}
    \item \verb+2001:db8:cafe:deca:a9e:1ff:fe6b:25c9/64+
    \item subnet correspondant \sep \verb+2001:db8:cafe:deca::+
    \end{itemize}
  \end{itemize}
\end{block}
\end{frame}


\begin{frame}[fragile]
\frametitle{Exemples d'adresses et des préfixes}
\begin{block}{Préfixes}
  \begin{itemize}
  \item<1-> Préfixe de documentation \sep \verb+2001:db8::/32+
  \item<2-> Préfixe link-local \sep \verb+fe80::/10+
  \item<3-> Préfixe multicast \sep \verb+ff02::/10+
  \item<4-> Exemple de préfixe \og end-user\fg{} \sep \verb+2001:db8:fada:ba00:/56+
  \end{itemize}
\end{block}

\begin{block}{Adresses}<5->
  \begin{itemize}
  \item Unicast \sep \verb+2001:db8:cafe:deca:a9e:1ff:fe6b:25c9/64+
  \item Link-local \sep \verb+fe80::a9e:1ff:fe6b:25c9/64+
  \item<6-> Notation IPv4 \sep \verb+2001:db8::cafe:192.168.0.1+ égal
    à \verb+2001:db8::cafe:c0a8:1+
  \item<7-> Localhost \sep \verb+::1+
  \item<7-> Tout les bits à 0 \sep \verb+::+
  \end{itemize}
\end{block}
\end{frame}

\section{Avantages}

\begin{frame}
\frametitle{Taille de l'espace d'adressage}
\begin{alertblock}{IPv4}
  \begin{itemize}
  \item Une seule IP publique par abonné
  \item Adresses \textbf{non routables} et \textbf{non globalement uniques}
  \item Technologie de traduction d'adresses (NAT) qui casse le
    \textbf{end-to-end principle}
  \end{itemize}
\end{alertblock}

\begin{block}{IPv6}<0>
  \begin{itemize}
  \item Plus petit sous-réseau : \textbf{/64}, soit $2^{64}$ adresses
  \item On ne distribue plus des \textbf{adresses}, mais des \textbf{sous-réseaux}
  \end{itemize}
\end{block}

\end{frame}

\begin{frame}
\frametitle{Traduction d'adresses (NAT) en IPv4 (1)}

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.28]{figures/nat1.eps}
  \caption{L1, L2, L3 sont des adresses locales. Le routeur qui fait du NAT, N3, possède également une adresse publique A.}
\end{figure}

\end{frame}
\begin{frame}
\frametitle{Traduction d'adresses (NAT) en IPv4 (2)}

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.28]{figures/nat2.eps}
  \caption{N2 envoie un paquet vers M. Notons que l'on distingue hôte
    (nœud) et adresse d'une interface.}
\end{figure}

\end{frame}
\begin{frame}
\frametitle{Traduction d'adresses (NAT) en IPv4 (3)}

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.28]{figures/nat3.eps}
  \caption{N3 retient qu'il a vu passer un paquet de L2 vers B, et change l'adresse source du paquet pour faire croire que ça vient de lui.}
\end{figure}

\end{frame}
\begin{frame}
\frametitle{Traduction d'adresses (NAT) en IPv4 (4)}

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.28]{figures/nat4.eps}
  \caption{M répond à N3, puisque du point de vue de M, c'est N3 qui a envoyé le paquet au départ.}
\end{figure}

\end{frame}
\begin{frame}
\frametitle{Traduction d'adresses (NAT) en IPv4 (5)}

\begin{figure}[h]
  \centering
  \includegraphics[scale=0.28]{figures/nat5.eps}
  \caption{N3 se sert de l'information qu'il avait retenu pour renvoyer le paquet à la bonne machine locale.}
\end{figure}
\end{frame}

\begin{frame}
\frametitle{Traduction d'adresses (NAT) en IPv4 (6)}
\begin{block}{En pratique}
  \begin{itemize}
  \item Couple $(source, destination)$ non suffisant : non unique
  \item TCP et UDP : $(port\ source, port\ destination)$ en plus
  \item ICMP : \textbf{sequence number} et type de paquet
  \end{itemize}
\end{block}

\begin{alertblock}{Bref\ldots{}}<2->
  C'est le mal !
  \begin{itemize}
  \item Pas de communication de bout en bout
  \item Dépend d'une couche supérieure (transport, ICMP)
  \item Système \textbf{avec état} : SPOF (Single Point Of Failure)
  \end{itemize}
\end{alertblock}

\uncover<3->{Et très bientôt, \textbf{Carrier-grade NAT} (CGNAT) au niveau du FAI}

\end{frame}


\begin{frame}
\frametitle{Espace d'adressage}
\begin{alertblock}{IPv4}
  \begin{itemize}
  \item Une seule IP publique par abonné
  \item Adresses \textbf{non routables} et \textbf{non globalement uniques}
  \item Technologie de traduction d'adresses (NAT) qui casse le
    \textbf{end-to-end principle}
  \end{itemize}
\end{alertblock}

\begin{exampleblock}{IPv6}<2->
  Chaque machine a une adresse globalement routable !
  \begin{itemize}
  \item Plus petit sous-réseau : \textbf{/64}, soit $2^{64}$ adresses
  \item On ne donne plus des \textbf{adresses}, mais des \textbf{sous-réseaux}
  \end{itemize}
\end{exampleblock}
\end{frame}

\begin{frame}[fragile]
\frametitle{Attribution d'adresses}

\begin{block}{IPv4}
  \begin{itemize}
  \item Attribué par DHCP
  \item Peut changer, car c'est le serveur DHCP qui décide
  \end{itemize}
\end{block}

\begin{block}{IPv6}<2->
  Stateless autoconfiguration :
  \begin{itemize}
  \item Le routeur annonce son préfixe \sep \verb+2001:db8:deca::/64+
  \item Chaque machine \textbf{choisit} son adresse (au hasard, ou
    calculé à partir de l'adresse MAC, d'où le /64). \sep
    Unicité\ldots{}
  \end{itemize}
\end{block}

\begin{exampleblock}{Avantages}<3->
\begin{itemize}
\item \textbf{Sans état}
\item Beaucoup plus simple et rapide
\item Plusieurs routeurs peuvent annoncer leur préfixe
\end{itemize}
\end{exampleblock}
\end{frame}

\begin{frame}[fragile]
\frametitle{Adresses link-local}

Préfixe \verb+fe80::/10+

\begin{block}{Principe}
  \begin{itemize}
  \item Toujours présente sur une interface, sans configuration
  \item Calculé via l'adresse MAC (unicité)
  \item Non routable
  \end{itemize}
\end{block}
\begin{block}{Intérêt}<2->
  \begin{itemize}
  \item Permet de communiquer avec les machines du même réseau L2
  \item Découverte de services, informations de routage, \ldots{}
  \end{itemize}
\end{block}
\end{frame}

\section{Cohabitation}

\begin{frame}[fragile]
\frametitle{Cohabitation}

\begin{block}{Dual stack}
  \begin{itemize}
  \item IPv4 et IPv6 peuvent cohabiter !
  \end{itemize}
\end{block}
\begin{block}{DNS}<2->
  \begin{itemize}
  \item Deux enregistrements dans le DNS
    \begin{itemize}
    \item example.net  A   192.168.42.1
    \item example.net AAAA \verb+2001:db8::1337:1+
    \end{itemize}
  \item On essaie d'abord l'IPv6, puis l'IPv4. Code transparent !
    \begin{itemize}
    \item En C, utiliser \texttt{getaddrinfo()}
    \end{itemize}
  \end{itemize}
\end{block}
\begin{alertblock}{Écoute sur un socket}<3->
  \begin{itemize}
  \item Problème : besoin de deux sockets qui écoutent ?
  \item<4-> Non ! Un seul socket qui fait tout.
  \item<4-> Astuce : adresses IPv4-mapped \sep \verb+::ffff:192.168.42.1+
  \end{itemize}
\end{alertblock}
\end{frame}

\section*{Conclusion}

\begin{frame}
\frametitle{Conclusion}
\begin{block}{Avantages}
  \begin{itemize}
  \item Espace plus grand, plus besoin de NAT
  \item Auto-configuration : ça juste marche !
  \item Cohabitation grâce au DNS
  \item Applications prêtes depuis 15 ans
  \end{itemize}
\end{block}
\begin{block}{Qu'est ce qu'on attend ?}<2->
  \begin{itemize}
  \item Déploiement au niveau hôtes (\og fournisseurs de contenu\fg{})
    \begin{itemize}
    \item Google, Facebook, plein de petits
    \end{itemize}
  \item Déploiement des FAI
    \begin{itemize}
    \item Free, FDN, Illyse \ldots mais pas \alert{Orange}
    \end{itemize}
  \end{itemize}
\end{block}
\begin{block}{En attendant}<3->
  Plein de technologies de transition pour s'amuser (6to4, 6in4,
  Teredo, NAT64, DNS64), tunnel brokers
\end{block}
\end{frame}

\begin{frame}
\frametitle{Questions ?}
\begin{figure}[h]
  \centering
  \includegraphics[scale=0.4]{figures/aviancarrier.jpg}
  \caption{RFC 6214 : Avian carriers over IPv6 !}
\end{figure}
\end{frame}



\end{document}
