Master Informatique 1 - RES Architecture des réseaux


M1 RES - Travaux sur machine encadrés 9/10

Simulation TCP avec NS2

Nous nous intéressons dans ce TME aux mécanismes mis en oeuvres dans TCP ainsi qu'au comportement dynamique de ce protocole.

1 Remarques préalables

1.1 Documentation

NS2 est un simulateur à événements discrets qui permet d'exécuter tout type de scenarii sur des topologies définies par l'utilisateur. Pour visualiser les résultats, un outil graphique est disponible : NAM (Network AniMator). Celui-ci permet, outre la visualisation des résultats de simulation, l'édition de scenarii simples. Pour toute précision, veuillez consulter la documentation de NAM en ligne ou le manuel de NS.

Pour la visualisation des diverses caractéristiques de TCP, nous utiliserons Gnuplot, un générateur de courbe interactif.

1.2 Exécution

La réalisation des simulations génère des fichiers de taille imposante. Noubliez pas d'utiliser un répertoire local à la machine pour votre travail (dans /tmp par exemple). Les configurations créées manuellement avec votre éditeur de texte ou automatiquement par l'éditeur de NAM utilisent le suffixe .ns, et les traces de simulation terminent par .nam. Noubliez pas de recopier les configurations (en déplaceant les fichiers locaux sur votre compte utilisateur) et d'effacer les traces à la fin de la séance:

[mon_login@localhost:~] $ mkdir /tmp/mon_login
[mon_login@localhost:~] $ cd /tmp/mon_login
[mon_login@localhost:/tmp/mon_login] $ nam
...
[mon_login@localhost:/tmp/mon_login] mv *.ns ~/
[mon_login@localhost:/tmp/mon_login] rm *.nam *.tr*
[mon_login@localhost:/tmp/mon_login] cd ; rmdir /tmp/mon_login

2 Traces avec NS

Après avoir créé un scénario NS manuellement ou avec l'éditeur de NAM, vous pouvez équiper le code de manière à générer des fichiers traces annexes lors de la simulation. Vous pouvez ensuite produire de jolies courbes avec GNUplot ou tout autre outil pouvant visualiser des suites de valeurs numériques.

2.1 Equipement du code

Au debut d'un script imaginaire ma_simulation.ns vous devez trouver des lignes similaires au suivantes :

# Create a new simulator object.
set ns [new Simulator]
# Create a nam trace datafile.
set namfile [open /tmp/mon_login/ma_simulation.nam w]
$ns namtrace-all $namfile

Ouvrez ici le fichier de trace annexe que vous souhaiter utiliser en ajoutant une ligne similaire à la suivante:

set mon_descripteur_de_fichier [open ma_simulation.tr w]

Puis pour tracer des paramètres, il suffit d'indiquer dans les objets concerner leur attachement au ficher de trace puis de
préciser les paramètres tracer. Exemple avec un objet agent TCP:

# Create agents.
set agent(1) [new Agent/TCP]
$ns attach-agent $node(1) $agent(1)
$ns color 1 "blue"
$agent(1) set packetSize_ 576
$agent(1) set window_ 20
$agent(1) set windowInit_ 1
$agent(1) set maxcwnd_ 0

Pour tracer la_variable_de_cet_agent_a_tracer_ faut simplement rajouter:

$agent(1) attach $mon_descripteur_de_fichier
$agent(1) trace la_variable_de_cet_agent_a_tracer_

Le fichier de trace annexe sera généré lors de l'exécution de la simulation. Lancer NS sur le script équipé et observez le nouveau fichier de trace alors créé.

[mon_login@localhost:/tmp/mon_login] ns
ma_simulation.ns &

2.2 Affichage de courbes avec Gnuplot

Pour afficher une courbe avec Gnuplot, il suffit d'exécuter la commande gnuplot dans un terminal. Le programme s'exécute interactivement en mode ligne. Ensuite, il est nécessaire de tapper les commandes spécifiques de Gnuplot.
Pour tracer une courbe à partir de valeurs stockées dans un fichier on utilise la commande Gnuplot plot. Par exemple pour utiliser en abscisse la deuxieme colonne du fichier trace.txt et en ordonnée la cinquième colonne, on peut tapper:

[mon_login@localhost:/tmp/mon_login] gnuplot
 
        G N U P L O T
        Version 3.7 patchlevel 3
        Copyright(C) 1986 - 1993, 1998 - 2002
        Thomas Williams, Colin Kelley and many others
 
        Type `help` to access the on-line reference manual
        The gnuplot FAQ is available from
        http://www.gnuplot.info/gnuplot-faq.html
 
