Annexe
Thèmes abordés
Annexe
Thèmes abordés
Annexes
410
Introduction
Cette partie contient des chapitres traitant de notions utilisées en réseau, sans en être fonda-
mentalement. Ils peuvent être consultés indépendamment du reste du tuto.
411
IX.1. Binaire et hexadécimal : partez sur de
bonnes bases !
Introduction
Dans la plupart des domaines de l’informatique, il est indispensable de connaitre le binaire. Le
réseau ne fait pas exception�! Nous allons d’abord voir de quoi il s’agit et pourquoi cela sert en
réseau. Nous en profiterons pour ensuite aborder l’hexadécimal, puis nous conclurons avec un
point sur le stockage des nombres par les ordinateurs.
?
Ça a une utilité ou c’est juste pour faire fonctionner nos neurones�?
Eh bien, ça va nous préparer à faire des calculs intéressants, comme la personnalisation des
masques de sous-réseaux ou la détection d’erreurs de transmission.
412
IX. Annexes
courante
— Un nombre premier serait intéressant pour les mathématiques, car, dans une telle
base, les nombres à virgule s’écriraient aisément sous forme de fraction irréductible,
or dix n’est pas premier
— Une puissance de deux serait adaptée à l’informatique, or dix n’est pas puissance de
deux
Wikipédia
i
Le système binaire est assez complexe quand il s’agit de représenter des chiffres négatifs,
mais c’est important quand on veut faire de la programmation de bas niveau avec un
langage comme l’assembleur, vous pouvez donc lire cet article . Prenez bien en compte
que la lecture n’est pas obligatoire, ce que nous allons vous dire dans cette sous-partie
suffira pour continuer la lecture de ce tutoriel.
413
IX. Annexes
i
Point vocabulaire important : si un bit vaut 1, on dit qu’il est allumé, sinon c’est qu’il
est… éteint, bingo�!
Ainsi, dans un nombre en binaire, pour avoir sa correspondance en décimal, il suffit de regarder
quels bits sont allumés (toujours de la droite vers la gauche), de noter leur correspondance en
décimal et de faire la somme des correspondances et hop, vous avez le nombre en décimal�!
Avouez que c’est moins compliqué que ça en avait l’air tout à l’heure.
Pour passer d’un nombre décimal à son équivalent en binaire, il faut décomposer le nombre
décimal en une somme faisant intervenir les nombres correspondants à certains bits allumés (en
fonction des possibilités) et ensuite, d’allumer les bits dont les correspondances sont utilisées.
On va tout de suite prendre un exemple avec notre conversion de 12.3.2.1 en binaire. Commençons
par 12. Décomposons-le à partir des correspondances données ci-dessus�: 12 = 8 + 4. Il nous
faut donc allumer le bit dont la correspondance vaut 8 et celui dont la correspondance vaut 4
soit le 3ème et le 4ème en allant de la droite vers la gauche. Ce qui nous donne�: 0 0 0 0 1 1 0 0.
Et voilà, vous venez de représenter 12 en binaire. Faites pareil pour les 3 autres octets (ce n’est
vraiment pas dur ).
Ceci nous donne au final�:
— 1er octet�: 00001100
— 2ème octet�: 00000011
— 3ème octet�: 00000010
— 4ème octet�: 00000001
Donc, l’adresse 12.3.2.1 en binaire c’est�: 00001100 . 00000011 . 00000010 . 00000001
i
Connaître les puissances de deux vous facilitera vraiment la conversion. Avec un peu de
pratique, ça deviendra automatique.
Va- 128 64 32 16 8 4 2 1
leur
déci-
male
414
IX. Annexes
Jusqu’à présent, nous avons travaillé avec des nombres allant jusqu’à 255. Comment faire pour
représenter en binaire des nombres plus grands�? Eh bien, il suffit d’étendre le tableau ci-dessus
pour s’en rendre compte.
i
La notation NOMBRE(BASE) est très courante et permet de préciser la base mathématique
du nombre. Si on ne précise pas la base, c’est du décimal (base 10). Attention, 10 (décimal)
est différent de 10(2) (binaire, ce qui fait 2 en décimal).
Pour terminer cette section, voici une astuce pour la conversion décimal - binaire qui vous
facilitera la tâche, le temps de s’habituer. Commencez par écrire un tableau comme celui
ci-dessus. Regardez la colonne la plus à gauche et si votre nombre est supérieur ou égal à cette
puissance de 2, retranchez cette valeur à votre nombre et inscrivez 1 en dessous. Sinon, inscrivez
0. Continuez avec la colonne suivante jusqu’à arriver au bout.
Voici un exemple d’application de cette méthode pour écrire le nombre 30 en binaire. On prend
6 bits pour avoir suffisamment de place.
Valeur 32 16 8 4 2 1
décimale
Puis- 2^5 2^4 2^3 2^2 2^1 2^0
sance de
2
Nombre ? ? ? ? ? ?
au dé-
part�:
3010
415
IX. Annexes
30 n’est 0 ? ? ? ? ?
pas plus
grand
que
32, on
continue
30 est su- 0 1 ? ? ? ?
périeur
à 16, on
fait 30 -
16 = 14
14 est su- 0 1 1 ? ? ?
périeur à
8, on fait
14 - 8 =
6
6 est su- 0 1 1 1 ? ?
périeur à
4, on fait
6-4=2
2 est égal 0 1 1 1 1 ?
à 2, on
fait 2 - 2
=0
0 est in- 0 1 1 1 1 0
férieur à
1, on ins-
crit un 0
i
On a ici écrit la valeur sur 6 bits, mais on aurait aussi pu le faire sur 5 bits ou plus.
Rajouter un zéro devant un nombre, quel qu’il soit, ne change pas sa valeur. Comme on
travaille souvent avec des octets, donc des groupes de 8 bits, il est fréquent qu’on écrire
les valeurs en binaire sur 8 chiffres en rajoutant des zéros inutiles. Cela ne change rien aux
valeurs�: 0111102 = 111102 = 000111102 .
416
IX. Annexes
nombre plus grand que 9. En hexadécimal, c’est pareil, mais on a 16 chiffres. Pour représenter
un nombre plus grand que 15, on utilisera plus de chiffres.
Voici la correspondance entre nombres binaires, décimaux et hexadécimaux�:
Hexadéci- Binaire
mal
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
417
IX. Annexes
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
Comme un chiffre hexadécimal correspond à 4 chiffres binaires, on sépare généralement les blocs
de 4 bits pour y voir plus clair.
Et voilà�!
Conclusion
Avant de clore ce chapitre, sachez que les ordinateurs ne peuvent traiter des valeurs numériques
que sous forme d’octets. Le nombre 9810 peut ainsi être stocké sur un octet, car il faut 7 bits
pour le représenter. En revanche, le nombre 25610 nécessite 9 bits, on doit alors nécessairement
mobiliser 2 octets�!
Désormais, vous êtes en mesure de convertir des nombres du binaire au décimal et à l’hexadéci-
mal�! Outre la compréhension du subnetting, cela vous sera utile pour comprendre les systèmes
de détection d’erreurs de transmission, que vous découvrirez dans une prochaine annexe.
Contenu masqué
Contenu masqué n°7
Il suffit de lire le tableau et de remplacer chaque chiffre hexadécimal par sa valeur décimale�!
FE80(16) = 1111 1110 1000 0000(2) Retourner au texte.
418
IX.2. La détection d’erreurs avec la somme de
contrôle
Introduction
Nous avons introduit le principe de la somme de contrôle dans le chapitre « Aujourd’hui,
contrôle�! ». Si vous êtes curieux, nous allons explorer un peu le côté technique de ce
mécanisme dont la vocation est, comme l’indique le titre, la détection d’erreurs. Enjoy�!
?
La parité, c’est quand il y a autant d’hommes que de femmes�?
La parité est la propriété de tout nombre dont le reste d’une division par 2 est un nombre
entier. En d’autres termes, on appelle nombre pair tout nombre qui est multiple de deux. Tout
le monde ici sait qu’est-ce qu’un nombre pair et impair, quand même�?
Un algorithme de vérification longitudinale de parité se base sur la parité. Mais pas la parité
des nombres entiers�: il se base sur la parité de bits.
?
Des bits�? Des 0 et 1 pairs�?
D’abord on se calme, n’ayez pas peur. La parité de bit ou le bit de parité, c’est la forme la
plus simple de détection d’erreur. Ne commencez pas tout de suite à paniquer, l’algorithme de
vérification de parité est plus simple à comprendre que les autres à venir.
Imaginez que vous avez une suite de bits 10011001. Cette suite de bits a 4 bits allumés (4 bits
qui valent 1). Pour nous les humains, nous savons par expérience que 4 est un nombre pair,
nous n’avons pas besoin de faire des calculs pour vérifier la parité de ce nombre. Mais pour un
ordinateur qui fonctionne avec des 0 et 1, comment savoir que 4 est pair�? Comment savoir que
l’ensemble des bits allumés dans une suite de bits est un nombre pair�? On utilise pour ce faire
un bit de parité.
En toute logique, il y a deux types de bit de parité�: le bit de parité pair et le bit de parité
impair.
419
IX. Annexes
?
Ça ne nous dit pas ce qu’est un bit de parité…
Un bit de parité est un bit ( si si ) que l’on ajoute au début d’une suite de bits pour nous
informer de la parité du nombre de bits allumés. C’est un peu difficile à comprendre, nous vous
l’accordons, mais nous sommes là pour vous simplifier cela au maximum.
Prenons une suite de bits 1001111. Cette suite de bits a 5 bits allumés, c’est-à-dire 5 bits qui
valent 1. Nous allons ajouter un bit au début de cette suite. Ce bit va déterminer si 5 est pair
ou impair. Ce bit ajouté, c’est cela le bit de parité.
?
C’est quoi la différence entre le bit parité pair et le bit de parité impair�?
Bonne question�! Chacun de ces deux bits sert à déterminer la parité d’un nombre, c’est-à-dire
déterminer si le nombre de bits allumés est un nombre pair ou impair. Mais quelle est la différence
entre ces deux bits�?
420
IX. Annexes
421
IX. Annexes
IX.2.1.5. Conclusion
Le principe des bits de parité sert de base à d’autres opérations plus complexes. Ce système est
aussi utilisé tel quel dans certains protocoles de niveau 2, nous aurons certainement l’occasion
d’en reparler.
Pour conclure, il y a 4 règles d’or à retenir�:
— Un bit de parité pair vaut 1 lorsque le nombre de bits allumés dans une suite est un
nombre impair. Sinon il vaut 0.
— L’ajout d’un bit de parité pair à une suite donnera un nombre pair de bits allumés.
— Un bit de parité impair vaut 1 lorsque le nombre de bits allumés dans une suite est un
nombre pair. Sinon il vaut 0.
— L’ajout d’un bit de parité impair à une suite donnera un nombre impair de bits allumés.
?
Mais comment le destinataire sait quelle partie du message correspond à la somme de
contrôle�?
Ça, c’est défini en amont par le protocole utilisé�! Dans notre exemple, on va supposer que
seul le dernier octet correspond à la somme de contrôle.
?
Ça ne peut pas aller�! On ne peut pas stocker la valeur 735 sur un seul octet, il en faut 2�!
C’est exact. On commence à mettre le doigt sur une importante problématique. Même si c’était
deux octets, pour peu que le message soit long, on pourrait dépasser la valeur maximale de
65535. Alors comment faire�?
C’est là qu’intervient l’arithmétique modulaire. Ce concept mathématique introduit la
fonction modulo. Le modulo, c’est une opération qui consiste à conserver le reste d’une
division entre deux nombres entiers. On note cette opération mod ou, dans certains langages de
programmation, %. Ainsi, 10 mod 3 = 1, car le reste de la division de 10 par 3 est 1. Essayez
de résoudre ces opérations de tête pour vous entrainer�:
422
IX. Annexes
— 13 mod 4 =�?
— 50 mod 10 =�?
— 735 mod 256 =�?
?
Quel rapport avec la somme de contrôle�?
Regardez la dernière opération que vous avez calculée. Vous avez réussi à faire rentrer la valeur
735 sur un octet�! Bon, pas tout à fait. À partir de la somme calculée, nous avons obtenu
une valeur que nous n’aurions pas obtenue avec un autre message. S’il y avait eu une erreur de
transmission, par exemple sur le dernier bit de la 4ème lettre du message, le «�j�» serait devenu
un « k�», et la valeur numérique décimale serait 107 et non 106. La somme des valeurs serait 736
et non 735. L’opération modulo aurait été 736 mod 256 = 224, et non 223. Le récepteur aurait
donc calculé une somme de contrôle différente de celle fournie par l’expéditeur, c’est-à-dire
223, qui a été jointe au message d’origine. On sait donc qu’il y a forcément eu une erreur de
transmission.
Cette méthode est pratique, car elle est assez simple et rapide à calculer. Toutefois, elle n’est
pas très fiable�: on peut tomber sur le bon résultat malgré des erreurs de transmission. C’est
ce qu’on appelle une collision. Pire encore�: on tombera quand même sur la bonne somme de
contrôle avec les blocs (dans notre exemple, les lettres) inversées.
i
Nous avons choisi le diviseur 256 dans notre exemple. Cela permet de s’assurer que la
somme de contrôle rentrera sur un octet. En effet, tout nombre modulo 256 ne peut pas
donner un résultat supérieur à 255, qui est la valeur maximale stockable sur un octet. On
peut aussi choisir un diviseur inférieur, cela fonctionnerait de la même manière. Par contre,
les chances de collision seront supérieures, puisque le nombre total de valeurs possibles
sera réduit. Si nous avions choisi de stocker notre somme de contrôle sur 2 octets, nous
aurions pu choisir un diviseur allant jusqu’à 65536.
B o n j o u r
423
IX. Annexes
Check-
Check-
Bloc
Étape sum
sum
1 2
1 B 6666
6666
++
2 o 111177
==
177243
177243
++
11031
==
287274
3 n
287274
modmod
256256
==
3118
3118
++
4 j 106137
==
137155
155
+
248
137
=
+
403
5 o 111
403
=
mod
248
256
=
147
248147
++
117109
==
365256
6 u
365256
modmod
256256
==
1090
424
IX. Annexes
1090
++
7 r 114223
==
223223
On retrouve bien la somme de contrôle initiale, 223, comme calculé auparavant. La somme de
contrôle de Fletcher nous donne aussi 223, ce qui est un hasard. Un protocole qui utilise cet
algorithme ajoutera ces valeurs à la fin du message.
Table IX.2.5. – Message tel qu’il est transmis, en incluant la somme de contrôle de Fletcher
Nous avons évoqué le fait que l’ajout de cette seconde somme de contrôle réduit les risques de
collision. En effet, avec une somme de contrôle basique, deux erreurs peuvent se neutraliser
et donner quand même le bon résultat, notamment si deux blocs sont inversés. Avec Fletcher,
comme la deuxième checksum conserve en quelque sorte un historique des opérations, cela
devient fort peu probable. Voyons ce qu’il se passe si, dans notre exemple, deux lettres se
retrouvent inversées lors de la transmission.
Table IX.2.7. – Le message tel qu’il est reçu, avec une inversion
B o j n o u r
066 111 106 110 111 117 114
Check-
Check-
Bloc
sum
Étape sum
1 2
1 B 6666
6666
++
2 o 111177
==
177243
425
IX. Annexes
177243
++
10627
==
283270
3 j
283270
modmod
256256
==
2714
2714
++
4 n 110137
==
137151
151
+
248
137
=
+
399
5 o 111
399
=
mod
248
256
=
143
248
+
117
143
=
+
6 u 365109
365
=
mod
252
256
=
109
252
+
223
109
=
+
475
7 r 114
475
=
mod
223
256
=
219
Cette erreur de transmission n’a pas été détectée par la somme de contrôle simple, mais est
repérée par celle de Fletcher�: on trouve comme résultat 219 au lieu de 223. On sait donc que le
message n’est pas bon et qu’il ne faut pas le prendre en compte.
La facilité de calcul de cet algorithme et sa relative fiabilité lui ont valu d’être publié en 1982
426
IX. Annexes
dans la revue IEEE Transactions on Communications, qui est la référence dans le domaine des
télécommunications. En 1990, une proposition a été émise pour qu’il puisse être utilisé dans
TCP, mais cela n’a pas abouti. En 2018, les systèmes de fichiers ZFS et APFS utilisent toujours
l’algorithme de Fletcher. Ce dernier a inspiré d’autres personnes, comme Mark Adler, qui en a
proposé sa propre version.
B o n j o u r
066 111 110 106 111 117 114
Check-
Check-
Bloc
sum
Étape sum
1 2
1
+
1 B 6667
=
67
6767
++
2 o 111178
==
178245
178245
++
3 n 110288
==
288533
288533
++
4 j 106394
==
394927
1. L’ ASCII est une norme qui fait correspondre des caractères, comme des lettres, à des nombres, exploitables
par les ordinateurs. En ASCII, la lettre A correspond au nombre 65, le B à 66, etc.
427
IX. Annexes
394927
++
5 o 111505
==
505
1.432
505
1.432
++
6 u 117622
==
6222.054
622736
++
r
7 1142.054
==
7362.790
?
Pourquoi on en parle, alors�?
Eh bien voyez-vous, Adler-32 est très utilisé. Mais vraiment très, très utilisé. Et pour cause�:
on le retrouve dans zlib, une bibliothèque logicielle qui est utilisée pour la compression de pas
mal de choses, comme les archives ZIP ou les images PNG. Ce programme est un composant
essentiel de bon nombre de systèmes d’exploitation et de consoles de jeu du 21ème siècle.
Et vous vous demandez, pourquoi Adler-32 se retrouve dans zlib�? C’est très simple�: zlib a été
créée par 2 ingénieurs, le polytechnicien français Jean-loup Gailly… et un certain Mark Adler.
Tant qu’à faire, les deux compères ont aussi créé gzip, un format de compression utilisé sur la
couche 6 (présentation) du modèle OSI.
Ces deux algorithmes, Fletcher et Adler, ont pour avantages la simplicité et la rapidité d’exécution,
mais ne sont pas totalement fiables. De plus, ils permettent de détecter une erreur dans un
message, mais pas de la localiser et encore moins de la corriger. Pour cela, on préférera utiliser
un contrôle de redondance cyclique.
428
IX. Annexes
!
Cette section est liée au chapitre sur le protocole IP . Il est recommandé de connaitre
l’en-tête IPv4 avant de poursuivre.
Le protocole IP dans sa version 4 utilise une somme de contrôle, mais pour l’en-tête des paquets
uniquement. Le principe est relativement simple�: on découpe le header par blocs de 16 bits, et
on les additionne tous. Pour faciliter les choses, on écrira ces calculs en binaire. Si le résultat
s’écrit sur plus de 16 bits, on découpe et on additionne encore, mais en commençant par la droite.
On termine en inversant la valeur de chaque bit et on a la somme de contrôle de l’en-tête IP.
Faisons un exemple en prenant un paquet IP reproduit dans le tableau ci-dessous. Pour
information, il s’agit d’une réponse écho ICMP d’un serveur de Zeste de Savoir.
Off-
Oc-
0 1 2 3
sets
tet
Oc-
Bit0 1 2 3 4 5 6 7 8 9 10111213141516171819202122232425262728293031
tet
Lon-
IP gueur
0 0 IHL DSCP�: ECN
v. to-
5 0 0
4 tale�:
60
Iden-
ti- Frag-
fi- ment
4 32 ca- Flags
off-
tion�: 0
set�:
3580210 0
(8bda16 )
Pro-
Time to- Hea-
8 64To cole der
Live�: ICMP check-
52 (1) sum
Adresse
1296 IP
source�:
92.243.7.44
Adresse
IP
des-
16128
ti-
na-
tion�:
192.168.1.10
429
IX. Annexes
Maintenant, retranscrivons ces valeurs en binaire et faisons abstraction des champs. Cela nous
donne ceci�:
Off-
Oc-
0 1 2 3
sets
tet
Oc-
Bit0 1 2 3 4 5 6 7 8 9 10111213141516171819202122232425262728293031
tet
0 0
0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0
4 32
1 0 0 0 1 0 1 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8 64
0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1296
0 1 0 1 1 1 0 0 1 1 1 1 0 0 1 1 0 0 0 0 0 1 1 1 0 0 1 0 1 1 0 0
16128
1 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0
On découpe cela par blocs de 16 bits, qu’on additionne. Nous allons donc calculer la somme des
nombres suivants�:
— 0100010100000000
— 0000000000111100
— 1000101111011010
— 0000000000000000
— 0011010000000001
— 0000000000000000
— 0101110011110011
— 0000011100101100
— 1100000010101000
— 0000000100001010
Vous pouvez faire le calcul à la main pour vous entrainer. Sinon, une calculatrice binaire fait
l’affaire.
Cela nous donne 10 0010 1010 1110 1000. Comme ce résultat s’écrit sur 18 bits et qu’il
nous en faut 16, on va encore le découper, mais en commençant par la droite. On doit donc
additionner les valeurs suivantes�:
— 0010 1010 1110 1000
— 10
Vous trouverez aisément sans calculatrice que cela fait 0010 1010 1110 1010. Dernière chose,
on inverse la valeur de chaque bit. Les 1 deviennent des 0, les 0 deviennent des 1. Cette opération
s’appelle complément à 1. Nous obtenons ainsi comme valeur�:
1101 0101 0001 0101
On peut aussi l’écrire en hexadécimal�: D51516 . Et voilà notre somme de contrôle de l’en-tête�!
La preuve avec la capture du paquet d’origine, récupérée avec le logiciel Wireshark�:
430
IX. Annexes
On peut voir sur cette image qu’IP n’a même pas pris la peine de vérifier cette somme de
contrôle. Qu’à cela ne tienne, faisons-le nous-mêmes�! Pour cela, l’opération est exactement la
même, on y inclut juste la checksum dans notre addition. Si tout se passe bien, le résultat final
doit être égal à 0.
Nous avons déjà calculé la somme de tout le reste auparavant, cela donnait 10 0010 1010 1110
1000. Ajoutons-y la somme de contrôle transmise�:
— 10 0010 1010 1110 1000
— + 1101 0101 0001 0101
Cela donne 10 1111 1111 1111 1101. Pareillement, on découpe 16 bits en partant de la droite,
ce qui nous mène à la somme suivante�:
— 1111 1111 1111 1101
— + 10
Ce qui fait 1111 1111 1111 1111. On termine en faisant un complément à 1, ce qui fait 0000
0000 0000 0000. On tombe bien sur 0, la somme de contrôle valide bien l’intégrité de l’en-tête�!
Conclusion
Nous avons fait le tour de quelques méthodes de computation de somme de contrôle. Désormais,
vous avez des notions de mathématiques qui vous serviront dans bien des domaines comme la
cryptographie. L’aspect arithmétique des réseaux est peu attrayant et souvent occulté. Il est
pourtant important que vous ayez quelques bases, c’est pourquoi cette annexe est là.
Contenu masqué
Contenu masqué n°8
— 13 mod 4 = 1, car 13 / 4 = 3 et il reste 1
— 50 mod 10 = 0, car 50 / 10 = 5 et il reste 0
— 735 mod 256 = 223, car 735 / 256 = 2 et il reste 223
Retourner au texte.
431
IX.3. Analyse fine des communications réseaux
Introduction
Au long de ce cours, vous avez pu rencontrer des analyses de trames, qui permettent de visualiser
concrètement les données qui transitent sur le réseau. Elles ont été réalisées au moyen du
logiciel Wireshark. Il serait utile que vous sachiez vous aussi utiliser un tel analyseur�: cela vous
permettrait de savoir précisément ce qui est émis ou reçu par votre poste.
Dans ce chapitre, nous allons voir deux analyseurs de trames�: Wireshark, qui dispose d’une
interface graphique très performante, et tcpdump, qui fonctionne en mode texte (en console), ce
qui se révèle bien pratique pour des serveurs.
432
IX. Annexes
i
Cette capture a été prise complètement au hasard. Pour des raisons de confidentialité, des
adresses et des indications horaires ont pu être modifiées.
12:58:37.199240 IP 105.ip-71–57–81.eu
12:58:37.199856 IP 105.ip-71–57–81.eu.44326
… … …
Si on veut plus de détails sur ces paquets, on peut ajouter l’option -vv à notre commande�:
433
IX. Annexes
# tcpdump -vv
tcpdump: listening on ens3, link-type EN10MB (Ethernet), capture
size 262144 bytes
13:00:54.067669 IP (tos 0x8, ttl 5, id 1, offset 0, flags [DF],
proto ICMP (1), length 32)
netmon-1-bhs.ovh.ca > 105.ip-71-57-81.eu: ICMP echo request,
id 43960, seq 1, length 12
13:00:54.067736 IP (tos 0x8, ttl 64, id 10606, offset 0, flags
[none], proto ICMP (1), length 32)
105.ip-71-57-81.eu > netmon-1-bhs.ovh.ca: ICMP echo reply, id
43960, seq 1, length 12
13:00:54.068731 IP (tos 0x0, ttl 64, id 7857, offset 0, flags
[DF], proto UDP (17), length 71)
105.ip-71-57-81.eu.51013 > cdns.ovh.net.domain: [bad udp cksum
0x3c79 -> 0xb297!] 9513+ PTR? 105.71-57-81.in-addr.arpa.
(43)
13:00:54.070665 IP (tos 0x0, ttl 55, id 52876, offset 0, flags
[none], proto UDP (17), length 103)
cdns.ovh.net.domain > 105.ip-71-57-81.eu.51013: [udp sum ok]
9513 q: PTR? 105.71-57-81.in-addr.arpa. 1/0/0
105.71-57-81.in-addr.arpa. PTR 105.ip-71-57-81.eu. (75)
13:00:54.070967 IP (tos 0x0, ttl 64, id 7858, offset 0, flags
[DF], proto UDP (17), length 71)
105.ip-71-57-81.eu.32925 > cdns.ovh.net.domain: [bad udp cksum
0x3c79 -> 0x91b6!] 23524+ PTR? 1.37.114.167.in-addr.arpa.
(43)
13:00:54.073168 IP (tos 0x0, ttl 55, id 40370, offset 0, flags
[none], proto UDP (17), length 104)
cdns.ovh.net.domain > 105.ip-71-57-81.eu.32925: [udp sum ok]
23524 q: PTR? 1.37.114.167.in-addr.arpa. 1/0/0
1.37.114.167.in-addr.arpa. PTR netmon-1-bhs.ovh.ca. (76)
13:00:54.074404 IP (tos 0x0, ttl 64, id 7859, offset 0, flags
[DF], proto UDP (17), length 72)
105.ip-71-57-81.eu.60036 > cdns.ovh.net.domain: [bad udp cksum
0x3c7a -> 0x3c95!] 43386+ PTR? 99.33.186.213.in-addr.arpa.
(44)
13:00:54.076506 IP (tos 0x0, ttl 55, id 40371, offset 0, flags
[none], proto UDP (17), length 98)
cdns.ovh.net.domain > 105.ip-71-57-81.eu.60036: [udp sum ok]
43386 q: PTR? 99.33.186.213.in-addr.arpa. 1/0/0
99.33.186.213.in-addr.arpa. PTR cdns.ovh.net. (70)
^C
8 packets captured
8 packets received by filter
0 packets dropped by kernel
Ainsi, on obtient davantage de détails sur différents protocoles�: on voit notamment les champs
IP et des erreurs de checksum au niveau d’UDP.
On peut enregistrer une capture dans un fichier avec l’option -w�: tcpdump -w frames.cap
434
IX. Annexes
enregistrera les trames capturées dans le fichier frames.cap. Il pourra ensuite être lu avec l’option
-r�: tcpdump -r frames.cap.
Si on souhaite ne conserver que certains flux, on peut appliquer un filtre à la capture. Voici
quelques exemples�:
— Pour ne conserver que les paquets qui concernent l’hôte 192.168.1.1�: tcpdump host
192.168.1.1
— Pour n’avoir que les flux TCP vers ou depuis le port 443�: tcpdump tcp port 443
— Pour exclure les flux SSH (très pratique quand on est justement connecté en SSH )�:
tcpdump not tcp port 22
La référence pour connaitre toutes les possibilités et toutes les options reste le manuel (man
tcpdump). Pour plus d’exemples et plus de précisions sur l’utilisation de tcpdump, nous vous
recommandons cet article de Lea Linux .
!
S’il manque des interfaces, c’est peut-être que vous n’avez pas les droits suffisants pour
exécuter le logiciel. Dans ce cas, essayez de le lancer en mode administrateur (Windows)
ou en root (Linux).
Pour arrêter la capture, cliquez sur le carré rouge dans la barre d’outils principale. Juste en
dessous, vous pouvez filtrer les paquets à l’aide de mots clés comme dhcp, ip, tcp, … Pour
connaitre toutes les possibilités, vous pouvez vous référer à la documentation officielle . Vous
y apprendrez à faire des filtres sur des sous-réseaux (exemple�: ip.addr == 192.168.1.0/24)
ou encore à n’afficher que des segments TCP avec le flag SYN levé.
Dans la partie centrale, on visualise le détail des trames couche par couche. La capture suivante
est tirée d’un autre chapitre de ce cours.
435
IX. Annexes
Si vous réalisez une analyse sur une interface sans-fil, vous allez vite vous rendre compte qu’il
y a anguille sous roche avec la couche 2�: Wireshark montre un autre protocole�! Il s’agit
généralement d’Ethernet ou SLL (Linux cooked). Cela est dû au fait que Wireshark n’est pas
en mesure de lire réellement les trames au niveau 2, alors il fait semblant en proposant une
alternative qui permet quand même de visualiser les adresses source et destination de la couche
liaison de données. Cela est détaillé dans la documentation sur le pseudo-protocole SLL .
i
Il est techniquement possible de visualiser des trames Wi-Fi avec Wireshark si l’on écoute
une interface en mode monitor. Cela est trop complexe pour être expliqué ici, mais vous
pouvez vous référer à cette page (en anglais) .
Vous pouvez afficher le détail d’une couche en double-cliquant dessus, et faire de même pour
chaque section qui débute par un symbole >.
Tout en bas, vous trouvez une représentation en hexadécimal de la section sélectionnée. Dans
l’image suivante, c’est la section IP qui est surlignée en bleu. On y visualise le numéro de version
dans le premier quartet (4), l’IHL (5, soit 20 octets), etc. Ne cherchez pas de lien avec la capture
précédente, il s’agit d’une trame différente.
Conclusion
Nous ne saurions trop vous conseiller de jouer avec les analyseurs pour comprendre de manière
précise ce qui se trame sur votre réseau. N’hésitez pas à explorer par vous-mêmes toutes les
possibilités de Wireshark�: il propose des fonctionnalités incroyablement pointues de traçage de
436
IX. Annexes
flux, de statistiques, de reconstitution d’appels téléphoniques, etc. Quand vous découvrez une
notion dans ce cours, visualiser sa place au sein d’une communication que vous déclenchez est
un excellent moyen de la comprendre et de s’en souvenir.
437
IX.4. Qui gouverne Internet ?
Introduction
Internet est un réseau mondial et décentralisé. Quand on cherche à savoir qui le contrôle, le
gouverne ou a autorité dessus, c’est très difficile de trouver une réponse tellement il y a d’acteurs
différents. Pour y voir plus clair, nous allons suivre trois axes complémentaires�: l’adressage, les
standards, et la politique. Dans un premier temps, nous allons voir comment sont attribuées
les adresses IP et gérés les noms de domaine. Ensuite, nous nous demanderons qui définit les
protocoles et s’il existe une obligation de les respecter. Enfin, nous nous interrogerons sur l’aspect
légal dans un réseau qui ne connait pas de frontières.
438
IX. Annexes
Ces organismes reçoivent une délégation de l’ ICANN pour l’attribution de différents blocs
d’adresses IP ainsi que des numéros de systèmes autonomes, utilisés pour le routage au niveau
mondial. Là encore, ils ne gèrent pas tout eux mêmes. Ils délèguent des blocs d’adresses à d’autres
entités�: les LIR (Local Internet Registry, registres Internet locaux). Ces entités correspondent
généralement aux opérateurs de télécommunications, qui attribuent des adresses IP à leurs
clients finaux.
i
Dans certains pays, il existe un intermédiaire entre les RIR et les LIR�: ce sont les
registres Internet nationaux (en anglais National Internet Registry, NIR). C’est le cas
notamment en Asie (Vietnam, Japon, Chine, …) et en Amérique latine (Brésil, Mexique,
…).
En dehors des adresses IP, l’ ICANN a aussi pour rôle la gestion et la coordination des noms de
domaines. En pratique, là encore, elle délègue à différents organismes la distribution en fonction
du domaine de premier niveau. Ainsi, la société états-unienne Verisign a la charge notamment
1
du .com, du .net et du .tv. Les domaines français que sont .fr, .re, .mf, etc. , sont gérés par
l’ Afnic. De manière générale, chaque pays dispose d’une autorité pour gérer ses domaines de
premier niveau�: l’ ANRT marocaine s’occupe du .ma, DNS Belgium, du .be, NIC Sénégal est
en charge du .sn, etc. Les domaines dits ”génériques” (.info, .biz, …) sont gérés par des sociétés
privées.
i
Les domaines à deux lettres sont exclusivement réservés aux pays. On parle alors de
ccTLD, pour Country Code Level Top Domain. Vous croyiez que le .tv faisait référence
à la télévision�? Perdu, il s’agit de l’État des Tuvalu�! Ce petit pays d’Océanie risque
de disparaitre à cause de la montée des eaux, ce qui pourrait avoir pour conséquence…
la disparition du domaine .tv�! Un tel phénomène peut arriver sans crier gare�: en
octobre 2024, le Royaume-Uni a cédé à la république de Maurice (un archipel de l’océan
Indien) un territoire disputé de longue date. Problème�: le domaine .io était affecté à ce
territoire, dont le nouveau statut ne permet pas de conserver son propre ccTLD�! Cet
439
IX. Annexes
i
accord politique a, possiblement sans qu’aucun responsable ne s’en rende compte, creusé
la tombe du domaine .io. Plus d’infos dans ce billet .
Ces différentes entités permettent, moyennant une redevance, à d’autres entreprises ou as-
sociations de vendre à des particuliers et des professionnels des noms de domaine, tels que
zestedesavoir.com. Ces revendeurs sont appelés registraires ou registrars en anglais. Parmi ces
sociétés, on peut citer OVH ou Gandi.
1. Le .fr est le domaine générique français, mais il en existe de nombreux autres qui correspondent à des
départements ou collectivités d’outre-mer�: .gf (Guyane), .gp (Guadeloupe), .mq (Martinique), .pm (Saint-Pierre-
et-Miquelon), .re (Réunion), .wf (Wallis-et-Futuna), .yt (Mayotte), .mf (Saint-Martin), .bl (Saint-Barthélemy) et
.tf (Terres Australes et les Antarctiques Françaises).
440
IX. Annexes
!
Il y a une différence entre une norme et un standard�! En anglais, ces deux notions sont
désignées par le terme générique ”standard”, mais en français, on est plus précis. La norme
a une dimension officielle, elle doit obligatoirement être respectée. Quand l’ IEEE édite une
norme relative à la puissance d’émission d’une carte Wi-Fi, par exemple, un constructeur
doit impérativement la suivre à la lettre. Sans cela, non seulement son produit risque de
ne pas fonctionner correctement, mais en plus, cela pourrait être dangereux pour la santé
et la sécurité des personnes. A contrario, si un industriel n’implémente pas un standard
de l’ IETF, cela ne présente pas de danger pour les utilisateurs. Au pire, son produit ne
fonctionnera pas bien et les gens ne l’utiliseront pas. Tant pis pour lui�!
Un petit schéma pour récapituler tout ce que nous avons vu jusqu’à présent�?
441
IX. Annexes
442
IX. Annexes
Conclusion
Ce chapitre est loin d’être exhaustif, les entités qui ont une influence sur Internet sont trop
nombreuses pour toutes les citer. Nous avons évoqué les organismes principaux qui font autorité
sur le réseau, au travers de la gestion de l’adressage, des protocoles, des standards et des normes.
La problématique de la législation sur un réseau mondial est complexe, nous avons tenté de
vous donner des pistes générales pour comprendre comment elle peut possiblement s’appliquer.
Nous espérons que vous avez une idée plus claire de qui ”gouverne” Internet.
443
Conclusion
444
Conclusion
Ce cours a été initialement rédigé pour le feu Site du Zéro, devenu OpenClassrooms. Ce dernier
ayant fait n’importe quoi au point de rendre le contenu inintelligible, il a été décidé de le porter
sur Zeste de Savoir. La rédaction est maintenant terminée. Les contenus publiés sont maintenus
dans la mesure du possible grâce à vos retours. Vous pouvez vous tenir au courant des nouvelles
publications sur notre page Facebook et notre compte Twitter .
Suite au succès de ce cours, notamment son utilisation comme référence dans des entreprises et
universités, Les Réseaux de Zéro sont aussi édités en livre aux éditions Eyrolles depuis
le 17 février 2022. Cette édition reprend en grande partie le cours existant en ligne, avec
quelques adaptations, et inclut en plus des exercices pratiques. Sa déclinaison axée hacking, La
Cybersécurité de Zéro , est disponible depuis le 2 mai 2024. Plus d’infos ici�!
Nous, Junior et Vince, auteurs, tenons à remercier toutes les personnes qui sont intervenues sur
ce tuto depuis sa création, le 14 février 2009. Citons en particulier The frog, qui a collaboré
avec nous durant 3 ans, kankan qui est à l’origine du titre de ce tuto, @Taurre qui a eu la
lourde tâche d’assurer la validation éditoriale pendant 9 mois, ainsi que Titouan Soulard qui a
créé de nombreux schémas. Nous remercions également les anciens validateurs de la période où
ce cours était publié sur OpenClassrooms�: Guizmo2000 , Zopieux , Coyote , Petrus6 ,
Arthurus , Natalya , Thunderseb , coma94 , SimSonic , Oneill887 et Alexis211 ,
ainsi que toute l’équipe menée par Stylla qui a entrepris une correction complète du cours en
2012 - ça a pris 48 jours�!
Pour la version livre du cours , nous remercions toute l’équipe éditoriale de la maison d’édition
Eyrolles, qui a cru en notre projet et nous a permis de réaliser un rêve. Merci en particulier à
Antoine Derouin, responsable d’édition, qui a chapeauté le tout.
Enfin, nous vous remercions, vous, lecteurs, lectrices, pour vos retours, votre soutien, votre
fidélité et vos témoignages. Depuis 15 ans, nous lisons l’intégralité de vos messages, qui nous
poussent à vouloir vous proposer le meilleur contenu possible. C’est grâce à vous que la rédaction
de ce cours a repris en 2018, après 5 longues années d’abandon.
445
Liste des abréviations
Afnic Association française pour le nommage Internet en coopération. 439
AfriNIC African Network Information Centre. 438
ANRT Agence Nationale de Réglementation des Télécommunications. 439
APNIC Asia-Pacific Network Information Center. 438
ARIN American Registry for Internet Numbers. 438
ASCII American Standard Code for Information Interchange. 422, 427
ATM Asynchronous Transfer Mode. 294
CAT5 Category 5. 23
CAT5E Category 5E. 23
CRC Contrôle de Redondance Cyclique / Cyclic Redundancy Check. 47
446
Liste des abréviations
TCP Transmission Control Protocol. 48, 168– 172, 174, 176, 178
TLS Transport Layer Security. 345
447
Fletcher's checksum improves traditional checksums by combining the checksum of each step with intermediate sums, which mitigates the risk of block inversions and reduces collision chances. Traditional checksums might miss errors caused by block rearrangements or produce identical results despite errors. Fletcher's method offers enhanced accuracy and reliability in detecting errors during transmission .
A parity bit serves as a basic form of error detection by indicating whether the count of 1s in a bit sequence should be even or odd. By comparing the parity bit with the recalculated parity of a received sequence, discrepancies are revealed, indicating potential errors. This mechanism identifies single-bit errors but is less effective against multi-bit errors or specific alterations .
Simple checksum techniques may fail to detect certain errors due to limitations such as collisions, where errors counterbalance or rearrange blocks without affecting the overall checksum value. Additionally, they struggle with accurately detecting multi-bit errors, significantly reducing reliability in high-error environments without enhanced error-prevention measures like Fletcher's checksum .
Binary operations enable efficient data processing by aligning with the binary nature of computer systems, which operate using high and low voltage levels represented as binary 1s and 0s. Logical operations such as AND, OR, and NOT allow computers to execute fundamental tasks, resolve logical conditions, and facilitate fast arithmetic calculations essential for complex algorithms and data management .
The modulus operation constrains summed data values within a specific range, ensuring they fit within a predetermined bit size, such as an 8-bit byte. For data integrity checks, this restricts the resultant checksum value to the size of a standard data unit, such as 256 for an 8-bit byte. If transmission alters any data bit, the calculated checksum will differ, revealing an error .
Hexadecimal simplifies binary representation by reducing long binary sequences into shorter, more manageable forms. Since one hexadecimal digit equates to four binary digits, large binary values collapse into fewer characters. For instance, a long binary sequence such as 1111 1110 can be easily expressed as FE in hexadecimal, which simplifies reading and comprehension, particularly in computing contexts like memory addressing .
To convert a decimal number like 1337 into binary form, decompose the number into powers of two. For 1337, it can be expressed as 1337 = 1024 + 256 + 32 + 16 + 8 + 1, equivalent to 2^10 + 2^8 + 2^5 + 2^4 + 2^3 + 2^0. In binary, this is represented as 10100111001 .
Hexadecimal numbers utilize base 16, having 16 different digits (0-9 and A-F). Each hexadecimal digit corresponds directly to a four-bit binary sequence, simplifying conversion. For example, hexadecimal FE80 translates to binary as 1111 1110 1000 0000. This grouping aids clarity and ensures accurate conversion between bases .
A parity bit is used to signify the parity (even or odd) of the number of set bits (1s) in a data sequence to detect errors. For even parity, a parity bit is set to 1 if the number of 1s is odd, making the total count even. Conversely, for odd parity, a parity bit is added if the number of 1s is even, ensuring an odd count of 1s. This system can detect if a single bit has changed during transmission, as the received sequence's parity will not match the expected parity .
Binary representation is crucial in IPv4 subnetting because subnet masks and addresses are processed in binary form. Each address or mask component is converted into an 8-bit binary sequence, facilitating the determination of network and host portions by applying bitwise operations. This understanding also aids in recognizing possible network divisions or segmentations .