0% ont trouvé ce document utile (0 vote)
27 vues38 pages

Annexe

Cette partie aborde les bases de la numération binaire et hexadécimale, essentielles en informatique et en réseau. Elle explique la conversion entre les notations binaire et décimale, ainsi que les principes de fonctionnement des adresses IP en binaire. Enfin, elle introduit le système hexadécimal, utilisé notamment pour les adresses IPv6.

Transféré par

Abdesslam Nfissi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • algorithme Adler-32,
  • sécurité des réseaux,
  • données numériques,
  • souveraineté numérique,
  • masques de sous-réseaux,
  • système binaire,
  • somme de contrôle,
  • système décimal,
  • IETF,
  • cryptographie
0% ont trouvé ce document utile (0 vote)
27 vues38 pages

Annexe

Cette partie aborde les bases de la numération binaire et hexadécimale, essentielles en informatique et en réseau. Elle explique la conversion entre les notations binaire et décimale, ainsi que les principes de fonctionnement des adresses IP en binaire. Enfin, elle introduit le système hexadécimal, utilisé notamment pour les adresses IPv6.

Transféré par

Abdesslam Nfissi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • algorithme Adler-32,
  • sécurité des réseaux,
  • données numériques,
  • souveraineté numérique,
  • masques de sous-réseaux,
  • système binaire,
  • somme de contrôle,
  • système décimal,
  • IETF,
  • cryptographie

Neuvième partie

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.

IX.1.1. Décimal vs binaire : un peu de pratique


Comme nous sommes dans un cours de réseau, nous allons d’abord nous familiariser avec la
conversion d’une adresse IP de sa notation binaire à sa notation décimale et vice versa.

?
Ç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.

IX.1.1.1. Système décimal


Le système de numération décimale est le plus connu aujourd’hui. Oui, il s’agit bien de la
fameuse suite des chiffres�: 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9. Ce système utilise la base 10.
Bon, ne trouvant vraiment pas quoi dire de plus sur cette technique de numération, nous allons
nous contenter de citer Wikipédia pour les avantages et inconvénients de ce système (uniquement
utile pour la culture hein, ce n’est pas à apprendre par cœur )�:

La base dix comporte quelques atouts�:


— Le compte sur les dix doigts est très intuitif
— Elle est construite sur un nombre pair, et la division par deux est la plus courante
— Son ordre de grandeur est satisfaisant, car il permet de réduire considérablement la
longueur d’un grand nombre par rapport à une base deux, tout en conservant des
tableaux d’additions et de multiplications mémorisables
— Les normes internationales sont construites sur cette base
— Elle est la plus courante
Cependant, la base dix n’est pas celle qui offre le meilleur bénéfice, car elle ne s’appuie
pas sur un nombre ayant des propriétés avantageuses�:
— Un nombre comportant beaucoup de diviseurs (ex.�: 12 ou 60) aurait eu un aspect
pratique, or 10 n’en a que deux (2 et 5), et la division par cinq n’est pas la plus

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

IX.1.1.2. Système binaire


Le système binaire est un système de numération, tout comme l’est le système décimal, sauf
que le système binaire utilise une base de 2. Il n’y a que deux chiffres�: 0 et 1. Ces chiffres qui
composent les nombres binaires sont appelés bits (combinaison des deux mots anglais BInary et
digiT ). Si vous vous rappelez bien, quand on a huit bits, on a un octet.
Le système binaire est le système de base des calculs informatiques�: votre processeur travaille
sur une suite de 0 et 1, par exemple pour faire des vérifications. Si telle partie a du courant, le
bit vaudra 1, sinon le bit vaudra 0.
Donc, les adresses IP et les masques de sous-réseaux que vous avez pu voir dans ce cours ne sont
qu’une suite de 0 et 1. Et nous allons dans ce chapitre apprendre à faire la conversion d’une
adresse IP écrite en binaire à une adresse IP écrite en décimal et vice versa.

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.

IX.1.1.3. C’est parti, touchons du binaire


