diff options
author | Richard Braun <syn@sceen.net> | 2010-06-04 23:24:17 +0000 |
---|---|---|
committer | Richard Braun <syn@sceen.net> | 2010-06-04 23:24:17 +0000 |
commit | 89a610e8892b7d7b3ed90a75a9941f8de090020a (patch) | |
tree | 491b4ccc487d248c12ab42334d615c809393d32b | |
parent | 65e3ff4d0da6734cc3f5986eb2420c98e0d4ab09 (diff) |
-rw-r--r-- | doc/presentation/tnt.tex | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/doc/presentation/tnt.tex b/doc/presentation/tnt.tex index 8b1e7bc..e39528d 100644 --- a/doc/presentation/tnt.tex +++ b/doc/presentation/tnt.tex @@ -83,6 +83,21 @@ \section{Introduction} +\subsection{TCP} + +\begin{frame}[fragile] +\frametitle{TCP} +\begin{itemize} +\item Protocole de transport standardisé (RFC 793) +\item Permet aux applications d'un système de transférer des données de +manière fiable sur de grands réseaux +\item Implémente le concept de flux réseau au dessus d'équipements basés sur la +commutation de paquets +\item Sert de mécanisme d'interopérabilité entre des systèmes fondamentalement +différents +\end{itemize} +\end{frame} + \section{Architecture} \begin{frame}[fragile] @@ -249,10 +264,140 @@ Composition d'un message : \end{figure} \end{frame} +\subsection{libtnt} + +\begin{frame}[fragile] +\frametitle{libtnt} +\begin{itemize} +\item Bibliothèque de communication avec {\it tntd} côté client +\item Utilise {\it libetp} pour effectuer des RPC ({\it Remote Procedure Call}) +\item Chaque appel fourni à l'application cliente encapsule les paramètres dans +un message ETP envoyé au serveur, puis attend une réponse (protocole synchrone) +\item Gestion d'erreur fixant la valeur d'errno +\end{itemize} +\end{frame} + \section{Mécanismes implémentés} +\subsection{Établissement de connexion} + +\begin{frame}[fragile] +\frametitle{Établissement de connexion} +\begin{itemize} +\item Poignée de main SYN - SYN/ACK - ACK classique +\item Génération des numéros de séquence initiaux (ISN) aléatoire +\item Mise en attente des connexions entrantes jusqu'à acceptation par +une application serveur +\item Prise en charge de l'option MSS, calcul du MSS en fonction du MTU +de l'interface de sortie, et négociation de la plus petite valeur +\item Gestion d'erreur lorsqu'un port de destination est fermé ou ne répond pas +\end{itemize} +\end{frame} + +\subsection{Transferts de données} + +\begin{frame}[fragile] +\frametitle{Transferts de données} +\begin{itemize} +\item Gestion de l'envoi et de la réception de données sur une même socket +\item Vérification et mise à jour des numéros de séquence et d'acquittement +\item Support de la retransmission de paquets non acquittés +\item Rejet des paquets dupliqués ou ne faisant pas partie de la session +\item Prise en charge de la fenêtre de réception +\item Segmentation des données selon le MSS négocié +\end{itemize} +\end{frame} + +\subsection{Éléments secondaires} + +\begin{frame}[fragile] +\frametitle{Éléments secondaires} +\begin{itemize} +\item Calcul optimisé du checksum (calcul sur 32 bits et repli sur 16 bits +uniquement à la fin du calcul) +\item Portabilité (le serveur convertit les octets des entiers dans l'ordre +du réseau, et conserve un maximum d'entier en mémoire dans cet ordre pour +éviter les conversions inutiles) +\end{itemize} +\end{frame} + \section{Exploitation} +\begin{frame}[fragile] +\frametitle{Démarrage du serveur} +Lancement du serveur {\it tntd} (en root) : +\begin{verbatim} +# ./tntd +tntd: main(): TNT v0.1 starting... +tntd: device_init(): device registered: lo, addr = 0x7f000001 +tntd: device_init(): device registered: eth0, addr = 0xa00000b +tntd: main(): daemon ready +tntd: rpc_reaper(): RPC reaper thread running... +tntd: rpc_server(): RPC server thread running... +tntd: gc_run(): garbage collector thread running... +\end{verbatim} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Démarrage d'une application serveur} +\begin{verbatim} +$ ./tnt_nc -l 10.0.0.11 1234 +creating socket... +socket created, sd = 0 +binding socket to 0xa00000b:1234... +socket bound +setting socket to server mode... +socket set to server mode +accepting on socket... +\end{verbatim} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Démarrage d'une application cliente} +\begin{verbatim} +$ ./tnt_nc 10.0.0.11 4321 10.0.0.12 1234 +creating socket... +socket created, sd = 1 +binding socket to 0xa00000b:4321... +socket bound +connecting to 0xa00000c:1234... +connected to server +enter "quit" to close the connection +waiting input from user... +\end{verbatim} +\end{frame} + +\begin{frame}[fragile] +\frametitle{État du serveur} +{\footnotesize +\begin{verbatim} +$ ./tnt_netstat +Dsc RefCnt Recv-Q Send-Q Local Address Foreign Address State +0 2 0 0 10.0.0.11:1234 0.0.0.0:* LISTEN +1 3 0 0 10.0.0.11:1234 10.0.0.12:4321 ESTABLISHED + +$ ./tnt_netstat +Dsc RefCnt Recv-Q Send-Q Local Address Foreign Address State +0 2 0 0 10.0.0.12:4321 10.0.0.11:1234 ESTABLISHED +\end{verbatim} +} +\end{frame} + \section{Conclusion} +\begin{frame}[fragile] +\frametitle{Conclusion} +\begin{itemize} +\item TNT est une implémentation partielle mais fonctionnelle de TCP +\item Ce projet fut l'occasion de s'intéresser plus en profondeur à un +élément important des réseaux modernes +\item Des critères comme les performances et la sécurité ont été +pris en compte lors de la conception et l'implémentation +\item L'utilisation de l'{\it extreme programming} comme méthode de travail +a permis une séparation nette des efforts par groupe tout en impliquant que +les membres de l'équipe aient à tout moment une vue d'ensemble générale de +l'état du projet +\end{itemize} +\end{frame} + \end{document} |