# Adressage IPV4
## Adresse IP
Une adresse IP permet d'identifier une machine de manière unique sur un réseau donné.
Une adresse IP est représentée par 4 octets, soit 32 bits: `192.168.1.2`.
Valeur possible de l'octet de 0 à 255, soit 256 possibilités.
Une adresse IP n'a du sens qu'avec un masque de réseau qui détermine le nombre de machine hôtes.
exemple d'adresse IP et de masque réseau
```
// adresse IP classe C
192.168.1.2
// masque de sous réseau par défaut pour les adresses de classe C
255.255.255.0
```
### Ecriture d'une adresse IP binaire
```
192 . 168 . 1 . 2
1100 0000.1010 1000.0000 0001.0000 0010 // écriture en binaire de 192.168.1.2
```
## Sous-réseau
- Ils permettent de faire la séparation entre la partie réseau et la partie machine de l’adresse IP,
- La partie réseau est représentée par des bits à 1, et la partie machine par des bits à 0,
- Le masque ne représente rien sans l’adresse IP à laquelle il est associé.
Le masque 255.255.255.0 correspond par exemple à un sous-réseau de 24 bits et permet d'avoir 254 hôtes.
Le masque de sous-réseau permet de déterminer les deux parties d'une adresse IP correspondant respectivement au numéro du réseau et au numéro de l'hôte.
**Il est obtenu en mettant à 1 les bits du réseau et à 0 les bits de l'hôte**.
### Ecriture d'un masque de sous-réseau en binaire
```
255 . 255 . 255 . 0
1111 1111.1111 1111.1111 1111.0000 0000 // écriture en binaire de 255.255.255.0
```
## Adressage en classe (classfull)
| Classe | Bits de départ | Début | Fin | Notation CIDR par défaut | Masque de sous-réseau par défaut |
| ------ | ----- | ----- | ----- | ----- | ----- |
| Classe A | 0 | 0.0.0.0 | 126.255.255.255(127 est réservé) | /8 | 255.0.0.0 |
| Classe B | 10 | 128.0.0.0 | 191.255.255.255 | /16 | 255.255.0.0 |
| Classe C | 110 | 192.0.0.0 | 223.255.255.255 | /24 | 255.255.255.0 |
| Classe D (multicast) | 1110 | 224.0.0.0 | 239.255.255.255 | | 255.255.255.255 |
| Classe E (réservée) | 1111 | 240.0.0.0 | 255.255.255.255 | | non défini |
Cela veut dire que :
- la classe A commence à 0.0.0.0 et se se termine normalement à 127.255.255.255
- mais 127.x.x.x est utilsée pour le loopback, c'est le localhost de la machine
- (on peut donc dire que) la classe A se termine par 126.255.255.255
- la classe B commence à 128.0.0.0, pourquoi 128 ?
- dans le tableau ci-dessus, dans la colonne "bits de départ" de la classe B vous voyez 10 (un zéro pas dix hein :smirk:), cela veut dire que le premier octet commence par 10 en binaire, la première adresse de la classe B est donc
- `1000 0000.0000 0000.0000 0000.0000 0000` en binaire, ce qui donne en décimal `128.0.0.0`
- la classe C ...
#### Exemple : Identifier la partie réseau et la partie hôte d'une adresse IP
```
// pour le masque réseau 255.255.255.0
__________Réseau____________ _Machine
| | |
1111 1111.1111 1111.1111 1111.0000 0000 // écriture en binaire de 255.255.255.0
```
la partie de gauche avec les 1 identifie le réseau, les 0 identifie ls hôtes.
#### Exercice
nous avons les informations suivantes :
- IP : 192.168.1.2
- masque sous réseau par défaut : 255.255.255.0
```
1100 0000.1010 1000.0000 0001.0000 0010 // écriture en binaire de 192.168.1.2
// pour le masque réseau 255.255.255.0
1111 1111.1111 1111.1111 1111.0000 0000 // écriture en binaire de 255.255.255.0
```
Ce qui est susceptible d'être demandé lors d'un examen :
1. Déterminer l'ID réseau
2. Déterminer le nombre d'adresse utilisable
3. Déterminer l'adresse de *broadcast* du réseau
4. Déterminer la plage adressable
##### Déterminer l'ID réseau
il s'obtient avec un *ET* logique de l'adresse IP et du masque de sous réseau :
```
1100 0000.1010 1000.0000 0001.0000 0010 // écriture en binaire de 192.168.1.2
// ET (logique)
1111 1111.1111 1111.1111 1111.0000 0000 // écriture en binaire de 255.255.255.0
// Résultat :
1100 0000.1010 1000.0000 0001.0000 0000
// conversion du résultat en décimal
192 . 168 . 1 . 0
```
L'ID réseau est donc `192.168.1.0`.
##### Déterminer le nombre d'adresse utilisable
la formule :
$$
nombreAdressesUtilisables = 2^n - 2
$$
`n` étant égal au nombre de bits représentant la partie hôte (dans notre cas il y a 8 zéro)
```
1111 1111.1111 1111.1111 1111.0000 0000
```
$$
2^8 - 2 = 256 - 2 = 254
$$
##### Déterminer l'adresse de *broadcast* du réseau
à partir de l'ID réseau, passer tous les 0 de la partie qui identifie l'hôte à 1.
```
1100 0000.1010 1000.0000 0001.0000 0000
// les 8 derniers 0 identifiant l'hôte, on les passe à 1 soit :
1100 0000.1010 1000.0000 0001.1111 1111
192.168.1.255 // résultat en décimal
```
L'adresse de broadcast est `192.168.1.255`
##### Déterminer la plage adressable
Nous avons donc un réseau identifié par 192.168.1.0 et son adresse de broadcast 192.168.1.255.
la plage d'adresses IP utilisables va de 192.168.1.1 à 192.168.1.255.
A RAJOUTER EXERCICE/EXEMPLE PLUS COMPLEXE.
## CIDR
Bien que les sous-réseaux soient encore fréquemment définis aux frontières d'octet, les réseaux 24 bits étant les plus courants, d'autres masques sont désormais possibles.
exemple avec 192.168.1.68/26
Ce que l'on peut déterminer (et qui peut donc être demandé en examen) :
1. Quel est l'ID réseau
2. Quel est l'adresse du premier hôte
3. Quel est l'adresse de broadcast
### Déterminer l'ID réseau
Avez l'adresse IP :
```
192.168.1.68 // adresse IP en décimal
1100 0000.1010 1000.0000 0001.0100 0100 // adresse ip en binaire
```
et le masque /26
```
1111 1111.1111 1111.1111 1111.1100 0000 // masque /26 en binaire
255.255.255.192 // en décimal
```
l'ID réseau se détermine avec un ET logique entre l'adresse IP et le masque :
```
1100 0000.1010 1000.0000 0001.0100 0100 // adresse ip en binaire
ET(logique) 1111 1111.1111 1111.1111 1111.1100 0000 // masque /26 en binaire
Résultat : 1100 0000.1010 1000.0000 0001.0100 0000 // ID réseau en binaire
192.168.1.64 // ID réseau décimal
```
### Déterminer l'adresse du premier hôte
Il suffit de rajouter 1 à la partie "hôte" de l'adresse ID réseau 192.168.1.**64** (en décimale !) : ce qui donne comme résultat 192.168.1.**65** dans notre exemple.
### Déterminer l'adresse de broadcast
à partir de l'ID réseau, on bascule à 1 tous les bits de la partie hôte :
```
192.168.1.64 // ID réseau décimal
1100 0000.1010 1000.0000 0001.0100 0000 // ID réseau en binaire
1100 0000.1010 1000.0000 0001.0111 1111 // l'adresse broadcast (dans notre exemple les 6 derniers 0 passent à 1)
192.168.1.127
```
### Déterminer l'adresse du dernier hôte
Il suffit de soustraire 1 à la partie "hôte" de l'adresse de broadcast 192.168.1.**127** (en décimale !) : ce qui donne comme résultat 192.168.1.**126** dans notre exemple.
# DHCP
DHCP est un protocole réseau dont le rôle est d’**assurer la configuration automatique des paramètres IP** d'une machine.
1. **Discover** (machine hôte) envoie une requête sur le broadcast
2. **Offer** (serveur D.H.C.P.)
3. **Request**
4. **ACK** (serveur D.H.C.P.)

*[CIDR]: Classless Inter-Domain Routing
*[DHCP]: Dynamic Host Configuration Protocol, protocole de configuration dynamique des hôtes
{"metaMigratedAt":"2023-06-15T13:06:15.272Z","metaMigratedFrom":"Content","title":"Adressage IPV4","breaks":true,"contributors":"[{\"id\":\"dc5d326d-6307-484a-8def-c0e3899c9ad6\",\"add\":9065,\"del\":1787}]"}