Bon, avant tout, nous allons faire un petit rappel. Une adresse IP est une suite de 4 groupes de
chiffres séparés par un point. Chaque «�groupe�» vaut 1 octet, soit 8 bits. Ce qui nous intéresse
ici est le bit.
D’après les explications ci-dessus, un bit est un nombre qui ne peut prendre que 2 valeurs
possibles�: 0 ou 1. Comme nous avons 8 bits, nous allons donc représenter une adresse IP par 32
chiffres qui ne seront que des 0 et 1. En effet, chaque portion de l’adresse IP valant 8 bits, nous
aurons 8 chiffres par portion. Et comme une adresse IP a 4 portions, nous aurons donc 8 * 4
chiffres, soit 32 chiffres dans la représentation binaire d’une adresse IP.
Nous allons prendre une adresse simple pour commencer�: 12.3.2.1.
Nous allons écrire cette adresse IP en binaire. Rappelez-vous, chaque portion (délimitée par un
point) de l’adresse IP vaut 8 bits. Donc vous devez écrire 4 suites de 8 chiffres séparées par des
points. Pour commencer, on va mettre tous ces chiffres à 0, pour voir pas à pas comment on
procède.
Nous avons donc�:
0 0 0 0 0 0 0 0. 0 0 0 0 0 0 0 0. 0 0 0 0 0 0 0 0. 0 0 0 0 0 0 0 0
Voilà, nous y sommes presque. Nous avons écrit 32 chiffres, donc 4 groupes de 8 chiffres.
Chacun de ces chiffres ne doit valoir que 1 ou 0. Ici nous n’avons qu’une suite de zéros, cela
veut dire que sa valeur correspondante en décimal serait 0.0.0.0. Mais nous voulons représenter

413
IX. Annexes

12.3.2.1, alors comment faire�?


Dans un nombre en binaire, chaque bit, s’il vaut 1, correspond à un certain nombre en décimal.
Ainsi, de la droite vers la gauche on a�:
— chiffre 1�: 1
— chiffre 2�: 2
— chiffre 3�: 4
— chiffre 4�: 8
— chiffre 5�: 16
— chiffre 6�: 32
— chiffre 7�: 64
— chiffre 8�: 128

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.

Voici donc le tableau récapitulatif sur un octet de la correspondance des bits�:

Va- 128 64 32 16 8 4 2 1
leur
déci-
male

414
IX. Annexes

Puis- 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0


sance
de 2
Exemple�:
0 1 0 1 0 1 1 1
8710

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.

Va- 1024 512 256 128 64 32 16 8 4 2 1


leur
déci-
male
Puis- 2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
sance
de 2

Ainsi, si on souhaite représenter le nombre 1337, il suffit de le décomposer en puissances de


deux�:
1337 = 1024 + 256 + 32 + 16 + 8 + 1
1337 = 2^10 + 2^8 + 2^5 + 2^4 + 2^3 + 2^0
On peut donc écrire 133710 = 101001110012 �!

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

On a ainsi 3010 = 0111102 .

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 .

IX.1.2. Un point sur l’hexadécimal


Vous avez réussi à appréhender le binaire pour, par exemple, calculer les masques en IPv4�?
Nous allons donc partir du binaire pour expliquer l’hexadécimal. Comme son nom l’indique, il
s’agit de la base 16 (hexa�: six, décimal�: dix). Elle sert notamment à la notation des adresses
IPv6.
En binaire, il y a 2 chiffres�: le 0 et le 1. Pour représenter un nombre plus grand que 1, on rajoute
un ou plusieurs chiffres. En décimal, c’est pareil�: on écrit plusieurs chiffres pour représenter un

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�:

Décimal Binaire Hexadéci-


mal
0 0 0
1 1 1
2 10 2
… … …
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10
… … …

Les chiffres hexadécimaux vont donc de 0 à F�: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.


