Ajouts et corrections diverses avant rentrée

This commit is contained in:
Alexis Fourmaux 2025-09-01 19:40:13 +02:00
parent 878b016119
commit b9456a4295
28 changed files with 652 additions and 559 deletions

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 123 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 87 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 121 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 141 KiB

View file

@ -1,10 +1,10 @@
# L'adressage IP
## Première approche de l'adressage IP
## 1 - Première approche de l'adressage IP
Commençons par une approche globale et simplifiée pour bien comprendre comment fonctionne l'adressage IP.
### Adressage logique
### 1.1 - Adressage logique
Nous allons faire une analogie avec le courrier. Imaginons que nous souhaitons envoyer du courrier à des personnes précises. On pourrait attribuer à chaque personne un identifiant à la naissance (son nom par exemple), qui nous permettrait de l'identifier à coup sûr, et mettre cet identifiant sur l'enveloppe. Cet identifiant unique, en informatique, correspond à l'adresse MAC. Il permet d'identifier de manière unique une machine physique.
@ -28,7 +28,7 @@ Un **réseau logique** est formé par des **hôtes** (poste informatique, télé
Dans les réseaux informatiques, nous utilisons le protocole IP (Internet Protocol) pour définir des adresses logiques.
```
### Comment est formée une adresse IP ?
### 1.2 - Comment est formée une adresse IP ?
Nous allons parler ici d'adresse IPv4 (IP version 4), le protocole encore majoritairement utilisé dans le monde. Il existe également le protocole IPv6 (IP version 6) qui devrait remplacer IPv4, mais pour de nombreuses raisons techniques et politiques, cette transition tarde depuis des années.
@ -41,7 +41,7 @@ Pour savoir où s'arrêtent les parties gauche et droite, et donc à quelle part
Nous verrons plus loin le fonctionnement détaillé de l'adresse IP et du masque.
### Routeur et interconnexion de réseaux logiques
### 1.3 - Routeur et interconnexion de réseaux logiques
Les réseaux logiques ont pour objectif de retrouver plus facilement l'emplacement d'un hôte sur le réseau. Mais comment ça se passe en réalité pour faciliter cette recherche ?
@ -59,7 +59,7 @@ En pratique, un routeur est une machine qui possède plusieurs cartes réseau, e
Les algorithmes impliqués dans le routage seront l'objet d'un autre cours. Pour le moment, contentons nous de savoir comment les réseaux logiques peuvent être interconnectés.
## L'adresse MAC
## 2 - L'adresse MAC
```admonish success title="À retenir"
L'**adresse MAC** (*Media Access Control*) ou **adresse physique** est un identifiant physique **unique** stocké directement dans la carte réseau. Toutes les cartes réseau ont une adresse MAC.
@ -69,9 +69,9 @@ Elle est constituée de 48 bits (6 octets) et représentée sous forme hexadéci
**Exemple :** `5E:FF:56:A2:AF:15`
## L'adresse IP
## 3 - L'adresse IP
### Structure d'une adresse IP
### 3.1 - Structure d'une adresse IP
```admonish success title="À retenir"
Une adresse IPv4 (Internet Protocol v4) est une suite de 32 bits (= 4 octets) exprimées sous la forme de 4 nombres décimaux (représentant les 4 octets) séparés par un point.
@ -83,7 +83,7 @@ L'adresse IP d'un hôte permet de définir précisément
![Adresse IP](./adresse-ip.svg)
### Le masque
### 3.2 - Le masque
```admonish success title="À retenir"
Le masque est une suite de 32 bits constituée d'une suite de 1 et d'une suite de 0.
@ -109,7 +109,7 @@ La notation CIDR consiste à faire suivre l'adresse IP par le nombre de bits à
Le masque n'est pas forcément un multiple de 8 : n'importe quel nombre de bits entre 1 et 32 peut être un masque valide, selon la taille du réseau.
```
### L'adresse de réseau
### 3.3 - L'adresse de réseau
```admonish success title="À retenir"
Un réseau est un groupe d'hôtes dont la partie réseau de l'adresse est identique. Un ET logique entre l'adresse IP et son masque permettent de déterminer l'adresse de réseau.
@ -121,7 +121,7 @@ Pour rappel, quand on applique le ET logique, seul 1 ET 1 = 1, tout le reste vau
Si on fait l'opération ET logique, on voit que les bits de la partie hôte sont tous à zéro ( = ils sont masqués) alors que les bits de la partie réseau gardent leur valeur.
### L'adresse de diffusion
### 3.4 - L'adresse de diffusion
```admonish success title="À retenir"
**L'adresse de diffusion** (ou *broadcast* en anglais) permet d'envoyer un message à l'ensemble des hôtes connectés au réseau.
@ -131,7 +131,7 @@ L'adresse de diffusion est la dernière adresse du réseau. Elle est constituée
![Adresse de diffusion](./diffusion.svg)
### Plage adressable et nombre d'hôtes possibles
### 3.5 - Plage adressable et nombre d'hôtes possibles
```admonish success title="À retenir"
La plage adressable est l'ensemble des adresses que peut prendre un hôte sur le réseau.
@ -160,9 +160,9 @@ On utilise toute la plage des valeurs possibles sur ce nombre de bits, mais deux
Dans le réseau 192.168.1.0/24, il y a 32-24 = 8 bits dédiés à la partie hôte, soit 256 valeurs possibles. Comme on enlève l'adresse de réseau et l'adresse de diffusion, il reste 254 valeurs, soit une plage disponible de 254 adresses sur ce réseau.
## Les catégories d'adresses
## 4 - Les catégories d'adresses
### Adresses publiques
### 4.1 - Adresses publiques
Les adresses IP sont censées être uniques sur chaque hôte. Dans un réseau privé local, c'est plutôt simple, il y a généralement peu de machines, et le réseau est isolé du reste du monde. Sur internet, il y a des milliards d'hôtes, ça devient donc beaucoup plus difficile. Il a fallu confier la gestion des adresses à un organisme chargé d'organiser et garantir l'unicité des adresses IP.
@ -174,19 +174,19 @@ Chacun de ces RIR attribue ainsi des plages à des RIL (Registres Internet Locau
Toutes ces adresses, distribuées par L'IANA, sont des adresses dites publiques.
### Adresses privées
### 4.2 - Adresses privées
Les adresses privées sont celles utilisées dans les réseaux privés comme par exemple les réseaux internes des entreprises ou chez des particuliers. Ce sont des plages d'adresses bien définies qui ne seront jamais attribuées par l'IANA pour éviter tout risque d'interférence avec des adresses existant sur internet.
Vous pouvez les utiliser sans risque pour tout réseau interne (entreprise ou chez vous). Vous pouvez également définir des masques plus restrictifs que ceux proposés par défaut.
### Adresses spéciales
### 4.3 - Adresses spéciales
#### L'adresse de réseau
#### 4.3.1 - L'adresse de réseau
Comme dit plus haut, l'adresse de réseau est l'adresse dont la totalité des bits de la partie hôte sont à 0. Cette adresse désigne le réseau en lui-même, pas un hôte en particulier.
#### La boucle locale
#### 4.3.2 - La boucle locale
Les adresses 127.0.0.0/8 sont utilisées pour la boucle locale (c'est à dire atteindre la machine elle-même). On utilise plus généralement l'adresse de bouclage (loopback) 127.0.0.1
- Elle désigne la machine locale
@ -194,19 +194,19 @@ Les adresses 127.0.0.0/8 sont utilisées pour la boucle locale (c'est à dire at
- Elle simule un accès via le réseau même sans réseau
- On peut l'utiliser pour des communications en local ou des tests
#### L'adresse de diffusion (broadcast)
#### 4.3.3 - L'adresse de diffusion (broadcast)
Nous en avons parlé plus haut : c'est la dernière adresse disponible du réseau, celle où tous les bits de la partie hôte sont à 1. Si on veut envoyer un message diffusé à toutes les adresses d'un réseau précis (qui peut être différent du réseau de l'hôte émetteur), c'est cette adresse qu'il faut utiliser.
#### L'adresse de diffusion générale
#### 4.3.4 - L'adresse de diffusion générale
255.255.255.255 : pour diffuser sur le réseau actuel de l'hôte, sans avoir à connaître l'adresse du réseau.
#### L'adresse d'initialisation
#### 4.3.5 - L'adresse d'initialisation
0.0.0.0 : C'est l'adresse utilisée par un hôte lors de la phase d'initialisation (au moment où une machine cherche à se connecter à un réseau IP). Elle ne peut donc pas être affectée à une machine particulière.
### Classes d'adresses
### 4.4 - Classes d'adresses
Historiquement, les adresses IP étaient regroupées en cinq classes. C'était uns sytème rigide, et le masque était implicitement déduit de l'adresse IP (certaines plages d'adresse appartenaient à une classe donnée, et cela suffisait à déterminer le masque). Ce système est devenu obsolète depuis le milieu des années 1990. Nous le mentionnons ici pour que vous en ayez déjà entendu parler.
@ -220,13 +220,15 @@ Les classes A, B ou C définissaient des réseaux d'une certaine taille, et une
Les classes D et E étaient particulières. D servait aux machines diffusant les informations de routage, et E était une plage d'adresses réservées pour un éventuel usage futur.
Des entreprises se voyant attribuer des plages de classe A avaient 16 millions d'adresses IP pour elles seulles. Imaginez le gaspillage d'adresses que ça représentait.
Des entreprises se voyant attribuer des plages de classe A avaient 16 millions d'adresses IP pour elles seules. Imaginez le gaspillage d'adresses que ça représentait.
Aujourd'hui ce système n'existe plus, et n'importe quelle adresse IP peut avoir n'importe quel masque. C'est le système sans classe ("classless" comme le C dans CIDR)
Nous manquons déjà cruellement d'adresses IPv4 alors imaginez si on avait gardé ce système.
## Le plan d'adressage
## 5 - Le plan d'adressage
### 5.1 - Le plan d'adressage
Les organisations ont souvent besoin de segmenter leur réseau interne selon leur mode de fonctionnement. Pour cela, elles vont mettre en place un plan d'adressage précis, qui permettra de distribuer des adresses aux machines hôtes selon leur rôle dans l'organisation, mais également permettre ou empêcher la communication entre certaines machines. L'organisation pourra donc découper son réseaux en sous-réseaux de tailles (et de masques) différents.
@ -241,7 +243,7 @@ Le plan d'adressage devra répondre à certaines contraintes pour être viable,
- On pourra donc utiliser un masque de 29 bits. Nous pouvons fixer l'adresse de sous-réseau à 10.0.0.0/29 et donc avoir un réseau pour notre service comptabilité qui couvre la plage de 10.0.0.1 à 10.0.0.6
### Obtenir une adresse IP
### 5.2 - Obtenir une adresse IP
Toutes les machines qui veulent être rattachées au réseau IP doivent donc avoir une adresse IP unique. Pour cela, il y a **deux stratégies** possibles :
- L'adresse IP est configurée de façon **statique** sur la machine.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View file

@ -0,0 +1,103 @@
# Opérations booléennes
Les opérations que l'on peut effectuer sur des bits sont théorisées par le mathématicien George Boole, dans le cadre de l'agèbre de Boole, ou calcul booléen.
En informatique, on peut avoir besoin de faire des opérations binaires dans deux cas :
- En programmation, quand ion veut valider si une condition est vraie ou fausse. En Python, cela se traduira par l'utilisation du type `bool` qui peut prendre les valeurs `True` ou `False`. C'est comme si on travaille avec un seul bit.
- Faire des calculs sur les bits d'un nombre pour le modifier. C'est une utilisation plus rare en python, mais que l'on retrouve dans le domaine de l'informatique embarquée (soit en Python, soit en C ou C++) ou du réseau. On travaille avec la représentation binaire sous-jacente aux nombres. Il faut alors réfléchir aux nombres comme à des suites de bits, et les opérations s'appliquent les bits 1 à 1.
Nous allons voir dans la suite les opérateurs classiques pour le calcul booléen. Ces opérateurs existent en python, nous verrons donc la syntaxe python également.
```admonish warning title="Attention"
Les opérateurs bit à bit en Python sont différents des opérateurs logiques utilisés dans les conditions.
- Les opérateurs utilisés dans les conditions travaillent avec des types booléens `bool` (valeur `True` ou `False`) et renvoient un résultat booléen. Ils s'écrivent avec des lettres (`and or not`). Comme ils sont très courants, ça facilite la lecture du code.
- Les opérateurs bit à bit travaillent avec la représentation binaire des nombres entiers, c'est à dire directement avec les bits sous jacents aux nombres, et permettent de faire des calculs sur plusieurs bits à la fois. On travaille alors non pas avec des booléens, mais avec des nombres entiers vus comme des séries de bits. Ils sont représentés sous forme de symboles (`& | ~`)
```
## Table de vérité
Nous allons donner pour chaque opérateur une table de vérité. La table montre le résultat de toutes les opérations possibles avec cet opérateur.
Elle comporte plusieurs colonnes pour les **entrées** et la dernière colonne montre la valeur en **sortie**.
Nous utiliserons la valeur 1 pour dire Vrai ou `True` en python, et 0 pour dire Faux ou `False` en python.
## Opérateur ET
```admonish success title="A retenir"
L'opérateur ET ne renvoie 1 que si les deux arguments sont à 1. Sinon il renvoie 0.
**Si A ET B valent 1**
|A|B|A ET B|
|-|-|:-:|
|0|0|0|
|1|0|0|
|0|1|0|
|1|1|1|
En python :
- `and` lorsqu'on travaille avec des booléens
- `&` lorsqu'on veut travailler en bit à bit
```
![ET](ET.svg)
## Opérateur OU
```admonish success title="A retenir"
L'opérateur OU renvoie 1 si au moins l'un des deux arguments est à 1. Sinon il renvoie 0.
**Si A vaut 1 ou si B vaut 1 ou si les deux valent 1**
|A|B|A OU B|
|-|-|:-:|
|0|0|0|
|1|0|1|
|0|1|1|
|1|1|1|
En python:
- `or` lorsqu'on travaille avec des booléens
- `|` lorsqu'on veut travailler en bit à bit.
```
![OU](OU.svg)
## Opérateur NON
```admonish success title="A retenir"
L'opérateur NON inverse la valeur du bit auquel il est appliqué.
|A|NON A|
|-|:-:|
|0|1|
|1|0|
En python:
- `not` lorsqu'on travaille avec des booléens
- `~` pour l'inversion bit à bit.
```
![NON](NOT.svg)
## Opérateur OU EXCLUSIF
```admonish success title="A retenir"
OU EXCLUSIF renvoie 1 si seulement l'un des deux arguments est à 1. Sinon il renvoie 0.
**Si A seulement vaut 1 ou si B seulement vaut 1**
|A|B|A XOR B|
|-|-|:-:|
|0|0|0|
|1|0|1|
|0|1|1|
|1|1|0|
En python,
- il n'existe pas pour les `bool`
- `^` pour les opérations bit à bit
```
![XOR](XOR.svg)

View file

@ -1,6 +1,6 @@
# Représentation des entiers naturels
## Base 10 et généralisation
## 1 - Base 10 et généralisation
Les nombres peuvent avoir plein de représentations différentes, selon les contextes. En informatique, on va en utiliser 4 :
- Décimal (base 10)
@ -51,7 +51,7 @@ La plus petite puissance (celle des unités en base 10) est de 0 (10⁰ = 1) et
Maintenant que nous avons vu comment fonctionnent les bases dans le cas général, nous allons parler des systèmes binaires et hexadécimal utilisés en informatique.
## La base 2, système binaire
## 2 - La base 2, système binaire
Le système binaire est très utilisé en informatique. Il sert notamment en réseaux, et c'est là que nous l'utiliserons, mais également dans l'informatique dite bas niveau, c'est à dire proche de l'électronique.
@ -66,7 +66,7 @@ Chaque symbole est appelé un **bit** (**Bi**nary dig**it**) pour les distinguer
On regroupe souvent les bits en paquets de 8 que l'on va appeler **octets** (bytes en anglais). Un octet permet de représenter 256 nombres (de 0 à 255)
### MSB et LSB
### 2.1 - MSB et LSB
Dans un nombre binaire on se réfère souvent aux bits situés aux extrémités:
- On parlera de **MSB** (*Most Significant Bit*) ou **bits de poids fort** pour les bits les plus à gauche (dont le **poids/rang** est plus élevé)
@ -79,7 +79,7 @@ Pour le nombre $1001_{|2}$ :
|MSB|||LSB|
```
### Multiples d'octets
### 2.2 - Multiples d'octets
Pour parler des capacités de supports de stockage ou de la mémoire vive on parle en multiples d'octets. Il existe deux systèmes.
@ -96,11 +96,11 @@ Pour parler des capacités de supports de stockage ou de la mémoire vive on par
- le gibioctet (Gio) = 2³⁰ octets = 1024 Mio
- le tébioctet (Tio) = 2⁴⁰ octets = 1024 Gio
### Conversions
### 2.3 - Conversions
Dans de nombreux cas il sera nécessaire de pouvoir convertir les nombres d'une base à l'autre. Nous l'utiliserons souvent en réseau, mais également en informatique bas niveau (embarquée).
#### Décimal vers binaire
#### 2.3.1 - Décimal vers binaire
##### Méthode des soustractions successives
La première méthode nécessite de connaître les puissances de 2 par coeur. Elle est simple et rapide pour les petits nombres (en fait pour les nombres plus petits que les puissances de deux que vous connaissez par coeur). Vous trouverez en annexe une table avec les puissances de 2 les plus courantes.
@ -155,7 +155,7 @@ Le nombre $53_{|10}$ qui s'écrit $110101_{|2}$ en binaire :
![divisions successives](./divisions_successives.svg)
```
#### Binaire vers décimal
#### 2.3.2 - Binaire vers décimal
Pour calculer le nombre décimal à partir du nombre binaire, il suffit de prendre la formule de la première partie appliquée à une base 2 : prenez chaque bit à 1 et multipliez-le par son poids.
@ -176,7 +176,7 @@ Et donc :
$$1\times2^5 + 1\times2^4 + 0\times2^3 + 1\times2^2 + 0\times2^1 + 1\times2^0 = 32 + 16 + 4 + 1 = 53$$
```
## La base 16, système hexadécimal
## 3 - La base 16, système hexadécimal
Le système hexadécimal est également très utilisé :
- Les adresses MAC en réseau, ou les adresses IPv6
@ -193,9 +193,9 @@ Sur le même modèle que précédemment, les valeurs des symboles utilisés sont
La convention pour écrire des nombres hexadécimaux est de les précéder par `0x` : `0x1CF`.
Cette écriture fonctionne en Python, qui interprètera votre valeur comme codée en hexadécimal si vous l'écrivez avec `0x`.
### Conversions
### 3.1 - Conversions
#### Binaire vers Hexadécimal
#### 3.1.1 - Binaire vers Hexadécimal
Pour convertir un nombre binaire en hexadécimal, c'est plus simple. Un nombre hexadécimal est facile à représenter avec 4 bits ($1111_{|2} = 15_{|10} = \mathrm{F}_{|16}$).
@ -233,7 +233,7 @@ $$\overbrace{0011}^{3_{|16}}\overbrace{0101}^{5_{|16}}$$
3. Cela nous donne alors $110101_{|2} = 35_{|16}$
```
#### Hexadécimal vers binaire
#### 3.1.2 - Hexadécimal vers binaire
Pour convertir un nombre hexadécimal vers binaire, il faut faire exactement pareil, en remplaçant la représentation hexadécimale du nombre par sa représentation binaire.
@ -241,7 +241,7 @@ Pour convertir un nombre hexadécimal vers binaire, il faut faire exactement par
$$\mathrm{6B}_{|16} = {\overbrace{0110}^{6_{|16}}\overbrace{1011}^{\mathrm{B}_{|16}}}_{|2}$$
```
#### Hexadécimal vers décimal
#### 3.1.3 - Hexadécimal vers décimal
Pour calculer le nombre décimal à partir du nombre hexadécimal, il suffit de prendre la formule de la première partie appliquée à une base 16 : prenez chaque chiffre et multipliez-le par son poids.
@ -263,7 +263,7 @@ Et donc :
$$6\times16^1 + 10\times16^0 = 96 + 10 = 106$$
```
#### Décimal vers hexadécimal
#### 3.1.4 - Décimal vers hexadécimal
##### Base intermédiaire
Cette méthode consiste à d'abord convertir un nombre en binaire, puis à convertir le nombre binaire en nombre hexadécimal.
@ -294,10 +294,6 @@ Toujours avec le nombre $47_{|10}$
On obtient donc $47_{|10} = \mathrm{2F}_{|16}$
```
# Opérations logiques
TODO
# Annexes
### Tableau des puissances de 2

View file

@ -64,3 +64,17 @@
- $10011010_{|2}$
- $100110101_{|2}$
- $111 1001 1100 1011 1101 0001_{|2}$
12. Donnez le résultat des opérations booléennes suivantes, avec `a = True`, `b = False`
- `a and b`
- `a or b`
- `not (a and b)`
- `a and not b`
- `b or not b`
13. Donnez le résultat des opérations bit à bit suivantes, avec $a = 58_{|10}$ et $b = 77_{|10}$ en considérant que $a$ et $b$ sont des octets.
- `a | b`
- `b & a`
- `b ^ a`
- `~b | a`
- `~(b | a)`