Terminal type set to 'x11'

gnuplot> plot 'ma_simulation.tr' using 1:7 w lines 1

3 Etude de TCP par simulation : Scenarii à réaliser

De par sa grande complexité, le protocole TCP est difficile à analyser. Il est par exemple impossible de le modéliser mathématiquement avec précision. La mesure directe sur un réseau pose aussi problème car l'environnent réel n'est pas complètement maîtrisable. Il nous reste donc la simulation pour essayer de saisir les subtilitées de TCP. Le simulateur NS2 est courament utilisé dans ce but grâce aux différentes implentations du protocole qu'il intègre. Dans la suite, plusieurs scenarii à simuler à l'aide de NS sont proposés :

3.1 Autosynchronisation de TCP

L'autosynchronisation (self clocking) est la capacité à s'adapter au débit du lien le plus faible du chemin suivi par la connexion TCP. Pour démontrer cette capacité, réalisez un réseau linéaire de 4 noeuds. Les Agent/TCP et Agent/TCPSink  seront à chacunes des extrémités. Utiliser deux liens de 1Mbps entre le 1er et le 2ème noeud, puis entre le 3ème et le 4ème. Utilisez un lien de 100Kbps au centre, entre le 2ème et 3ème noeuds (délais 20ms, files d'attentes de 8 paquets, modèle de perte de type DropTail). Utilisez un générateur de trafic de type Application/FTP. Equipez le code de manière à observer les numéros de séquence maximum (variable maxseq_ ):

$agent(1) attach $mon_descripteur_de_fichier
$agent(1) trace maxseq_

Lancez la simulation sur 60 secondes et visualisez ce paramètre dans Gnuplot:

[mon_login@localhost:/tmp/mon_login] ns ma_simulation.ns &
[mon_login@localhost:/tmp/mon_login] gnuplot
 
        G N U P L O T
        Version 3.7 patchlevel 3
        Copyright(C) 1986 - 1993, 1998 - 2002
        Thomas Williams, Colin Kelley and many others
...

gnuplot> plot 'ma_simulation.tr' using 1:7 w lines 1

Nous allons observez en détail le démarrage d'une connexion TCP dans les scénarii suivants:

3.3 Scenario TCP Tahoe

Réutilisez la configuration précédente en précisant bien que vous allez utilisez un Agent/TCP (correspond dans NS à l'implémentation de TCP Tahoe). Equipez le code pour afficher le numéro de séquence actuel (variable t_seqno_ ) et la taille de la fenêtre de congestion (variable cwnd_ ).

$agent(1) attach $
mon_descripteur_de_fichier
$agent(1) trace t_seqno_

$agent(1) trace cwnd_
 

Lancez la simulation sur 60 secondes et visualisez ces paramètres dans Gnuplot (attention, il faut séparer les évennements
qui sont tous enregistrés à la suite dans notre trace... Editez le fichier pour le vérifier) :

[mon_login@localhost:/tmp/mon_login] ns ma_simulation.ns &
[mon_login@localhost:/tmp/mon_login] awk "/t_seqno_/" ma_simulation.tr > ma_simulation.tr1
[mon_login@localhost:/tmp/mon_login] awk "/cwnd_/" ma_simulation.tr > ma_simulation.tr2
[mon_login@localhost:/tmp/mon_login] gnuplot
 
        G N U P L O T
        Version 3.7 patchlevel 3
        Copyright(C) 1986 - 1993, 1998 - 2002
        Thomas Williams, Colin Kelley and many others
...

gnuplot> plot 'ma_simulation.tr1' using 1:7 w lines 1, 'ma_simulation.tr2' using 1:7 w lines 2

3.4 Scenario TCP Reno

Rejouez la configuration précédente avec un Agent/TCP/Reno. Quelles différences observez vous ?

3.5 Scenario TCP Newreno

Rejouez la configuration précédente avec un Agent/TCP/Newreno. Quelles différences observez vous ?

3.6 Scenario TCP avec acquittements sélectifs

Rejouez la configuration précédente avec un Agent/TCP/Sack1 (noubliez de remplacer le puit par un Agent/TCPSink/Sack1). Quelles différences observez vous ?

3.7 Scenario multi-TCP (facultatif)

Que se passe-t-il lorsque plusieurs connexions TCP sont en compétion sur un lien ?

Logo UPMC 1/1 OF Tme9 v4.b