Nous ne nous intéresserons pas directement à la conversion hexadécimal - décimal, mais rien ne
vous empêche de chercher par vous-mêmes. Seule la conversion hexadécimal - binaire (et
inversement) sera expliquée ici. Et c’est tout simple�!
Un chiffre hexadécimal se représente par 4 chiffres binaires. Complétons le tableau précédent en
écrivant les zéros inutiles pour les nombres binaires.

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

Maintenant, pour convertir un nombre hexadécimal en binaire ou inversement, il vous suffira de


vous reporter à ce tableau�! À vrai dire, on le retient par cœur assez rapidement, avec un peu
d’entrainement.
Avec IPv6, on utilise souvent le nombre FE80(16) . Qu’est-ce que ça donne en binaire�?

Contenu masqué n°7

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�!

IX.2.1. La vérification de parité


Bienvenue à votre premier baptême du feu.
Comme l’indique le titre, nous allons débuter notre exploration des algorithmes de computation
de somme de contrôle en étudiant l’algorithme de vérification longitudinale de parité.

?
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�?

IX.2.1.1. Le bit de parité pair


Bien. Quand vous utilisez un bit de parité pair, le bit de parité qui sera ajouté à votre suite de
bits aura pour valeur 1 si le nombre de bits allumés est impair.
Un exemple�? Prenons la suite 1111111. Nous avons 7 bits et 7 est un nombre impair. Le bit de
parité sera donc 1.
Retenez ceci�: l’ajout du bit de parité pair rendra l’ensemble des bits allumés pair.
7 est un nombre impair, n’est-ce pas�? Notre bit de parité pair doit donc valoir 1. Et si nous
ajoutons 7 bits allumés + le bit de parité pair, ça donne 8 bits et 8 est un nombre pair. Donc
ajouter un bit de parité pair rendra toujours l’ensemble des bits allumés pair.

IX.2.1.2. Le bit de parité impair


Si vous utilisez un bit de parité impair, le bit doit valoir 1 si l’ensemble des bits allumés est
pair.
Un exemple�? 1101100. Cette suite a 4 bits allumés et 4 est un nombre pair, donc le bit de
parité impair que l’on ajoutera à cette suite vaudra 1. Contrairement au bit de parité pair,
celui-ci rendra l’ensemble des bits impair. 4 est pair, si on ajoute un bit de parité impair (qui
vaut 1) on se retrouve donc avec 5 bits allumés, et 5 est un nombre impair.
En résumé, retenez la règle suivante�:
Soit S, une suite de bits composée de n bits allumés. Un bit de parité pair aura
pour valeur 0 si n est un nombre pair. Un bit de parité impair aura pour valeur 0,
si n est un nombre impair.
Il est vraiment important de comprendre le principe du bit de parité (pair ou impair), car
c’est le principe de base de l’algorithme de vérification longitudinale de parité. C’est d’ailleurs
important pour comprendre le contrôle de redondance cyclique.
Nous allons donc faire quelques exercices�: 3 exercices pour le bit de parité pair et 3 autres pour
le bit de parité impair. C’est parti�! :pirate�:

420
IX. Annexes

IX.2.1.3. Exercices sur le bit de parité pair


Commençons par quelque chose de très simple�: 1110000. Voilà une suite de bits qui a 3 bits
allumés. Nous voulons utiliser un bit de parité pair. Nous savons que le bit de parité pair vaut 1
si et seulement si le nombre de bits allumés est un nombre impair. Ça tombe bien parce que 3
est impair. Donc nous allons réécrire cette suite de bits en intégrant le bit de parité pair. Le bit
de parité pair rendra le nombre de bits allumés pair comme nous l’avons vu. Le bit de parité se
place au début de la suite de bits.
11110000
Voilà, c’est fait. Nous avons désormais 4 bits allumés, ce qui est un nombre pair, car l’ajout
du bit de parité pair rendra toujours l’ensemble des bits allumés pair.
Deuxième exercice�!
Soit la suite de bits 1111100. Nous avons 5 bits allumés. Notre bit de parité pair devra donc
valoir 1 puisque 5 est impair.
11111100
Nous avons désormais 6 bits allumés et 6 est un nombre pair.
Un dernier exercice pour la route�!
Soit la suite 1100000. 2 est un nombre pair. Or le bit de parité pair prend la valeur 1 si et
seulement si le nombre de bits allumés est impair. Il s’avère que 2 n’est pas impair, donc le bit
de parité ne peut pas être allumé. Il aura pour valeur 0.
Nous avons fait exprès de vous faire voir ce cas. Si le nombre de bits allumés est un nombre
pair, il vaudra 0, sinon il vaudra 1 comme nous l’avons fait pour les premiers exercices. Allez,
écrivons cette suite avec le bit de parité.
01100000
Remarquez que n (le nombre de bit allumés, 2 en l’occurrence) + 0 (le bit de parité pair) nous
donne toujours un nombre pair pour respecter la règle.

