Master Informatique 1 - RES | Architecture des réseaux |
M1 RES - Travaux sur machine encadrés 9/10Simulation 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.
Pour la visualisation des diverses caractéristiques de TCP,
nous
utiliserons Gnuplot, un
générateur de courbe interactif.
[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
# 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:
Pour tracer la_variable_de_cet_agent_a_tracer_ faut simplement rajouter:
$agent(1) attach $mon_descripteur_de_fichierPour 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
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 :
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
...
Nous allons observez en détail le démarrage d'une connexion TCP dans les scénarii suivants:
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
...
Rejouez la configuration précédente avec un Agent/TCP/Reno. Quelles différences observez vous ?
Rejouez la configuration précédente avec un Agent/TCP/Newreno. Quelles différences observez vous ?
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 ?
Que se passe-t-il lorsque plusieurs connexions TCP sont en
compétion
sur un lien ?
![]() |
1/1 | OF Tme9 v4.b |