Agenda: exercises-network-metrics-and-analysis-vFR.txt

File exercises-network-metrics-and-analysis-vFR.txt, 15.7 KB (added by admin, 7 years ago)
Line 
1Définitions des performances du réseau et exercices de mesure.
2=========================================================
3
4Notes :
5------
6* Les commandes précédées de "$" signifient que vous devez exécuter la commande en tant qu'utilisateur général - et non en tant qu'utilisateur root.
7* Les commandes précédées de "#" signifient que vous devez travailler en tant qu'utilisateur root.
8* Les commandes comportant des lignes de commande plus spécifiques (par exemple "GW-RTR>" ou "mysql>") signifient que vous exécutez des commandes sur des équipements à distance, ou dans un autre programme.
9* Si une ligne de commande se termine par "\", ceci signifie que la commande se poursuit sur la ligne suivante et que vous devez la traiter comme une seule ligne.
10
11Exercices Partie I
12================
13
140. Ouvrez une session sur votre PC/machine virtuelle ou ouvrez une fenêtre de terminal en tant qu'utilisateur sysadm :
15
16Remarque : Au cours de ces exercices, si la commande apt-get se plaint que certaines archives sont introuvables, vous devrez peut-être mettre à jour votre base de données des paquets apt. Pour cela, tapez :
17
18      $ sudo apt-get update
19
20
21Indicateurs de performance du réseau
22---------------------------
23
241. ping
25-------
26
27ping est un programme qui envoie des paquets ICMP de demande d'écho à des hôtes cibles et attend une réponse ICMP de la part de ces derniers. Selon le système d'exploitation utilisé, vous pouvez observer des temps d'aller-retour (RTT, Round-Trip Time) minimaux, maximaux ou moyens, et parfois un écart type par rapport à la moyenne des réponses ICMP de l'hôte cible. Pour plus de précisions, voir :
28
29http://en.wikipedia.org/wiki/Ping
30
31Il est généralement déconseillé de bloquer ping.
32
33En partant de ces éléments, essayez d'utiliser Ping de différentes manières :
34
35    $ ping localhost
36
37Appuyez sur ctrl-c pour arrêter le processus. Voici quelques résultats typiques de la commande ci-dessus :
38
39    PING localhost (127.0.0.1) 56(84) bytes of data.
40    64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.020 ms
41    64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.006 ms
42    64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.006 ms
43    64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.006 ms
44    64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.006 ms
45    64 bytes from localhost (127.0.0.1): icmp_seq=6 ttl=64 time=0.009 ms
46    64 bytes from localhost (127.0.0.1): icmp_seq=7 ttl=64 time=0.007 ms
47    ^C
48    --- localhost ping statistics ---
49    7 packets transmitted, 7 received, 0% packet loss, time 5994ms
50    rtt min/avg/max/mdev = 0.006/0.008/0.020/0.005 ms
51
52Question : pourquoi la première réponse ICMP a-t-elle mis 20 ms alors que les autres réponses ont été beaucoup plus rapides ? Il s'agit d'un type de délai. De quelle sorte de délai s'agit-il ?
53
54
552. traceroute
56-------------
57
58Vous avez peut-être déjà utilisé traceroute par le passé, mais avez-vous vraiment regardé ce qu'il fait ? Si ce n'est pas le cas, lisez ceci :
59
60http://en.wikipedia.org/wiki/Traceroute
61
62Il vous faudra peut-être installer d'abord la commande traceroute. Pour ce faire, tapez :
63
64        $ sudo apt-get install traceroute
65
66Une fois installé, essayez :
67
68        $ traceroute nsrc.org
69
70Ci-dessous un exemple du résultat de traceroute dans nsrc.org (les lignes bouclent en raison de leur longueur):
71
72        traceroute to nsrc.org (128.223.157.19), 64 hops max, 52 byte packets
73         1  gw.ws.nsrc.org (10.10.0.254)  1.490 ms  1.069 ms  1.055 ms
74         2  192.248.5.2 (192.248.5.2)  2.741 ms  2.450 ms  3.182 ms
75         3  192.248.1.126 (192.248.1.126)  2.473 ms  2.497 ms  2.618 ms
76         4  mb-t3-01-v4.bb.tein3.net (202.179.249.93)  26.324 ms  28.049 ms  27.403 ms
77         5  sg-so-06-v4.bb.tein3.net (202.179.249.81)  103.321 ms  91.072 ms  91.674 ms
78         6  jp-pop-sg-v4.bb.tein3.net (202.179.249.50)  168.948 ms  168.712 ms  168.903 ms
79         7  tpr5-ge0-0-0-4.jp.apan.net (203.181.248.250)  172.789 ms  170.367 ms  188.689 ms
80         8  losa-tokyo-tp2.transpac2.net (192.203.116.145)  579.586 ms  284.736 ms  284.202 ms
81         9  abilene-1-lo-jmb-702.lsanca.pacificwave.net (207.231.240.131)  303.736 ms 
82            284.884 ms  530.854 ms
83        10  vl-101.xe-0-0-0.core0-gw.pdx.oregon-gigapop.net (198.32.165.65)  328.082 ms 
84            305.800 ms  533.644 ms
85        11  vl-105.uonet9-gw.eug.oregon-gigapop.net (198.32.165.92)  336.680 ms  617.267 ms 
86            495.685 ms
87        12  vl-3.uonet2-gw.uoregon.edu (128.223.3.2)  310.552 ms  421.638 ms  612.399 ms
88        13  nsrc.org (128.223.157.19)  309.548 ms  612.151 ms  611.505 ms
89
90Comprenez-vous ce que signifie chaque élément ? Si ce n'est pas le cas, consultez la page Wikipedia et tapez
91
92    $ man traceroute
93
94pour plus d'informations. Qu'est-ce que cela signifie si vous voyez des lignes comme celles-ci ?
95
96    15  * * *
97    16  * * *
98    17  * * *
99
100Ces lignes signifient que le dispositif distant ne répond pas aux demandes d'écho icmp, ou qu'il utilise une adresse de réseau privé (RFC 1918).
101
102Comme vous pouvez le voir, traceroute peut être utilisé pour déterminer où ont lieu les problèmes entre deux points de terminaison d'un réseau.
103
104Essayez d'exécuter de nouveau traceroute sur le même hôte (nsrc.org). Il faudra probablement beaucoup moins de temps.
105
106
1073. mtr
108------
109
110L'outil mtr associe ping et traceroute en un seul et même affichage mis à jour de manière dynamique.
111Avant d'utiliser mtr, vous devrez peut-être d'abord l'installer :
112
113        $ sudo apt-get install mtr-tiny
114
115Maintenant essayez :
116
117        $ mtr nsrc.org
118
119Le résultat de la commande varie selon les différentes versions de Linux et d'UNIX, mais vous obtiendrez en général un résumé indiquant les paquets perdus sur chaque noeud du chemin jusqu'à l'hôte cible distant, le nombre de paquets ICMP de demande d'écho envoyés, le dernier temps RTT vers l'hôte, le RTT minimal, maximal et moyen ainsi que l'écart type des temps RTT.
120
121L'affichage du pourcentage de paquets perdus dans ce format permet de localiser beaucoup plus facilement les problèmes de réseau.
122
123
1244. ping avec taille de paquet variable 
125---------------------------------
126
127Par défaut, ping envoie des datagrammes IP d'une taille de 84 octets :
128
129* 20 octets d'en-tête IP
130* 8 octets d'en-tête ICMP
131* 56 octets de remplissage
132
133Vous pouvez cependant envoyer des paquets plus grands avec l'option -s. Avec `-s 1472` vous obtiendrez un datagramme IP de 1500 octets, ce qui est le maximum avant fragmentation pour la plupart des réseaux (MTU = unité de transmission maximale)
134
135Ce mécanisme simple peut être utilisé pour déboguer toutes sortes de problèmes, et permet même de faire la distinction entre les délais de transmission et les délais de propagation.
136
137Choisissez un hôte localisé à quelques sauts de vous. Tapez d'abord :
138
139        $ traceroute nsrc.org
140
141Cherchez maintenant une machine se trouvant à plus de deux sauts et notez son adresse IP. Pourquoi ? Parce qu'un saut correspond à votre routeur virtuel et que cet exercice ne donnera pas de résultats fiables avec un matériel virtuel. Le second saut correspond au routeur de passerelle de notre réseau privé. Il est trop près et la différence en termes de temps de ping sera probablement trop faible pour être utile. Nous allons désigner la machine vers laquelle vous avez choisi d'envoyer un ping en tant que PING_MACHINE.
142
143Envoyez 20 pings standard à cette adresse :
144
145        $ ping -c20 PING_MACHINE
146
147Notez le temps d'aller-retour (RTT) *moyen* relevé (t1).
148
149Envoyez maintenant 20 pings de taille maximale :
150
151        $ ping -c20 -s1472 PING_MACHINE
152
153Notez à nouveau le temps d'aller-retour (RTT) *moyen* relevé (t2).
154
155Le délai de propagation est le même dans les deux cas, par conséquent le temps aller-retour plus long doit être dû au délai de transmission.
156
157Vous pouvez désormais estimer le délai de transmission et donc la bande passante de la liaison entre deux points
158
159    Allongement du temps de transmission   =  t2 - t1
160    augmentation du nombre de bits envoyés           =  (1500-84) * 8 * 2  = 22656
161
162(Multipliez par 2 car le temps d'aller-retour implique d'envoyer le paquet deux fois)
163
164Répartissez le nombre de bits par le temps pour obtenir une estimation du débit (bits par seconde). N'oubliez pas de convertir d'abord les millisecondes en secondes.
165
166Exemple :
167       
168t2 = 1,71
169t1 = 1,14
170
171t2-t1 = 0,57
172
1730.57 ms = 0,00057 sec
174
17522656 bits / 0,00057 sec = 39747368,42 bps
176
177Vous pouvez ensuite convertir le résultat en Kbps, Mbps, etc.
178
179En procédant de même pour les sauts suivants, il est possible d'estimer la bande passante sur chaque saut, même les plus éloignés de vous. Il existe un outil, nommé "pathchar", qui fait cela automatiquement, mais vous devez le compiler à partir des fichiers sources. Quelques outils binaires spécifiques au SE sont disponibles à l'adresse :
180
181ftp://ftp.ee.lbl.gov/pathchar/
182
183La page Web comprenant la documentation est accessible à l'adresse suivante :
184
185http://www.caida.org/tools/utilities/others/pathchar/
186
187
188---------------------------------------------------------------------------
189
190
191Exercices Partie II
192=================
193
194Analyse du réseau
195----------------
196
1971. lsof et netstat
198-------------------
199
200Vérifiez les services présents sur votre machine. Vous pouvez pour cela vous baser sur la présentation.
201
202Ou voir avec "man lsof", "man netstat", "lsof -h" et "netstat -h" les options disponibles (elles sont nombreuses !). Pensez à utiliser sudo lorsque vous utilisez lsof et netstat afin de vous doter des permissions nécessaires pour tout voir.
203
204Il vous faudra peut-être installer lsof. Pour cela, tapez :
205
206        $ sudo apt-get install lsof
207
208* avec lsof, déterminez les services IPv4 qui écoutent sur votre machine.
209* avec netstat, déterminez les services IPv4 et IPv6 qui écoutent sur votre machine.
210
211Lorsque vous exécutez lsof et netstat, vous devez le faire en tant que root :
212
213        $ sudo lsof
214        $ sudo netstat
215
216Rappel : vous devrez spécifier des options pour déterminer les services IPv4 et IPv6 qui s'exécutent sur votre machine.
217
218
2192. tcpdump et tshark
220---------------------
221
222Vous devez d'abord installer ces deux programmes :
223
224        $ sudo apt-get install tcpdump tshark
225
226Utilisez tcpdump comme suit :
227
228        $ sudo tcpdump -i lo -A -s1500 -w /tmp/tcpdump.log
229
230Vous pouvez maintenant initier du trafic sur votre interface de bouclage avec un autre terminal. C'est-à-dire ouvrir une autre session ssh sur votre PC/machine virtuelle.
231
232Par exemple :
233
234        $ ping localhost
235        $ ssh localhost
236 
237etc. Appuyez ensuite sur CTRL-C pour mettre fin à la session tcpdump.
238
239Remarque : ssh donne des résultats beaucoup plus "intéressants". Lisons maintenant avec shark les résultats de tcpdump :
240
241        $ sudo tshark -r /tmp/tcpdump.log | less
242
243Que voyez-vous ? Pouvez-vous suivre la session SSH que vous avez lancée plus haut ?
244
245Nous allons ensuite utiliser ftp. Vous devez d'abord installer un client ftp :
246
247        $ sudo apt-get install ftp
248
249Essayez maintenant ceci :
250
251        $ sudo rm /tmp/tcpdump.log
252        $ sudo tcpdump -i eth0 -A -s1500 -w /tmp/tcpdump.log
253
254Sur un autre terminal :
255
256        $ ftp limestone.uoregon.edu
257 
258        Connected to limestone.uoregon.edu.
259        220 FTP Server ready.
260        Name (limestone.uoregon.edu:sysadmin): anonymous
261        Password: <anything you want>
262        ftp> exit
263
264Mettez fin à la session tcpdump sur l'autre terminal (CTRL-C)  et observez maintenant le contenu du fichier log :
265
266        $ sudo tshark -r /tmp/tcpdump.log | less
267
268Voyez-vous votre mot de passe ? En présence d'un gros trafic sur votre réseau, il se peut que le fichier tcpdump.log soit volumineux. Vous pouvez rechercher votre session FTP en tapant :
269
270        "/FTP"
271
272dans l'écran de résultat. Étant donné que vous avez redirigé le flux de votre commande shark sur la commande "less" avec "/", la recherche de chaînes fonctionne. Appuyez maintenant sur la touche "n" pour "next" (suivant) afin de suivre la session FTP. Vous devriez voir une ligne comportant la chaîne suivante :
273
274        "FTP Request: PASS PasswordYouTypedIn"
275
276Ce type d'outil permet de détecter très facilement des mots de passe cryptés sur des réseaux LAN sans fil.
277
278N'oubliez pas de nettoyer après votre passage :
279
280        $ rm /tmp/tcpdump.log
281
282
2833. tcpdump partie II
284-------------------
285
286Vous pouvez également utiliser tcpdump comme un outil d'investigation informatique en temps réel. Il faudrait plusieurs heures de classe pour traiter totalement tcpdump, mais nous allons commencer avec un autre exemple concret.
287
288Nous allons examiner une requête dhcp partant de votre PC et les réponses qu'elle reçoit.
289
290Connectez-vous d'abord à votre image PC et devenez utilisateur root :
291
292    $ sudo bash
293   
294Ensuite, nous allons utiliser un utilitaire du nom de "screen" :
295
296    # apt-get install screen
297   
298Maintenant, exécutez screen :
299
300    # screen
301   
302À ce stade, vous pouvez avoir plusieurs sessions terminal ouvertes dans une seule fenêtre ssh. Lancez le processus tcpdump d'écoute de requêtes dhcp :
303
304    # tcpdump -s0 -ni eth0 port 67 or port 68
305
306Avec screen, ouvrez maintenant un autre "écran" dans votre fenêtre terminal.
307
308        Faites ctrl-a c
309   
310Pour comprendre l'action de "-s0", "-n" et "-i", vous pouvez vous référer à la page de manuel tcpdump :
311
312        # man tcpdump
313       
314Recherchez "-s" en tapant "/" et ensuite "-s", puis appuyez sur ENTRÉE. Appuyez sur "n" pour voir l'occurrence suivante de la chaîne "-s".
315
316Maintenant lancez sur votre machine une requête dhcp portant sur une nouvelle adresse eth0 :
317
318        # dhcpclient
319       
320Revenez à l'écran précédent pour voir ce qu'affiche tcpdump :
321
322        Appuyez sur "ctrl-a p"          ("p" pour Précédent, "n" pour "next" (suivant) pour faire défiler les écrans)
323
324Vous devriez obtenir un résultat comme celui-ci :
325
326tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
32718:03:05.003190 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 52:54:4a:5e:68:77, length 300
32818:03:05.004349 IP 10.10.0.254.67 > 10.10.0.250.68: BOOTP/DHCP, Reply, length 300
329
330        Pour arrêter la session tcpdump tapez "ctrl-c"
331
332Savez-vous ce que cela signifie ? Pourquoi avons-nous spécifié d'écouter les ports 67 et 68 ? Si vous ouvrez le fichier /etc/services, vous trouverez les définitions suivantes pour les ports 67 et 68
333
334bootps           67/udp     # Bootstrap Protocol Server
335bootps           67/tcp     # Bootstrap Protocol Server
336bootpc           68/udp     # Bootstrap Protocol Client
337bootpc           68/tcp     # Bootstrap Protocol Client
338
339Vous pouvez revenir à l'écran où vous avez exécuté dhcpclient et quittez l'écran si vous le souhaitez :
340
341        ctrl-a-n
342       
343Puis tapez :
344
345        # exit
346       
347Si l'utilitaire screen et son fonctionnement vous intéressent, visitez :
348
349        http://www.howtoforge.com/linux_screen
350
351ou posez des questions à votre instructeur.
352
353
3544. Utilisation d'iperf
355--------------
356
357Installez tout d'abord iperf :
358
359        $ sudo apt-get install iperf
360
361Utilisez "man iperf" ou "iperf -h" pour obtenir de l'aide.
362
363Demandez à votre voisin d'exécuter :
364
365        $ iperf -s
366
367Connectez-vous à la machine de votre voisin avec :
368
369        $ iperf -c ipNeighbor
370
371Si vous ne connaissez pas l'adresse IP de la machine de votre voisin, demandez-lui de faire :
372
373        $ ifconfig eth0
374
375et de vous indiquer quelle adresse IP utilise sa machine.
376
377Quel est le débit entre vos machines ? Vous pouvez répéter cet exercice avec n'importe quelle machine distante où iperf est installé et sur laquelle vous avez un compte. C'est un moyen rapide de voir comment se présente la bande passante entre deux points.
378
379Pour arrêter le serveur iperf sur lequel vous avez exécuté "iperf-s", appuyez sur CTRL-c.
380
381Si vous en avez le temps, continuez d'explorer les options iperf. Si vous disposez d'un PC distant fonctionnant sous UNIX ou Linux, vous pouvez essayer d'installer iperf et de tester la connexion entre le laboratoire de l'atelier et votre machine distante.
382
383Autres aspects à explorer...
384
385* Testez TCP dans différentes tailles de fenêtres (-2).
386
387* Vérifiez TCP MSS (-m). Quel en est l'incidence sur le débit ? Qu'entend-on par découverte du MTU d'un chemin ?
388
389* Testez avec deux threads parallèles (-P) et comparez les totaux. Constatez-vous une différence ? Pourquoi ?
390
391* Testez avec différentes tailles de paquets et l'option TCP_NODELAY (-N).
392