IX.2.1.4. Exercices sur le bit de parité impair


Vous vous souvenez de la règle�? Le bit de parité impair vaut 1 lorsque le nombre de bits allumés
est un nombre pair, sinon il vaut 0. Cela veut dire que si le nombre de bits allumés est un
nombre impair, le bit de parité impair vaudra 0.
Sans plus tarder, commençons.
Soit la suite 1100000. Cette suite a 2 bits allumés. 2 est un nombre pair, donc le bit de parité
impair vaudra 1. Écrivons cela�:
11100000
Remarquez que nous avons désormais 3 bits allumés et 3 est un nombre impair. Ça confirme
bien la règle�: l’ajout d’un bit de parité impair rendra impair le nombre de bits allumés.
Continuons�!
Soit la suite 1010100. Nous avons 3 bits allumés. 3 est impair, par conséquent le bit de parité
vaudra 0. Cela nous donne�:
01010100.
Pour terminer, considérons la suite 1111110. 6 est un nombre pair, donc le bit de parité impair
vaudra 1. Nous sommes des pros maintenant, ça devrait couler de source�:
11111110

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.

IX.2.2. La somme de contrôle de Fletcher


Le bit de parité, c’est assez simple, c’est rapide à calculer, mais ce n’est pas très performant. Ce
serait mieux d’avoir une information plus fiable. D’un autre côté, on ne veut pas non plus avoir
des méthodes qui sont couteuses en ressources et en temps.
Jusqu’au début des années 1980, un système de somme de contrôle assez simple était utilisé. Il
consiste à découper le message à transmettre en blocs de taille fixe (1 octet, 2 octets, 4 octets,
…). On fait ensuite la somme des valeurs de chacun de ces blocs.
1
Prenons pour exemple le mot «�Bonjour�», encodé en ASCII . Découpons-le en blocs de 1 octet.
On obtient les valeurs suivantes�:
B o n j o u r
066 111 110 106 111 117 114

La somme de toutes ces valeurs donne… 735. On ajoute cette


Quelqu’un aurait une calculatrice�?
valeur au bout du message.

?
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 =�?

Contenu masqué n°8

?
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.

IX.2.2.1. Un Fletcher sauvage apparait !


Vers la fin des années 1970, le physicien John Fletcher, du laboratoire national de Lawrence
Livermore en Californie, propose une amélioration à ce système. Il consiste à ajouter, en plus
de la somme de contrôle étudiée précédemment, la somme de toutes les étapes intermédiaires.
Ainsi, cela permet de prévenir l’inversion de blocs lors de la transmission et réduit le risque de
collision. Comme c’est difficile à visualiser, faisons tout de suite un exemple.
Reprenons le message sur lequel nous avons travaillé. Nous allons calculer, étape par étape, deux
sommes de contrôle�: celle d’origine, et celle de Fletcher, qui consiste à additionner la première
checksum à chaque étape. Nous conservons la même taille de bloc et le même modulo, que nous
appliquerons à chaque étape pour plus de lisibilité (cela ne change rien que cette opération soit
faite à la fin ou au fur et à mesure).

B o n j o u r

423
IX. Annexes

066 111 110 106 111 117 114

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.

Octet 1 Octet 2 Octet 3 Octet 4 Octet 5 Octet 6 Octet 7 Octet 8 Octet 9


