presentation-ipv6.tex 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. %\documentclass[12pt,xcolor=x11names,compress,a4paper]{beamer}
  2. \documentclass[15pt,xcolor=x11names]{beamer}
  3. \usepackage[utf8]{inputenc}
  4. \usepackage[french]{babel}
  5. %\usepackage{ucs}
  6. \usepackage[T1]{fontenc}
  7. %\usepackage{amsmath}
  8. %\usepackage{amsfonts}
  9. %\usepackage{amssymb}
  10. %\usepackage{mathtools}
  11. %\usepackage{mathrsfs}
  12. \usepackage{verbatim}
  13. %\usepackage{color}
  14. \usepackage{graphicx}
  15. \usepackage{tikz}
  16. %\usetikzlibrary{decorations.fractals}
  17. \usetikzlibrary{snakes,arrows,shapes}
  18. %% Beamer Layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  19. \useoutertheme[subsection=false,shadow]{miniframes}
  20. %\useoutertheme{infolines}
  21. \useinnertheme{default}
  22. %\usefonttheme{serif}
  23. %\usepackage{palatino}
  24. %\usepackage{inconsolata}
  25. \setbeamerfont{title like}{shape=\scshape}
  26. \setbeamerfont{frametitle}{shape=\scshape}
  27. \setbeamercolor*{lower separation line head}{bg=DeepSkyBlue4}
  28. \setbeamercolor*{normal text}{fg=black,bg=white}
  29. \setbeamercolor*{alerted text}{fg=red}
  30. \setbeamercolor*{example text}{fg=black}
  31. \setbeamercolor*{structure}{fg=black}
  32. %
  33. \setbeamercolor*{palette tertiary}{fg=black,bg=black!10}
  34. \setbeamercolor*{palette quaternary}{fg=black,bg=black!10}
  35. %
  36. \definecolor{my-light-blue}{HTML}{D3DCEC}
  37. \definecolor{my-dark-blue}{HTML}{093A7A}
  38. \definecolor{my-dark-blue2}{HTML}{00688B}
  39. \definecolor{my-light-red}{HTML}{FFBABA}
  40. \definecolor{my-dark-red}{HTML}{D51111}
  41. \definecolor{my-light-green}{HTML}{7BEF71}
  42. \definecolor{my-dark-green}{HTML}{00D000}
  43. \definecolor{my-light-grey}{HTML}{E6E6E6}
  44. %
  45. \setbeamertemplate{blocks}[rounded]
  46. \setbeamercolor{block body}{bg=my-light-blue}
  47. \setbeamercolor{block title}{bg=my-dark-blue2,fg=white}
  48. \setbeamercolor{block body alerted}{bg=my-light-red}
  49. \setbeamercolor{block title alerted}{bg=my-dark-red,fg=white}
  50. \setbeamercolor{block body example}{bg=my-light-green}
  51. \setbeamercolor{block title example}{bg=my-dark-green,fg=white}
  52. \setbeamertemplate{navigation symbols}{}
  53. % From /usr/share/texmf-dist/tex/latex/beamer/themes/outer/beamerouterthemeinfolines.sty
  54. \setbeamertemplate{footline}{
  55. \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex,right]{parent=palette primary}
  56. \scriptsize{
  57. \vspace*{0.1cm}\insertframenumber/\inserttotalframenumber\hspace*{0.1cm}
  58. }
  59. \end{beamercolorbox}
  60. }
  61. %\renewcommand{\(}{\begin{columns}}
  62. %\renewcommand{\)}{\end{columns}}
  63. %\newcommand{\lcol}{\begin{column}[l]{0.5\textwidth}}
  64. %\newcommand{\rcol}{\begin{column}[r]{0.5\textwidth}}
  65. %\renewcommand{\>}{\end{column}}
  66. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  67. \newcommand{\sep}{$\; \triangleright \ $}
  68. \title[IPv6]{Introduction à IPv6}
  69. \author[B. Jonglez]{Baptiste Jonglez}
  70. \institute{JDLL 2015}
  71. \date[29/03/2015]{29 mars 2015}
  72. \begin{document}
  73. \begin{frame}
  74. \maketitle
  75. \end{frame}
  76. % Plan : rester abordable.
  77. % - carte d'Internet, comment tout ça tient debout, qu'est qu'IP
  78. % - 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
  79. % - nouveaux besoins : nombreux appareils, connectivité de bout en bout pour P2P/VOIP/etc (ou pas ?), multihoming
  80. % - différences fondamentales : taille de l'espace, auto-configuration
  81. % - format des adresses IPv6
  82. % - c'est compliqué ? Il y a le DNS !
  83. % - 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é)
  84. % - mythes : IPv6 n'est pas sécurisé (pas de NAT), IPv6 ne sert à rien parce que personne ne l'a déployé, etc
  85. % - références : Lothaire Yarding, blog bortzmeyer, RIPE, présentation Ju
  86. % → peut-être trop ambitieux, se limiter à des choses plus pratiques ?
  87. \section*{Introduction}
  88. \begin{frame}
  89. \frametitle{Une carte d'Internet}
  90. %\begin{figure}[h]
  91. % \centering
  92. % \includegraphics[scale=0.6]{figures/Ipv4-exhaust.eps}
  93. % \caption{}
  94. %\end{figure}
  95. \end{frame}
  96. \begin{frame}
  97. \frametitle{Internet Protocol}
  98. \begin{alertblock}{Un protocole commun}
  99. \textbf{Internet Protocol} (IP) est le protocole commun à toutes les machines d'Internet
  100. \end{alertblock}
  101. \begin{block}{Service fourni}
  102. \begin{itemize}
  103. \item Adressage (qui je suis)
  104. \item Routage (où je suis et comment me joindre)
  105. \item \ldots{} et c'est à peu près tout
  106. \end{itemize}
  107. \end{block}
  108. \end{frame}
  109. \begin{frame}
  110. \frametitle{Place dans le modèle TCP/IP}
  111. \begin{figure}[h]
  112. \centering
  113. \includegraphics[scale=0.3]{figures/couches.eps}
  114. \end{figure}
  115. \end{frame}
  116. \begin{frame}
  117. \begin{figure}[h]
  118. \centering
  119. \includegraphics[scale=0.6]{figures/Ipv4-exhaust.eps}
  120. \caption{Espace libre dans le pool d'adresses IPv4. Crédit : CC-BY-SA Mro (Wikimédia) }
  121. \end{figure}
  122. \end{frame}
  123. \section{Remplacer IPv4}
  124. \begin{frame}
  125. \frametitle{Remplacer IPv4, pourquoi ?}
  126. \begin{block}{IPv4 n'est plus adapté}
  127. \begin{itemize}
  128. \item 32 bits : \textbf{4 milliards d'adresses} (moins en
  129. pratique)
  130. \item Complexité
  131. \item Nouveaux besoins (mobilité, auto-configuration, multi-homing)
  132. \end{itemize}
  133. \end{block}
  134. Réflexion sur un successeur à IPv4 dès 1993 : \textbf{IPng}
  135. \end{frame}
  136. % A partir d'ici, tri à faire
  137. \section{Typologie}
  138. \begin{frame}
  139. \frametitle{Place dans le modèle TCP/IP}
  140. \begin{figure}[h]
  141. \centering
  142. \includegraphics[scale=0.3]{figures/couches.eps}
  143. \end{figure}
  144. \end{frame}
  145. \begin{frame}
  146. \frametitle{En-tête d'un paquet IPv4}
  147. \begin{figure}[h]
  148. \centering
  149. \includegraphics[scale=0.6]{figures/IPv4_Header.eps}
  150. \caption{En-tête de paquet IPv4. Crédit : CC-BY-SA Bruno Wenk (Wikimédia)}
  151. \end{figure}
  152. \end{frame}
  153. \begin{frame}
  154. \frametitle{En-tête d'un paquet IPv6}
  155. \begin{figure}[h]
  156. \centering
  157. \includegraphics[scale=0.4]{figures/Ipv6_header.eps}
  158. \caption{En-tête de paquet IPv4. Crédit : CC-BY-SA Mro (Wikimédia)}
  159. \end{figure}
  160. \end{frame}
  161. \begin{frame}
  162. \frametitle{Format de paquet}
  163. RFC 2460
  164. \begin{block}{Particularités}
  165. \begin{itemize}
  166. \item Beaucoup plus simple
  167. \item Plus souple : liste chaînée d'en-têtes optionnels
  168. \end{itemize}
  169. \end{block}
  170. \begin{block}{Extensibilité}<2->
  171. Tout est déporté dans le Next Header :
  172. \begin{itemize}
  173. \item Fragmentation (uniquement réalisée par l'expéditeur)
  174. \item Mobilité
  175. \item Sécurité (IPsec)
  176. \item \og piggyback\fg{} (informations de routage, \ldots{})
  177. \end{itemize}
  178. \end{block}
  179. \end{frame}
  180. \begin{frame}
  181. \frametitle{En-tête d'un paquet IPv6}
  182. \begin{figure}[h]
  183. \centering
  184. \includegraphics[scale=0.4]{figures/Ipv6_header.eps}
  185. \caption{En-tête de paquet IPv6. Crédit : CC-BY-SA Mro (Wikimédia)}
  186. \end{figure}
  187. \end{frame}
  188. \begin{frame}
  189. \frametitle{Format des en-têtes facultatifs}
  190. \begin{figure}[h]
  191. \centering
  192. \includegraphics[scale=0.4]{figures/next-header.eps}
  193. \caption{Exemple d'en-tête facultatif via l'utilisation de \og Next Header\fg{}}
  194. \end{figure}
  195. \end{frame}
  196. \begin{frame}[fragile]
  197. \frametitle{Format des adresses et adressage}
  198. % RFC 4291
  199. \begin{block}{Adresses}
  200. \begin{itemize}
  201. \item Adresses sur 128 bits
  202. \item Notation hexa par bloc de 16 bits \sep \verb+2001:db8:cafe:deca:0:0:0:1+
  203. \item Compression de zéros \sep \verb+2001:db8:cafe:deca::1+
  204. \end{itemize}
  205. \end{block}
  206. \begin{block}{Sous-réseaux}<2->
  207. \begin{itemize}
  208. \item Deux parties :
  209. \begin{itemize}
  210. \item \textbf{préfixe} ou \textbf{identifiant de sous-réseau}
  211. (subnet ID) : partie gauche de l'adresse
  212. \item \textbf{identifiant de machine} (host ID) : partie droite
  213. \end{itemize}
  214. \item notation CIDR :
  215. \begin{itemize}
  216. \item \verb+2001:db8:cafe:deca:a9e:1ff:fe6b:25c9/64+
  217. \item subnet correspondant \sep \verb+2001:db8:cafe:deca::+
  218. \end{itemize}
  219. \end{itemize}
  220. \end{block}
  221. \end{frame}
  222. \begin{frame}[fragile]
  223. \frametitle{Exemples d'adresses et des préfixes}
  224. \begin{block}{Préfixes}
  225. \begin{itemize}
  226. \item<1-> Préfixe de documentation \sep \verb+2001:db8::/32+
  227. \item<2-> Préfixe link-local \sep \verb+fe80::/10+
  228. \item<3-> Préfixe multicast \sep \verb+ff02::/10+
  229. \item<4-> Exemple de préfixe \og end-user\fg{} \sep \verb+2001:db8:fada:ba00:/56+
  230. \end{itemize}
  231. \end{block}
  232. \begin{block}{Adresses}<5->
  233. \begin{itemize}
  234. \item Unicast \sep \verb+2001:db8:cafe:deca:a9e:1ff:fe6b:25c9/64+
  235. \item Link-local \sep \verb+fe80::a9e:1ff:fe6b:25c9/64+
  236. \item<6-> Notation IPv4 \sep \verb+2001:db8::cafe:192.168.0.1+ égal
  237. à \verb+2001:db8::cafe:c0a8:1+
  238. \item<7-> Localhost \sep \verb+::1+
  239. \item<7-> Tout les bits à 0 \sep \verb+::+
  240. \end{itemize}
  241. \end{block}
  242. \end{frame}
  243. \section{Avantages}
  244. \begin{frame}
  245. \frametitle{Taille de l'espace d'adressage}
  246. \begin{alertblock}{IPv4}
  247. \begin{itemize}
  248. \item Une seule IP publique par abonné
  249. \item Adresses \textbf{non routables} et \textbf{non globalement uniques}
  250. \item Technologie de traduction d'adresses (NAT) qui casse le
  251. \textbf{end-to-end principle}
  252. \end{itemize}
  253. \end{alertblock}
  254. \begin{block}{IPv6}<0>
  255. \begin{itemize}
  256. \item Plus petit sous-réseau : \textbf{/64}, soit $2^{64}$ adresses
  257. \item On ne distribue plus des \textbf{adresses}, mais des \textbf{sous-réseaux}
  258. \end{itemize}
  259. \end{block}
  260. \end{frame}
  261. \begin{frame}
  262. \frametitle{Traduction d'adresses (NAT) en IPv4 (1)}
  263. \begin{figure}[h]
  264. \centering
  265. \includegraphics[scale=0.28]{figures/nat1.eps}
  266. \caption{L1, L2, L3 sont des adresses locales. Le routeur qui fait du NAT, N3, possède également une adresse publique A.}
  267. \end{figure}
  268. \end{frame}
  269. \begin{frame}
  270. \frametitle{Traduction d'adresses (NAT) en IPv4 (2)}
  271. \begin{figure}[h]
  272. \centering
  273. \includegraphics[scale=0.28]{figures/nat2.eps}
  274. \caption{N2 envoie un paquet vers M. Notons que l'on distingue hôte
  275. (nœud) et adresse d'une interface.}
  276. \end{figure}
  277. \end{frame}
  278. \begin{frame}
  279. \frametitle{Traduction d'adresses (NAT) en IPv4 (3)}
  280. \begin{figure}[h]
  281. \centering
  282. \includegraphics[scale=0.28]{figures/nat3.eps}
  283. \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.}
  284. \end{figure}
  285. \end{frame}
  286. \begin{frame}
  287. \frametitle{Traduction d'adresses (NAT) en IPv4 (4)}
  288. \begin{figure}[h]
  289. \centering
  290. \includegraphics[scale=0.28]{figures/nat4.eps}
  291. \caption{M répond à N3, puisque du point de vue de M, c'est N3 qui a envoyé le paquet au départ.}
  292. \end{figure}
  293. \end{frame}
  294. \begin{frame}
  295. \frametitle{Traduction d'adresses (NAT) en IPv4 (5)}
  296. \begin{figure}[h]
  297. \centering
  298. \includegraphics[scale=0.28]{figures/nat5.eps}
  299. \caption{N3 se sert de l'information qu'il avait retenu pour renvoyer le paquet à la bonne machine locale.}
  300. \end{figure}
  301. \end{frame}
  302. \begin{frame}
  303. \frametitle{Traduction d'adresses (NAT) en IPv4 (6)}
  304. \begin{block}{En pratique}
  305. \begin{itemize}
  306. \item Couple $(source, destination)$ non suffisant : non unique
  307. \item TCP et UDP : $(port\ source, port\ destination)$ en plus
  308. \item ICMP : \textbf{sequence number} et type de paquet
  309. \end{itemize}
  310. \end{block}
  311. \begin{alertblock}{Bref\ldots{}}<2->
  312. C'est le mal !
  313. \begin{itemize}
  314. \item Pas de communication de bout en bout
  315. \item Dépend d'une couche supérieure (transport, ICMP)
  316. \item Système \textbf{avec état} : SPOF (Single Point Of Failure)
  317. \end{itemize}
  318. \end{alertblock}
  319. \uncover<3->{Et très bientôt, \textbf{Carrier-grade NAT} (CGNAT) au niveau du FAI}
  320. \end{frame}
  321. \begin{frame}
  322. \frametitle{Espace d'adressage}
  323. \begin{alertblock}{IPv4}
  324. \begin{itemize}
  325. \item Une seule IP publique par abonné
  326. \item Adresses \textbf{non routables} et \textbf{non globalement uniques}
  327. \item Technologie de traduction d'adresses (NAT) qui casse le
  328. \textbf{end-to-end principle}
  329. \end{itemize}
  330. \end{alertblock}
  331. \begin{exampleblock}{IPv6}<2->
  332. Chaque machine a une adresse globalement routable !
  333. \begin{itemize}
  334. \item Plus petit sous-réseau : \textbf{/64}, soit $2^{64}$ adresses
  335. \item On ne donne plus des \textbf{adresses}, mais des \textbf{sous-réseaux}
  336. \end{itemize}
  337. \end{exampleblock}
  338. \end{frame}
  339. \begin{frame}[fragile]
  340. \frametitle{Attribution d'adresses}
  341. \begin{block}{IPv4}
  342. \begin{itemize}
  343. \item Attribué par DHCP
  344. \item Peut changer, car c'est le serveur DHCP qui décide
  345. \end{itemize}
  346. \end{block}
  347. \begin{block}{IPv6}<2->
  348. Stateless autoconfiguration :
  349. \begin{itemize}
  350. \item Le routeur annonce son préfixe \sep \verb+2001:db8:deca::/64+
  351. \item Chaque machine \textbf{choisit} son adresse (au hasard, ou
  352. calculé à partir de l'adresse MAC, d'où le /64). \sep
  353. Unicité\ldots{}
  354. \end{itemize}
  355. \end{block}
  356. \begin{exampleblock}{Avantages}<3->
  357. \begin{itemize}
  358. \item \textbf{Sans état}
  359. \item Beaucoup plus simple et rapide
  360. \item Plusieurs routeurs peuvent annoncer leur préfixe
  361. \end{itemize}
  362. \end{exampleblock}
  363. \end{frame}
  364. \begin{frame}[fragile]
  365. \frametitle{Adresses link-local}
  366. Préfixe \verb+fe80::/10+
  367. \begin{block}{Principe}
  368. \begin{itemize}
  369. \item Toujours présente sur une interface, sans configuration
  370. \item Calculé via l'adresse MAC (unicité)
  371. \item Non routable
  372. \end{itemize}
  373. \end{block}
  374. \begin{block}{Intérêt}<2->
  375. \begin{itemize}
  376. \item Permet de communiquer avec les machines du même réseau L2
  377. \item Découverte de services, informations de routage, \ldots{}
  378. \end{itemize}
  379. \end{block}
  380. \end{frame}
  381. \section{Cohabitation}
  382. \begin{frame}[fragile]
  383. \frametitle{Cohabitation}
  384. \begin{block}{Dual stack}
  385. \begin{itemize}
  386. \item IPv4 et IPv6 peuvent cohabiter !
  387. \end{itemize}
  388. \end{block}
  389. \begin{block}{DNS}<2->
  390. \begin{itemize}
  391. \item Deux enregistrements dans le DNS
  392. \begin{itemize}
  393. \item example.net A 192.168.42.1
  394. \item example.net AAAA \verb+2001:db8::1337:1+
  395. \end{itemize}
  396. \item On essaie d'abord l'IPv6, puis l'IPv4. Code transparent !
  397. \begin{itemize}
  398. \item En C, utiliser \texttt{getaddrinfo()}
  399. \end{itemize}
  400. \end{itemize}
  401. \end{block}
  402. \begin{alertblock}{Écoute sur un socket}<3->
  403. \begin{itemize}
  404. \item Problème : besoin de deux sockets qui écoutent ?
  405. \item<4-> Non ! Un seul socket qui fait tout.
  406. \item<4-> Astuce : adresses IPv4-mapped \sep \verb+::ffff:192.168.42.1+
  407. \end{itemize}
  408. \end{alertblock}
  409. \end{frame}
  410. \section*{Conclusion}
  411. \begin{frame}
  412. \frametitle{Conclusion}
  413. \begin{block}{Avantages}
  414. \begin{itemize}
  415. \item Espace plus grand, plus besoin de NAT
  416. \item Auto-configuration : ça juste marche !
  417. \item Cohabitation grâce au DNS
  418. \item Applications prêtes depuis 15 ans
  419. \end{itemize}
  420. \end{block}
  421. \begin{block}{Qu'est ce qu'on attend ?}<2->
  422. \begin{itemize}
  423. \item Déploiement au niveau hôtes (\og fournisseurs de contenu\fg{})
  424. \begin{itemize}
  425. \item Google, Facebook, plein de petits
  426. \end{itemize}
  427. \item Déploiement des FAI
  428. \begin{itemize}
  429. \item Free, FDN, Illyse \ldots mais pas \alert{Orange}
  430. \end{itemize}
  431. \end{itemize}
  432. \end{block}
  433. \begin{block}{En attendant}<3->
  434. Plein de technologies de transition pour s'amuser (6to4, 6in4,
  435. Teredo, NAT64, DNS64), tunnel brokers
  436. \end{block}
  437. \end{frame}
  438. \begin{frame}
  439. \frametitle{Questions ?}
  440. \begin{figure}[h]
  441. \centering
  442. \includegraphics[scale=0.4]{figures/aviancarrier.jpg}
  443. \caption{RFC 6214 : Avian carriers over IPv6 !}
  444. \end{figure}
  445. \end{frame}
  446. \end{document}