B o n j o u r 223 223

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.

Octet 1 Octet 2 Octet 3 Octet 4 Octet 5 Octet 6 Octet 7 Octet 8 Octet 9


B o j n o u r 223 223

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.

IX.2.3. L’algorithme Adler-32


L’algorithme de Fletcher permet, en théorie, une certaine souplesse�: on peut découper les
messages en des blocs de la taille qu’on veut (1 octet, 2 octets, …), on peut choisir sur combien
d’octets tiendra la somme de contrôle, etc. En 1995, l’ingénieur américain Mark Adler propose
cette configuration particulière�:
— Chaque somme de contrôle est calculée sur 2 octets�;
— La checksum 1 prend pour valeur de départ 1, tandis que la checksum 2 part de 0�;
— Une opération est réalisée pour chaque bloc de 8 bits, soit 1 octet�;
— Le diviseur utilisé pour les modulos est 65521�;
— Au bout du message à transmettre, la checksum 2 est inscrite avant la checksum 1.
Reprenons notre exemple et appliquons l’algorithme Adler-32.

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

Le message transmis est alors�:


Oc-Oc-Oc-Oc-Oc-Oc-Oc-Oc-Oc-Oc-Oc-
tettettettettettettettettettettet
1 2 3 4 5 6 7 8 9 1011
B o n j o u r 2.790736

Table IX.2.13. – Message transmis, incluant la somme de contrôle d’Adler-32. La deuxième


checksum est inscrite avant la première.
Ce paramétrage utilise la valeur 65521 pour les modulos. Dans notre exemple, nous n’atteignons
pas cette valeur, donc nous le visualisons pas. Sans rentrer dans les détails, l’utilisation de ce
nombre premier réduit le risque de collision. Toutefois, cette configuration rend l’exécution de
l’algorithme plus lente que la plupart des paramétrages communs de Fletcher.

?
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

IX.2.4. Quand IP rime avec simplicité

!
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

Table IX.2.15. – En-tête complété d’un paquet IP


Nous n’indiquons pas quelle est la checksum, car nous allons la calculer, comme si nous étions à
la place du routeur qui a transmis ce paquet. Pour cela, on considère qu’elle vaut zéro.

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

Figure IX.2.1. – IP header checksum

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.

IX.3.1. Présentation générale


Le principal intérêt de ces logiciels est de visualiser les trames qui transitent par les interfaces
réseaux d’un appareil. Cela est utile pour comprendre et résoudre un dysfonctionnement, mais
cela est aussi très instructif pour connaitre finement un protocole. On peut aussi s’en servir
pour faire de la rétro-ingénierie, c’est-à-dire déterminer le fonctionnement d’une application en
observant son comportement.
Les analyseurs permettent de capturer les flux qui passent en temps réel, de les sauvegarder au
1
format pcap , de lire des enregistrements, de les filtrer et de les analyser finement. Pour les hôtes
ne disposant pas d’une interface graphique, comme souvent les serveurs, nous recommandons
tcpdump. L’installation se fait au moyen du gestionnaire de paquets. Nous supposons que si
vous savez utiliser un serveur, vous savez installer un logiciel.
Pour les systèmes à interface graphique (Windows, Ubuntu, Mac OS X, …), nous conseillons
Wireshark . Rendez-vous sur cette page de téléchargement pour l’installer.

IX.3.2. Utilisation de tcpdump


Que diriez-vous de faire joujou avec notre nouvelle application�? Nous allons commencer par
présenter tcpdump.
Les exemples présentés ici sont capturés depuis un serveur exposé sur Internet. Pour lancer
notre analyse, on lance tout simplement la commande tcpdump. Pour l’arrêter, on utilise la
combinaison CTRL + C (ou ⌘ + C sous Mac).

tcpdump: verbose output suppressed, use -v or -vv for full


protocol decode

1. pcap est un format de fichier permettant de stocker des trames réseaux.

432
IX. Annexes

listening on ens3, link-type EN10MB (Ethernet), capture size


262144 bytes
12:58:37.199174 IP netmon-1-bhs.ovh.ca > 105.ip-71-57-81.eu: ICMP
echo request, id 57303, seq 1, length 12
12:58:37.199240 IP 105.ip-71-57-81.eu > netmon-1-bhs.ovh.ca: ICMP
echo reply, id 57303, seq 1, length 12
12:58:37.199856 IP 105.ip-71-57-81.eu.44326 > cdns.ovh.net.domain:
59980+ PTR? 105.71-57-81.in-addr.arpa. (43)
12:58:37.201701 IP cdns.ovh.net.domain > 105.ip-71-57-81.eu.44326:
59980 1/0/0 PTR 105.ip-71-57-81.eu. (75)
12:58:37.201887 IP 105.ip-71-57-81.eu.53832 > cdns.ovh.net.domain:
6713+ PTR? 1.37.114.167.in-addr.arpa. (43)
12:58:37.203776 IP cdns.ovh.net.domain > 105.ip-71-57-81.eu.53832:
6713 1/0/0 PTR netmon-1-bhs.ovh.ca. (76)
12:58:37.204270 IP 105.ip-71-57-81.eu.42985 > cdns.ovh.net.domain:
46110+ PTR? 99.33.186.213.in-addr.arpa. (44)
12:58:37.206165 IP cdns.ovh.net.domain > 105.ip-71-57-81.eu.42985:
46110 1/0/0 PTR cdns.ovh.net. (70)
12:58:39.857063 IP netmon-1-gra.ovh.net > 105.ip-71-57-81.eu: ICMP
echo request, id 49924, seq 1, length 12
12:58:39.857156 IP 105.ip-71-57-81.eu > netmon-1-gra.ovh.net: ICMP
echo reply, id 49924, seq 1, length 12
12:58:39.857572 IP 105.ip-71-57-81.eu.52686 > cdns.ovh.net.domain:
61030+ PTR? 1.186.222.92.in-addr.arpa. (43)
12:58:39.859535 IP cdns.ovh.net.domain > 105.ip-71-57-81.eu.52686:
61030 1/0/0 PTR netmon-1-gra.ovh.net. (77)
^C
12 packets captured
12 packets received by filter
0 packets dropped by kernel

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.

On peut voir une série de lignes toutes structurées de la même manière�:

heure (au millionième de protocole de niveau 3 source


seconde !)
12:58:37.199174 IP netmon-1-bhs.ovh.ca

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 .

IX.3.3. Utilisation de Wireshark


On en parle tout au long du cours, Wireshark est l’outil le plus simple à utiliser pour faire de
l’analyse réseau. Ouvrons-le tout de suite et réalisons une écoute sur une interface. Pour cela,
double-cliquez sur l’interface à écouter dans la liste proposée.

Figure IX.3.1. – Liste d’interfaces proposées par Wireshark

!
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

Figure IX.3.2. – Représentation d’une trame dans Wireshark

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 >.

Figure IX.3.3. – Détail du protocole de niveau 3

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.

Figure IX.3.4. – Représentation en hexadécimal d’une trame

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.

IX.4.1. Des chiffres et des lettres


Commençons par une problématique plutôt simple�: l’adressage. Comment se fait-il que vous
ayez une adresse IP et pas une autre�? Il y a un organisme en charge de l’attribution des adresses�:
l’ ICANN.
Il s’agit d’une société à but non lucratif, c’est-à-dire qu’elle ne cherche pas à gagner de l’argent.
Elle est basée aux États-Unis, et plus précisément à Los Angeles, en Californie. Un de ses rôles
principaux est de coordonner la distribution des adresses IP. Rassurez-vous, ce n’est pas elle
toute seule qui affecte une à une les milliards d’adresses à tour de bras�! Elle affecte des blocs
d’adresses à des registres Internet régionaux ( RIR, en anglais Regional Internet Registry),
qui sont au nombre de 5.
Chacun de ces 5 RIR est affecté à une région du monde�:
— le RIPE NCC a autorité en Europe, au Proche et Moyen-Orient ainsi qu’en Russie�;
— l’ APNIC, qui officie dans le reste de l’Asie ainsi qu’en Océanie�;
— l’ AfriNIC, pour l’Afrique�;
— l’ ARIN est en charge du Canada, des États-Unis ainsi que de certaines iles proches�;
— le LACNIC s’occupe du reste de l’Amérique.
L’image suivante , issue de l’Atelier Graphique de Wikipédia et distribuée sous licence CC
BY SA 3.0 , représente ces différentes plaques géographiques.

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.

IX.4.2. Des standards et des normes


Gouverner le réseau, c’est aussi définir des normes et des standards. En ce qui concerne les
protocoles utilisés sur Internet pour permettre à tout le monde de communiquer, c’est le rôle de
l’ IETF. Cet organisme de normalisation est basé aux États-Unis mais il est ouvert�: n’importe
qui peut y participer et contribuer à ses travaux. Ce groupe de travail est rattaché à l’Internet
Society (abrégée ISOC), un organisme à but non lucratif créé par Vint Cerf et Bob Kahn, deux
des pères fondateurs d’Internet. Ils ont quand même inventé TCP/IP, ce n’est pas rien. L’
ISOC, et l’ IETF par là-même, fait autorité de facto dans le monde du réseau.
L’ IETF édite des RFC, des documents de référence qui définissent la manière dont doivent
fonctionner des réseaux ou des protocoles. Il appartient ensuite aux industriels d’implémenter ou
non ces standards. Personne n’a d’obligation légale de suivre à la lettre une RFC, mais si un
constructeur de matériel ou un éditeur de logiciel veut que son produit fonctionne normalement
avec d’autres solutions, il a intérêt à la respecter�!
Comme tout le monde peut participer aux travaux de l’ IETF, il est tout à fait possible de
proposer une amélioration à une RFC existante. Dans ce cas, une nouvelle RFC est éditée, en
précisant laquelle ou lesquelles elle rend obsolètes. Là encore, elle deviendra un standard si elle
est adoptée et implémentée globalement. Il en existe pour tout et n’importe quoi�: cela va de
la définition exacte du protocole IP au vocabulaire à employer pour écrire des RFC (numéro
2119), en passant par des poissons d’avril comme le transport de paquets par pigeon voyageur
(véridique�! ). Et ça fait plus de 50 ans que ça dure�: la RFC 1 date d’avril 1969�! L’intégralité
de ces documents est publiée sur le site web de l’ IETF .
Si on se penche vers l’aspect physique des transmissions réseaux, on doit s’intéresser à un autre
institut�: l’ IEEE. C’est une organisation basée aux États-Unis mais qui est plus ancienne que
les autres, car son domaine d’autorité est l’électronique, et non l’informatique. Ainsi, son comité
numéro 1394 est en charge du FireWire, un protocole de transfert de données à vitesse importante
et constante, utilisé notamment par des caméras. Elle est tout de même incontournable dans le
monde du réseau pour son comité 802. C’est lui qui normalise tout ce qui touche aux réseaux
locaux (LAN) au niveau électronique. Dans ce cours, on a fait référence à lui à plusieurs reprises�:
c’est de là que viennent les normes 802.11 (Wi-Fi), le 802.1q (”dot1q” quand on parle de VLAN),
ou encore 802.3 (Ethernet).

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

Figure IX.4.1. – Relations entre les principaux acteurs d’Internet

442
IX. Annexes

IX.4.3. Des politiques et des lois


Nous avons vu qui décidait de l’adressage, des protocoles et des normes, mais qu’en est-il du
contrôle des contenus�? Cela est très variable et relève de la souveraineté de chaque pays.
Internet a été conçu pour transporter des données de manière neutre. Rien ne permet a priori
de discriminer des flux en fonction de leur contenu. Personne ne peut ”contrôler” Internet tout
entier, mais les États peuvent théoriquement décider de ce qui est autorisé ou non sur leur
territoire. Ainsi, la Chine a très tôt instauré un système de contrôle très sévère connu sous
le nom de ”grande muraille” (Great Firewall of China). Les ressources accessibles depuis son
territoire sont très restreintes.
D’autres pays pratiquent la censure de manière moins sévère. En France, les fournisseurs d’accès
à Internet peuvent recevoir une injonction d’empêcher l’accès à un site web. En pratique, ils se
contentent de modifier ou retirer le nom de domaine de leurs serveurs DNS. Ainsi, l’utilisation
d’un autre serveur, comme OpenDNS ou CloudFlare permet de contourner aisément cette
restriction.
De nos jours, la plupart du trafic transitant sur le réseau est chiffré. Il n’est pas possible de
décrypter à la volée tout ce qui passe pour en bloquer une partie. Les agissements illicites sont
détectés a posteriori. En cas de publication contraire à la loi, par exemple des propos racistes
sur un réseau social, la législation peut prévoir une obligation de retrait par la personne qui
propose le service (hébergeur, responsable de publication, …). Toutefois, cette contrainte ne peut
s’appliquer que sur un territoire donné�: si un individu publie depuis une connexion en France
un contenu illégal selon la loi française, mais sur une plateforme aux États-Unis, cette dernière
n’a aucun ordre à recevoir d’un pays étranger.
Il n’est donc théoriquement pas possible de contrôler totalement les flux qui transitent par le
réseau. Cela ne peut normalement se faire qu’à l’échelle d’un État souverain. D’un point de vue
strictement technique, tout blocage peut être contourné, de manière plus ou moins simple, dès
qu’on peut joindre un serveur en dehors de la zone d’influence du blocage en question.

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

BAS Broadband Access Server. 234

CAT5 Category 5. 23
CAT5E Category 5E. 23
CRC Contrôle de Redondance Cyclique / Cyclic Redundancy Check. 47

EBGP Exterior Border Gateway Protocol. 260


EGP Exterior Gateway Protocol. 260, 261

FaaS Function as a Service. 365


FAI Fournisseur d’Accès à Internet. 260
FQDN Fully Qualified Domain Name. 325

Gb/s Gigabits par seconde. 23, 26

IaaS Infrastructure as a Service. 364


IANA Internet Assigned Numbers Authority. 168, 170, 271
IBGP Interior Border Gateway Protocol. 260
ICANN Internet Corporation for Assigned Names and Numbers. 438, 439
IEEE Institute of Electrical and Electronics Engineers. 440, 441
IETF Internet Engineering Task Force. 440, 441
IGP Interior Gateway Protocol. 235, 239
IP Internet Protocol. 46, 48, 168, 169, 171, 172, 176, 178
ISN Initial Sequence Number. 188
ISOC Internet Society. 440

LACNIC Latin America and Caribbean Network Information Centre. 438


LIR Local Internet Registry. 439

446
Liste des abréviations

MAC Media Access Control. 46, 168


Mb/s Mégabits par seconde. 23

NDP Neighbor Discovery Protocol. 334


NIR National Internet Registry. 439
NTLM NT LAN Manager. 349, 351

PaaS Platform as a Service. 364


PAT Port Address Translation. 5, 171

RFC Request For Comments. 440


RIPE NCC Réseau IP Européen - Network Coordination Centre. 438
RIR Registre Internet Régional / Regional Internet Registry. 438, 439
RJ11 Registered Jack 11. 24
RJ45 Registered Jack 45. 24
RTO Retransmit TimeOut. 188

SaaS Software as a Service. 364


SDN Software Defined Networking. 362
SDU Service Data Unit. 64– 66
SMTP Simple Mail Transfer Protocol. 168– 170, 176
SSH Secure Shell. 345– 351

TCP Transmission Control Protocol. 48, 168– 172, 174, 176, 178
TLS Transport Layer Security. 345

UDP User Datagram Protocol. 169– 172, 174, 176

447

Common questions

Alimenté par l’IA

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 .

Vous aimerez peut-être aussi